コード例 #1
0
 /**
  * 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());
 }
コード例 #2
0
 /**
  * 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());
     }
 }
コード例 #3
0
 /**
  * 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);
         }
     }
 }
コード例 #4
0
 /**
  * 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']);
     }
 }
コード例 #5
0
 /**
  * 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;
     }
 }
コード例 #6
0
 /**
  * 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]);
     }
 }
コード例 #7
0
 /**
  * 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]);
     }
 }