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:
'."\n"
. ' argument jest wymagany
'."\n"
. ' [argument] 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:
'.nl2br($e));
}
}
}
?>