Example #1
0
    def _handle_mode(self, message):
        prefix, command, parameters = Irc.split_message(message)

        # Auto-join servers after MODE received from NickServ.
        if prefix.lower() == ':nickserv':
            for channel in self.config['channels']:
                self._send_message(Irc.join(channel))
Example #2
0
    def _handle_privmsg(self, message):
        prefix, command, parameters = Irc.split_message(message)
        sender, user, ident = Irc.split_prefix(prefix)

        channel, msg = parameters.split(" ", 1)
        self.send_event("privmsg", msg[1:], sender, channel)

        if prefix is None:
            logger.debug("Malformed PRIVMSG: %s", message)
            return

        tokens = parameters.split(' ')
        # Handles the case of ": <text>". Someone started their message with a space.
        if tokens[1] == ':':
            privmsg_command = tokens[2]
            message = "{} {}".format(privmsg_command, " ".join(tokens[2:]))
        else:
            privmsg_command = tokens[1][1:]
            message = "{} {}".format(privmsg_command, " ".join(tokens[2:]))

        # CTCP PRIVMSGs
        if privmsg_command == '\x01PING':
            self._send_message(Irc.ctcp_pong(sender, message))

        if privmsg_command == '\x01ACTION':
            pass

        elif privmsg_command[0] == '\x01':
            logger.debug('Missing CTCP command %s', privmsg_command)
Example #3
0
    def _process_message(self, message):
        """Process IRC messages."""
        message = message.decode('utf-8')
        # self.send_event("recv", message)

        _, command, _ = Irc.split_message(message)
        self.irc_events.get(command, self._no_handle)(message)
Example #4
0
    def _handle_server_ping(self, message):
        prefix, command, parameters = Irc.split_message(message)

        # PONG any server PINGs with the same parameters.
        self._send_message(Irc.server_pong(parameters))
        self.send_event(
            "server_ping",
            datetime.datetime.strftime(datetime.datetime.now(), '%H:%M:%S'))
Example #5
0
    def _handle_part(self, message):
        prefix, command, parameters = Irc.split_message(message)
        sender, user, ident = Irc.split_prefix(prefix)

        if sender == self.config['nick']:
            channel = parameters.split(" ")[0]
            self.users.pop(channel)

            self.send_event("part", channel)
Example #6
0
    def _handle_notice(self, message):
        # CTCP PONG
        if message.split(" ")[3] == ":\x01PING":
            time_stamp = ".".join(message.split(" ")[-2:])[:-1]
            time_taken = round(time.time() - float(time_stamp[:-1]), 2)
            prefix, command, parameters = Irc.split_message(message)
            user, ident, host = Irc.split_prefix(prefix)

            self.send_event("pong", str(time_taken), user)
Example #7
0
    def _handle_join(self, message):
        prefix, command, parameters = Irc.split_message(message)
        sender, user, ident = Irc.split_prefix(prefix)

        if sender == self.config['nick']:
            channel = parameters[1:]
            self.channels.append(channel)
            self.users[channel] = []

            self.send_event("join", channel)
Example #8
0
    def _handle_433(self, message):
        prefix, command, parameters = Irc.split_message(message)

        if re.search("Nickname is already in use", parameters):
            self.config['nick'] = "_{}".format(self.config['nick'])
            self._send_message(Irc.nick(self.config['nick']))
            self._send_message(
                Irc.user(self.config['user'], self.config['unused'],
                         self.config['owner']))
            self._send_message(
                Irc.mode(self.config['nick'], self.config['mode']))
Example #9
0
    def _handle_userlist_update(self, message):
        prefix, command, parameters = Irc.split_message(message)
        split_params = parameters.split(' ')
        users = split_params[3:][:-1]
        # Remove leading ':' from first user.
        users[0] = users[0][1:]
        channel = split_params[2]

        if channel not in self.users:
            self.users[channel] = users
        else:
            self.users[channel].extend(users)

        self.send_event("users", channel, self.users[channel])
        logger.info(" J  | Joined channels: {}".format(self.users))
Example #10
0
 def _no_handle(message):
     _, command, _ = Irc.split_message(message)
     logger.log(level=5, msg="Unknown IRC command: {}".format(command))