summaryrefslogtreecommitdiff
path: root/plugins/Irc/extlib/phergie/Phergie/Plugin/Message.php
diff options
context:
space:
mode:
Diffstat (limited to 'plugins/Irc/extlib/phergie/Phergie/Plugin/Message.php')
-rw-r--r--plugins/Irc/extlib/phergie/Phergie/Plugin/Message.php112
1 files changed, 112 insertions, 0 deletions
diff --git a/plugins/Irc/extlib/phergie/Phergie/Plugin/Message.php b/plugins/Irc/extlib/phergie/Phergie/Plugin/Message.php
new file mode 100644
index 000000000..4dfbb30de
--- /dev/null
+++ b/plugins/Irc/extlib/phergie/Phergie/Plugin/Message.php
@@ -0,0 +1,112 @@
+<?php
+/**
+ * Phergie
+ *
+ * PHP version 5
+ *
+ * LICENSE
+ *
+ * This source file is subject to the new BSD license that is bundled
+ * with this package in the file LICENSE.
+ * It is also available through the world-wide-web at this URL:
+ * http://phergie.org/license
+ *
+ * @category Phergie
+ * @package Phergie_Plugin_Message
+ * @author Phergie Development Team <team@phergie.org>
+ * @copyright 2008-2010 Phergie Development Team (http://phergie.org)
+ * @license http://phergie.org/license New BSD License
+ * @link http://pear.phergie.org/package/Phergie_Plugin_Message
+ */
+
+/**
+ * Generalized plugin providing utility methods for
+ * prefix and bot named based message extraction.
+ *
+ * @category Phergie
+ * @package Phergie_Plugin_Message
+ * @author Phergie Development Team <team@phergie.org>
+ * @license http://phergie.org/license New BSD License
+ * @link http://pear.phergie.org/package/Phergie_Plugin_Message
+ */
+class Phergie_Plugin_Message extends Phergie_Plugin_Abstract
+{
+
+ /**
+ * Check whether a message is specifically targeted at the bot.
+ * This is the case when the message starts with the bot's name
+ * followed by [,:>] or when it is a private message.
+ *
+ * @return boolean true when the message is specifically targeted at the bot,
+ * false otherwise.
+ */
+ public function isTargetedMessage()
+ {
+ $event = $this->getEvent();
+
+ $self = preg_quote($this->connection->getNick());
+
+ $targetPattern = <<<REGEX
+ {^
+ \s*{$self}\s*[:>,].* # expect the bots name, followed by a [:>,]
+ $}ix
+REGEX;
+
+ return !$event->isInChannel()
+ || preg_match($targetPattern, $event->getText()) > 0;
+ }
+
+ /**
+ * Allow for prefix and bot name aware extraction of a message
+ *
+ * @return string|bool $message The message, which is possibly targeted at the
+ * bot or false if a prefix requirement failed
+ */
+ public function getMessage()
+ {
+ $event = $this->getEvent();
+
+ $prefix = preg_quote($this->getConfig('command.prefix'));
+ $self = preg_quote($this->connection->getNick());
+ $message = $event->getText();
+
+ // $prefixPattern matches : Phergie, do command <parameters>
+ // where $prefix = 'do' : do command <parameters>
+ // : Phergie, command <parameters>
+ $prefixPattern = <<<REGEX
+ {^
+ (?:
+ \s*{$self}\s*[:>,]\s* # start with bot name
+ (?:{$prefix})? # which is optionally followed by the prefix
+ |
+ \s*{$prefix} # or start with the prefix
+ )
+ \s*(.*) # always end with the message
+ $}ix
+REGEX;
+
+ // $noPrefixPattern matches : Phergie, command <parameters>
+ // : command <parameters>
+ $noPrefixPattern = <<<REGEX
+ {^
+ \s*(?:{$self}\s*[:>,]\s*)? # optionally start with the bot name
+ (.*?) # always end with the message
+ $}ix
+REGEX;
+
+ $pattern = $noPrefixPattern;
+
+ // If a prefix is set, force it as a requirement
+ if ($prefix && $event->isInChannel()) {
+ $pattern = $prefixPattern;
+ }
+
+ $match = null;
+
+ if (!preg_match($pattern, $message, $match)) {
+ return false;
+ }
+
+ return $match[1];
+ }
+} \ No newline at end of file