. * * Talks to the Statusnet IM architecture to enqueue incoming message messages * and notify result of nickname registration checks * * @category Phergie * @package Phergie_Plugin_Statusnet * @author Luke Fitzgerald * @copyright 2010 StatusNet, Inc. * @license http://www.fsf.org/licensing/licenses/agpl-3.0.html AGPL 3.0 * @link http://status.net/ */ class Phergie_Plugin_Statusnet extends Phergie_Plugin_Abstract { /** * Message callback details * * @var array */ protected $messageCallback; /** * Registration check callback details * * @var array */ protected $regCallback; /** * Load callback from config */ public function onLoad() { $messageCallback = $this->config['statusnet.messagecallback']; if (is_callable($messageCallback)) { $this->messageCallback = $messageCallback; } else { $this->messageCallback = NULL; } $regCallback = $this->config['statusnet.regcallback']; if (is_callable($regCallback)) { $this->regCallback = $regCallback; } else { $this->regCallback = NULL; } $this->unregRegexp = $this->getConfig('statusnet.unregregexp', '/\x02(.*?)\x02 (?:isn\'t|is not) registered/i'); $this->regRegexp = $this->getConfig('statusnet.regregexp', '/(?:\A|\x02)(\w+?)\x02? (?:\(account|is \w+?\z)/i'); } /** * Passes incoming messages to StatusNet * * @return void */ public function onPrivmsg() { if ($this->messageCallback !== NULL) { $event = $this->getEvent(); $source = $event->getSource(); $message = trim($event->getText()); if ($source == '#statustest') { $this->doPrivmsg('#statustest', "\001Line1\020nLine2"); } call_user_func($this->messageCallback, array('sender' => $source, 'message' => $message)); } } /** * Catches the response from NickServ * * @return void */ public function onNotice() { $event = $this->getEvent(); if ($event->getNick() == 'NickServ') { $message = $event->getArgument(1); if (preg_match($this->unregRegexp, $message, $groups)) { $screenname = $groups[1]; call_user_func($this->regCallback, array('screenname' => $screenname, 'registered' => false)); } elseif (preg_match($this->regRegexp, $message, $groups)) { $screenname = $groups[1]; call_user_func($this->regCallback, array('screenname' => $screenname, 'registered' => true)); } } } }