<?php /** * Klasa Ĺ‚adujÄ…ca dla moduĹ‚Ăłw napisanych dla poprzedniej wersji bota */ class bot_legacy_init implements BotModuleInit { const BOT_FUNCTIONS_FILE = '/cache/legacy.functions'; const BOT_HELP_FILE = '/cache/legacy.help'; /** * Wypisuje listÄ™ komend obsĹ‚ugiwanych przez dany plik moduĹ‚u * @param string $file Nazwa pliku * @return array */ function load_funcs($file) { $name = substr(basename($file), 3, -4); $ret = @include_once($file); if(!$ret) return array(); $funcs = call_user_func(array($name, 'register_cmd')); $return = array(); foreach($funcs as $n => $method) { if(!isset($return[$n])) { $return[$n] = array(); } $return[$n][] = array( 'file' => 'handler.php', 'class' => 'bot_legacy_module', 'method' => 'handle', 'params' => array(basename($file), $name, $method) ); } return $return; } /** * Zwraca (z uĹĽyciem cache'a) listÄ™ obsĹ‚ugiwanych komend ze starych moduĹ‚Ăłw * @return array */ function register() { if(is_file(BOT_TOPDIR.self::BOT_FUNCTIONS_FILE)) { return unserialize(file_get_contents(BOT_TOPDIR.self::BOT_FUNCTIONS_FILE)); } else { $return = array(); $files = glob('./modules/*.php'); foreach($files as $file) { $return = array_merge_recursive($return, $this->load_funcs($file)); } file_put_contents(BOT_TOPDIR.self::BOT_FUNCTIONS_FILE, serialize($return)); return $return; } } /** * Ĺaduje skrĂłconÄ… listÄ™ poleceĹ„ i ich parametrĂłw z pliku starego moduĹ‚u * @param string $file Nazwa pliku */ function load_help($file) { $name = substr(basename($file), 3, -4); $ret = @include_once($file); if(!$ret) return array(); call_user_func(array($name, 'help'), NULL); } /** * Zwraca (z uĹĽyciem cache'a) skrĂłconÄ… pomoc dla obsĹ‚ugiwanych poleceĹ„ * @return BotMsg */ function cache_help() { if(is_file(BOT_TOPDIR.self::BOT_HELP_FILE)) { return unserialize(file_get_contents(BOT_TOPDIR.self::BOT_HELP_FILE)); } else { $files = glob(BOT_TOPDIR.'/modules/*.php'); foreach($files as $file) { $this->load_help($file); } $return = GGapi::getResponse(); file_put_contents(BOT_TOPDIR.self::BOT_HELP_FILE, serialize($return)); return $return; } } /** * Zwraca pomoc dla okreĹ›lonej parametrem komendy * @param null|string $params Nazwa komendy * @return false|BotMsg Zwracana wiadomość */ function help($params = NULL) { if($params === NULL) { return $this->cache_help(); } else { $data = $this->register(); if(!$data[$params]) { return FALSE; } foreach($data[$params] as $module) { $ret = @include_once(BOT_TOPDIR.'/modules/'.$module['params'][0]); if(!$ret) continue; call_user_func(array($module['params'][1], 'help'), $params); } $data = GGapi::getResponse(); if($data instanceof BotMsg) { return $data; } else { return FALSE; } } } } return 'bot_legacy_init'; ?>