| <?php | 
| class bot_help_module implements BotModule { | 
|     const BOT_HELP_FILE = '/cache/help.cache'; | 
|      | 
|     private $PDO; | 
|      | 
|     private function getHelp() { | 
|         if(is_file(BOT_TOPDIR.self::BOT_HELP_FILE)) { | 
|             return unserialize(file_get_contents(BOT_TOPDIR.self::BOT_HELP_FILE)); | 
|         } | 
|          | 
|         $st = $this->PDO->prepare('SELECT DISTINCT dir, init FROM functions ORDER BY dir ASC'); | 
|         $st->execute(); | 
|         $data = $st->fetchAll(); | 
|          | 
|         $help = new BotMsg(); | 
|          | 
|         foreach($data as $element) { | 
|             $dir = $element['dir']; | 
|              | 
|             if(!is_file(BOT_TOPDIR.$dir.'/init.php')) { | 
|                 continue; | 
|             } | 
|              | 
|             $class = include_once(BOT_TOPDIR.$dir.'/init.php'); | 
|             if($class === TRUE) { | 
|                 $class = $element['init']; | 
|             } | 
|              | 
|             if(!$class || !class_exists($class, FALSE)) { | 
|                 continue; | 
|             } | 
|              | 
|             $init = new $class; | 
|             if(!($init instanceof BotModuleInit)) { | 
|                 continue; | 
|             } | 
|              | 
|             $row = $init->help(); | 
|             if(!($row instanceof BotMsg)) { | 
|                 continue; | 
|             } | 
|              | 
|             $help->append($row); | 
|         } | 
|          | 
|         $help->append('Objaśnienie:<br />'."\n" | 
|             . '   <i>argument</i> jest wymagany<br />'."\n" | 
|             . '   <i>[argument]</i> jest opcjonalny'); | 
|          | 
|         file_put_contents(BOT_TOPDIR.self::BOT_HELP_FILE, serialize($help)); | 
|          | 
|         return $help; | 
|     } | 
|      | 
|     function handle($msg, $params) { | 
|         try { | 
|             try { | 
|                 $this->PDO = new PDO('sqlite:'.BOT_TOPDIR.'/cache/functions.sqlite'); | 
|                 $this->PDO->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); | 
|                 $this->PDO->setAttribute(PDO::ATTR_ORACLE_NULLS, PDO::NULL_TO_STRING); | 
|             } | 
|             catch(Exception $e) { | 
|                 @unlink(BOT_TOPDIR.'/cache/functions.sqlite'); | 
|                 throw $e; | 
|             } | 
|              | 
|             $args = trim($msg->args); | 
|              | 
|             if(empty($args)) { | 
|                 return $this->getHelp(); | 
|             } | 
|              | 
|             $args = strtok($args, " \t\n\r\0\x0B"); | 
|              | 
|             $st = $this->PDO->prepare('SELECT dir, init FROM functions WHERE name=? ORDER BY priority ASC'); | 
|             $st->execute(array($args)); | 
|             $data1 = $st->fetchAll(); | 
|             $st->execute(array('*')); | 
|             $data2 = $st->fetchAll(); | 
|              | 
|             $data = array_merge($data1, $data2); | 
|             unset($data1, $data2); | 
|              | 
|             foreach($data as $func) { | 
|                 if(!is_file(BOT_TOPDIR.$func['dir'].'/init.php')) { | 
|                     continue; | 
|                 } | 
|                  | 
|                 $class = require_once(BOT_TOPDIR.$func['dir'].'/init.php'); | 
|                 if($class === TRUE) { | 
|                     $class = $func['init']; | 
|                 } | 
|                  | 
|                 if(!$class || !class_exists($class, FALSE)) { | 
|                     continue; | 
|                 } | 
|              | 
|                 $init = new $class; | 
|                 if(!($init instanceof BotModuleInit)) { | 
|                     continue; | 
|                 } | 
|                  | 
|                 $help = $init->help($args); | 
|                 if($help instanceof BotMsg) { | 
|                     return $help; | 
|                 } | 
|             } | 
|         } | 
|         catch(Exception $e) { | 
|             return new BotMsg('Wystąpił błąd podczas pobierania pomocy dla polecenia. Komunikat:<br />'.nl2br($e)); | 
|         } | 
|     } | 
| } | 
| ?> |