forked from GNUsocial/gnu-social
Merged in Phergie changes
This commit is contained in:
@@ -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) {
|
||||
$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),
|
||||
|
Reference in New Issue
Block a user