summaryrefslogtreecommitdiff
path: root/plugins/Irc/extlib/phergie/Phergie/Plugin/Command.php
diff options
context:
space:
mode:
Diffstat (limited to 'plugins/Irc/extlib/phergie/Phergie/Plugin/Command.php')
-rw-r--r--[-rwxr-xr-x]plugins/Irc/extlib/phergie/Phergie/Plugin/Command.php62
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),