/** * Copies data from an existing event into this one. * * @param \Phergie\Irc\Event\UserEventInterface $event */ public function fromEvent(UserEventInterface $event) { // EventInterface $this->setMessage($event->getMessage()); $this->setConnection($event->getConnection()); $this->setParams($event->getParams()); $this->setCommand($event->getCommand()); // UserEventInterface $this->setPrefix($event->getPrefix()); $this->setNick($event->getNick()); $this->setUsername($event->getUsername()); $this->setHost($event->getHost()); $this->setTargets($event->getTargets()); }
/** * Monitor channel notices. * * @param \Phergie\Irc\Event\UserEventInterface $event * @param \Phergie\Irc\Bot\React\EventQueueInterface $queue */ public function processNotice(UserEvent $event, Queue $queue) { $logger = $this->getLogger(); $source = $event->getSource(); $nick = $event->getNick(); if ($source === null || $nick === null || $source == $nick) { $logger->debug('Incoming NOTICE not in channel, ignoring'); return; } $server = strtolower($event->getConnection()->getServerHostname()); $channel = $source; $params = $event->getParams(); $message = $params['text']; $logger->debug('Processing incoming NOTICE', array('server' => $server, 'channel' => $channel, 'nick' => $nick, 'message' => $message)); try { $this->db->fetchAssoc(self::SQL_UPDATE, array(':time' => time(), ':server' => $server, ':channel' => $channel, ':nick' => $nick, ':type' => self::TYPE_NOTICE, ':text' => $message)); } catch (\Exception $e) { $logger->error($e->getMessage()); } }
/** * Listen for an user activity and send all stored messages. * * @param \Phergie\Irc\Event\UserEventInterface $event * @param \Phergie\Irc\Bot\React\EventQueueInterface $queue */ public function deliverMessage(UserEventInterface $event, EventQueueInterface $queue) { if ($event->getNick() != $event->getConnection()->getNickname()) { $messages = $this->database->retrieveMessages($event->getNick()); foreach ($messages as $row) { $message = sprintf('(%s) %s: %s', (new \DateTime($row['timestamp']))->format('m/d h:ia'), $row['sender'], $row['message']); $queue->ircNotice($event->getNick(), $message); } } }
/** * Changes the nick associated with the bot in local memory when a change * to it is successfully registered with the server. * * @param \Phergie\Irc\Event\UserEventInterface $event * @param \Phergie\Irc\Bot\React\EventQueueInterface $queue */ public function handleNick(UserEvent $event, Queue $queue) { $connection = $event->getConnection(); if (strcasecmp($event->getNick(), $connection->getNickname()) === 0) { $params = $event->getParams(); $connection->setNickname($params['nickname']); } }
/** * Handle primary nick recovery. * * @param \Phergie\Irc\Event\UserEventInterface $event * @param \Phergie\Irc\Bot\React\EventQueueInterface $queue */ public function handleQuit(UserEvent $event, Queue $queue) { $nick = $event->getNick(); if ($this->primaryNick !== null && $nick == $this->primaryNick) { $this->logger->debug("[AltNick] '{$nick}' disconnected, switching to primary nick"); $queue->ircNick($this->primaryNick); $this->primaryNick = null; } }
/** * Accounts for user nick changes in stored data. * * @param \Phergie\Irc\Event\EventInterface $event * @param \Phergie\Irc\Bot\React\EventQueueInterface $queue */ public function changeUserNick(UserEventInterface $event, EventQueueInterface $queue) { $logger = $this->getLogger(); $connectionMask = $this->getConnectionMask($event->getConnection()); $old = $event->getNick(); $params = $event->getParams(); $new = $params['nickname']; $logger->debug('Changing user nick', array('connectionMask' => $connectionMask, 'oldNick' => $old, 'newNick' => $new)); foreach (array_keys($this->modes[$connectionMask]) as $channel) { if (!isset($this->modes[$connectionMask][$channel][$old])) { continue; } $logger->debug('Moving user mode data', array('connectionMask' => $connectionMask, 'channel' => $channel, 'oldNick' => $old, 'newNick' => $new)); $this->modes[$connectionMask][$channel][$new] = $this->modes[$connectionMask][$channel][$old]; unset($this->modes[$connectionMask][$channel][$old]); } }
/** * Accounts for user nick changes in stored data. * * @param \Phergie\Irc\Event\EventInterface $event * @param \Phergie\Irc\Bot\React\EventQueueInterface $queue */ public function changeUserNick(UserEventInterface $event, EventQueueInterface $queue) { $connection = $event->getConnection(); if (!$this->channelLists->contains($connection)) { return; } $logger = $this->getLogger(); $modesArray = $this->channelLists[$connection]; $old = $event->getNick(); $params = $event->getParams(); $new = $params['nickname']; foreach (array_keys($modesArray->getArrayCopy()) as $channel) { if (!isset($modesArray[$channel][$old])) { continue; } $logger->debug('Moving user mode data', array('channel' => $channel, 'oldNick' => $old, 'newNick' => $new)); $modesArray[$channel][$new] = $modesArray[$channel][$old]; unset($modesArray[$channel][$old]); } }