diff options
Diffstat (limited to 'plugins/Irc/extlib/phergie/Phergie/Plugin/Command.php')
-rw-r--r--[-rwxr-xr-x] | plugins/Irc/extlib/phergie/Phergie/Plugin/Command.php | 62 |
1 files changed, 37 insertions, 25 deletions
diff --git a/plugins/Irc/extlib/phergie/Phergie/Plugin/Command.php b/plugins/Irc/extlib/phergie/Phergie/Plugin/Command.php index 2ab5b69d1..5c0a52e91 100755..100644 --- a/plugins/Irc/extlib/phergie/Phergie/Plugin/Command.php +++ b/plugins/Irc/extlib/phergie/Phergie/Plugin/Command.php @@ -1,6 +1,6 @@ <?php /** - * Phergie + * Phergie * * PHP version 5 * @@ -11,7 +11,7 @@ * It is also available through the world-wide-web at this URL: * http://phergie.org/license * - * @category Phergie + * @category Phergie * @package Phergie_Plugin_Command * @author Phergie Development Team <team@phergie.org> * @copyright 2008-2010 Phergie Development Team (http://phergie.org) @@ -20,20 +20,28 @@ */ /** - * Handles parsing and execution of commands sent by users via messages sent + * Handles parsing and execution of commands sent by users via messages sent * to channels in which the bot is present or directly to the bot. * - * @category Phergie + * @category Phergie * @package Phergie_Plugin_Command * @author Phergie Development Team <team@phergie.org> * @license http://phergie.org/license New BSD License * @link http://pear.phergie.org/package/Phergie_Plugin_Command * @uses extension reflection + * @uses Phergie_Plugin_Message pear.phergie.org */ class Phergie_Plugin_Command extends Phergie_Plugin_Abstract { /** - * Cache for command lookups used to confirm that methods exist and + * Prefix for command method names + * + * @var string + */ + const METHOD_PREFIX = 'onCommand'; + + /** + * Cache for command lookups used to confirm that methods exist and * parameter counts match * * @var array @@ -41,24 +49,28 @@ class Phergie_Plugin_Command extends Phergie_Plugin_Abstract protected $methods = array(); /** - * Prefix for command method names + * Load the Message plugin * - * @var string + * @return void */ - protected $methodPrefix = 'onCommand'; + public function onLoad() + { + $plugins = $this->getPluginHandler(); + $plugins->getPlugin('Message'); + } /** * Populates the methods cache. * * @return void */ - protected function populateMethodCache() + public function populateMethodCache() { - foreach ($this->getPluginHandler() as $plugin) { + foreach ($this->getPluginHandler()->getPlugins() as $plugin) { $reflector = new ReflectionClass($plugin); foreach ($reflector->getMethods() as $method) { $name = $method->getName(); - if (strpos($name, $this->methodPrefix) === 0 + if (strpos($name, self::METHOD_PREFIX) === 0 && !isset($this->methods[$name]) ) { $this->methods[$name] = array( @@ -84,26 +96,26 @@ class Phergie_Plugin_Command extends Phergie_Plugin_Abstract $this->populateMethodCache(); } - // Get the content of the message - $event = $this->getEvent(); - $msg = trim($event->getText()); - $prefix = $this->getConfig('command.prefix'); - - // Check for the command prefix if one is set and needed - if ($prefix && $event->isInChannel()) { - if (strpos($msg, $prefix) !== 0) { - return; - } else { - $msg = substr($msg, strlen($prefix)); - } + // Check for a prefixed message + $msg = $this->plugins->message->getMessage(); + if ($msg === false) { + return; } // Separate the command and arguments $parsed = preg_split('/\s+/', $msg, 2); - $method = $this->methodPrefix . ucfirst(strtolower(array_shift($parsed))); + $command = strtolower(array_shift($parsed)); $args = count($parsed) ? array_shift($parsed) : ''; + // Resolve aliases to their corresponding commands + $aliases = $this->getConfig('command.aliases', array()); + $result = preg_grep('/^' . $command . '$/i', array_keys($aliases)); + if ($result) { + $command = $aliases[array_shift($result)]; + } + // Check to ensure the command exists + $method = self::METHOD_PREFIX . ucfirst($command); if (empty($this->methods[$method])) { return; } @@ -122,7 +134,7 @@ class Phergie_Plugin_Command extends Phergie_Plugin_Abstract // Parse the arguments $args = preg_split('/\s+/', $args, $this->methods[$method]['total']); - // If the minimum arguments are passed, call the method + // If the minimum arguments are passed, call the method if ($this->methods[$method]['required'] <= count($args)) { call_user_func_array( array($this->getPluginHandler(), $method), |