. * * Calls the given Statusnet IM architecture enqueuing method to enqueue * a new incoming message * * @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; protected $regCallback; protected $tocheck = array(); /** * 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->config['statusnet.unregregexp']; if (!$this->unregRegexp) { $this->unregRegexp = '/\x02(.*?)\x02 (?:isn\'t|is not) registered/i'; } $this->regRegexp = $this->config['statusnet.regregexp']; if (!$this->regRegexp) { $this->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()); call_user_func($this->messageCallback, array('sender' => $source, 'message' => $message)); } } public function onNotice() { $event = $this->getEvent(); if ($event->getNick() == 'NickServ') { $message = $event->getArgument(1); if (preg_match($this->unregRegexp, $message, $groups)) { $nick = $groups[1]; call_user_func($this->regCallback, array('nick' => $nick, 'registered' => false)); } elseif (preg_match($this->regRegexp, $message, $groups)) { $nick = $groups[1]; call_user_func($this->regCallback, array('nick' => $nick, 'registered' => true)); } } } }