+++ /dev/null
-<?php\r
-/**\r
- * StatusNet - the distributed open-source microblogging tool\r
- *\r
- * This program is free software: you can redistribute it and/or modify\r
- * it under the terms of the GNU Affero General Public License as published by\r
- * the Free Software Foundation, either version 3 of the License, or\r
- * (at your option) any later version.\r
- *\r
- * This program is distributed in the hope that it will be useful,\r
- * but WITHOUT ANY WARRANTY; without even the implied warranty of\r
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\r
- * GNU Affero General Public License for more details.\r
- *\r
- * You should have received a copy of the GNU Affero General Public License\r
- * along with this program. If not, see <http://www.gnu.org/licenses/>.\r
- *\r
- * Talks to the Statusnet IM architecture to enqueue incoming message messages\r
- * and notify result of nickname registration checks\r
- *\r
- * @category Phergie\r
- * @package Phergie_Plugin_Statusnet\r
- * @author Luke Fitzgerald <lw.fitzgerald@googlemail.com>\r
- * @copyright 2010 StatusNet, Inc.\r
- * @license http://www.fsf.org/licensing/licenses/agpl-3.0.html AGPL 3.0\r
- * @link http://status.net/\r
- */\r
-\r
-class Phergie_Plugin_Statusnet extends Phergie_Plugin_Abstract {\r
- /**\r
- * Message callback details\r
- *\r
- * @var array\r
- */\r
- protected $messageCallback;\r
-\r
- /**\r
- * Registration check callback details\r
- *\r
- * @var array\r
- */\r
- protected $regCallback;\r
-\r
- /**\r
- * Connection established callback details\r
- *\r
- * @var array\r
- */\r
- protected $connectedCallback;\r
-\r
- /**\r
- * Load callback from config\r
- */\r
- public function onLoad() {\r
- $messageCallback = $this->config['statusnet.messagecallback'];\r
- if (is_callable($messageCallback)) {\r
- $this->messageCallback = $messageCallback;\r
- } else {\r
- $this->messageCallback = NULL;\r
- }\r
-\r
- $regCallback = $this->config['statusnet.regcallback'];\r
- if (is_callable($regCallback)) {\r
- $this->regCallback = $regCallback;\r
- } else {\r
- $this->regCallback = NULL;\r
- }\r
-\r
- $connectedCallback = $this->config['statusnet.connectedcallback'];\r
- if (is_callable($connectedCallback)) {\r
- $this->connectedCallback = $connectedCallback;\r
- } else {\r
- $this->connectedCallback = NULL;\r
- }\r
-\r
- $this->unregRegexp = $this->getConfig('statusnet.unregregexp', '/\x02(.*?)\x02 (?:isn\'t|is not) registered/i');\r
- $this->regRegexp = $this->getConfig('statusnet.regregexp', '/(?:\A|\x02)(\w+?)\x02? (?:\(account|is \w+?\z)/i');\r
- }\r
-\r
- /**\r
- * Passes incoming messages to StatusNet\r
- *\r
- * @return void\r
- */\r
- public function onPrivmsg() {\r
- if ($this->messageCallback !== NULL) {\r
- $event = $this->getEvent();\r
- $source = $event->getSource();\r
- $sender = $event->getNick();\r
- $message = trim($event->getText());\r
-\r
- if (strpos($source, '#') === 0) {\r
- $botNick = $this->getConnection()->getNick();\r
- $nickPos = strpos($message, $botNick);\r
- $nickLen = strlen($botNick);\r
- $colonPos = strpos($message, ':', $nickLen);\r
- $commandStr = trim(substr($message, $colonPos+1));\r
- if ($nickPos === 0 && $colonPos == $nickLen && !empty($commandStr)) {\r
- call_user_func($this->messageCallback, array('source' => $source, 'sender' => $sender, 'message' => $commandStr));\r
- }\r
- } else {\r
- call_user_func($this->messageCallback, array('source' => $source, 'sender' => $sender, 'message' => $message));\r
- }\r
- }\r
- }\r
-\r
- /**\r
- * Catches the response from NickServ\r
- *\r
- * @return void\r
- */\r
- public function onNotice() {\r
- if ($this->regCallback !== NULL) {\r
- $event = $this->getEvent();\r
- if ($event->getNick() == 'NickServ') {\r
- $message = $event->getArgument(1);\r
- if (preg_match($this->unregRegexp, $message, $groups)) {\r
- $screenname = $groups[1];\r
- call_user_func($this->regCallback, array('screenname' => $screenname, 'registered' => false));\r
- } elseif (preg_match($this->regRegexp, $message, $groups)) {\r
- $screenname = $groups[1];\r
- call_user_func($this->regCallback, array('screenname' => $screenname, 'registered' => true));\r
- }\r
- }\r
- }\r
- }\r
-\r
- /**\r
- * Intercepts the end of the "message of the day" response and tells\r
- * StatusNet we're connected\r
- *\r
- * @return void\r
- */\r
- public function onResponse() {\r
- switch ($this->getEvent()->getCode()) {\r
- case Phergie_Event_Response::RPL_ENDOFMOTD:\r
- case Phergie_Event_Response::ERR_NOMOTD:\r
- if ($this->connectedCallback !== NULL) {\r
- call_user_func($this->connectedCallback);\r
- }\r
- }\r
- }\r
-}\r