'251': 'network count user', '252': 'network count op', '253': 'network count unknowns', '254': 'network count channels', '255': 'server count user', # Channel Topic Events '332': 'server topic', '333': 'server topic_by', # Names reply '353': 'server name reply', '366': 'server name complete', # MOTD '372': 'server motd content', '375': 'server motd start', '376': 'server motd end', } def _signal_rewrite(new): """ Returns a function that re-emits a signal under a different name as defined by new """ return lambda *params: signals.emit(new, params) # Add rewrite signal handlers for mapping in signal_mappings.keys(): signals.add_first(('event %s' % mapping), _signal_rewrite(signal_mappings[mapping]))
def __init__(self, server, name): super(IrcChannel, self).__init__(server, name) self.nicks = {} signals.add_first('server name reply', self._namelist) signals.add_first('server name complete', self._synchronized) signals.add_first('server topic', self._topic) signals.add_first('server topic_by', self._topic_by) signals.add_first('event mode', self._mode) signals.add_first('event nick', self._nick_change) signals.add('command names', self._names)
signals.emit('event %s' % command.lower(), (server, params, prefix)) def _process_params(params): if params.startswith(':'): return [ params[1:] ] # This is trailing next_space = params.find(' ') if next_space != -1: other_params = _process_params(params[next_space + 1:]) other_params.insert(0, params[0:next_space]) return other_params else: return [ params ] def _process_prefix(prefix): if prefix == None: return None prefix_match = re.match(r':(?P<nick>[^@!]+)(!(?P<user>[^@]+))?(@(?P<host>.+))?', prefix) return { 'nick': prefix_match.group('nick'), 'user': prefix_match.group('user'), 'host': prefix_match.group('host') } def _ping_handler(server, parameters, prefix): server.pong(parameters) # Add signal handlers signals.add_first('server incoming', server_incoming) signals.add_first('server event', server_event) signals.add_first('event ping', _ping_handler)
message = parameters[-1] ctcp_cmd = _process_ctcp_cmd(message) target = parameters[-2] if target == server.nickname: target = prefix["nick"] query = server._get_query(target) if ctcp_cmd != None: split = ctcp_cmd.find(' ') message = '' if split > -1: message = ctcp_cmd[split:] ctcp_cmd = ctcp_cmd[:split] signals.emit('ctcp cmd', (server, ctcp_cmd, message, query, prefix)) else: if type(query) == IrcChannel: # If we're in a public channel signals.emit('message public', (server, message, query, prefix)) else: signals.emit('message private', (server, message, query, prefix)) def _mode_handler(server, parameters, prefix): logger.info('%s - %s' % (prefix, parameters)) logger = logging.getLogger('irc.messaging') # Add Signal Handlerss signals.add_first('event privmsg', _privmsg_handler) signals.add_first('event join', _join_handler) signals.add_first('event part', _part_handler) signals.add_first('event mode', _mode_handler)
def set(key, value): child_key, parent = _get_dict_for_path(key, settings, create_missing=True) parent[child_key] = value def load_json(json): global settings settings = simplejson.loads(json) def dump_json(): global settings return simplejson.dumps(settings, indent=' ') # Command handlers def cmd_set(arguments): split = arguments.find(' ') key = arguments if split != -1: key = arguments[:split] arguments = arguments[split + 1:] set(key, arguments) logger.info('%s = %s' % (key, get(key))) else: logger.info('%s = %s' % (key, get(key))) # Signals signals.add_first("command set", cmd_set) # Set the logger logger = logging.getLogger('irc.settings')