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))
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)
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)
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'))
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)
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)
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)
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']))
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))
def _no_handle(message): _, command, _ = Irc.split_message(message) logger.log(level=5, msg="Unknown IRC command: {}".format(command))