<?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));
|
}
|
}
|
}
|
?>
|