def handle_modechg(event, message): target_is_channel = False source = message.source target = modelist = None params = [] if (event.eventName.split("/")[-1] == "UMODE2"): target = source modelist = message.parameters[0] else: target = message.parameters[0] modelist = message.parameters[1] if (target[0] in ("#", "&", "+")): target_is_channel = True params = message.parameters[2:] if (target_is_channel): if (not Server.findByName(source) is None and params[-1].isdigit()): timestamp = long(params[-1]) else: timestamp = time.time() channel = Channel.findByName(target) if (channel is None): return if (channel.timestamp == timestamp): channel.setModes(modelist, params, True) elif (channel.timestamp > timestamp): channel.clearModes() channel.setModes(modelist, params) else: client = Client.findByNick(target) if (client is None): return client.changeModes(modelist) log.debug("%s changed modes of %s to %s", source, client.nick, client.usermodes)
def handle_modechg(event, message): target_is_channel=False source=message.source target=modelist=None params=[] if(event.eventName.split("/")[-1]=="UMODE2"): target=source modelist=message.parameters[0] else: target=message.parameters[0] modelist=message.parameters[1] if(target[0] in ("#", "&", "+")): target_is_channel=True params=message.parameters[2:] if(target_is_channel): if(not Server.findByName(source) is None and params[-1].isdigit()): timestamp=long(params[-1]) else: timestamp=time.time() channel=Channel.findByName(target) if(channel is None): return if(channel.timestamp==timestamp): channel.setModes(modelist, params, True) elif(channel.timestamp>timestamp): channel.clearModes() channel.setModes(modelist, params) else: client=Client.findByNick(target) if(client is None): return client.changeModes(modelist) log.debug("%s changed modes of %s to %s", source, client.nick, client.usermodes)
def handle_new_server(event, message): if(ffservices.protoctl["NS"]): source=Server.findByNumeric(message.source) server=Server(message.parameters[0], message.parameters[1], message.parameters[-1], message.parameters[2]) else: source=Server.findByName(message.source) server=Server(message.parameters[0], message.parameters[1], message.parameters[-1]) Server.addServer(server) log.info("Server connecting at %s: %s (numeric %d, %d hops): %s", source.name if source is not None else "[None]", server.name, server.numeric, server.hopcount, server.description)
def handle_squit(event, message): servername=message.parameters[0] if(message.command=="ERROR" or servername==config.get("Server/Name")): log.info("Shutting down: %s", message.parameters[-1]) ffservices.shutdown(0) return server=Server.findByName(servername) if(server is None): return if(server.hopcount==1): log.info("Removing pseudoserver %s: requested by %s: %s", server.name, message.source, message.parameters[-1]) Server.removeServer(server) else: log.info("Server exiting: %s: SQUIT from %s: %s", server.name, message.source, message.parameters[-1]) #luckily as long as we don't specify NOQUIT in our protoctl, unreal will notify #us of each user that is going away BEFORE sending us the SQUIT message, meaning #that the existing code for removing users is used rather than having to figure #out which users are exiting here. Server.removeServer(server)
def handle_leave(event, message): source=Client.findByNick(message.source) if(source is None): source=Server.findByName(message.source) if(source is None): return targetchan=Channel.findByName(message.parameters[0]) if(targetchan is None): return if(message.command=="PART"): targetuser=source reason=message.parameters[-1] if len(message.parameters)>1 else "[none]" elif(message.command=="KICK"): targetuser=Client.findByNick(message.parameters[1]) if(targetuser is None): return reason=message.parameters[-1] log.debug("%s has left %s: %s: %s", targetuser.nick, targetchan.name, "kicked by "+(source.nick if source.__class__.__name__=="Client" else source.name) if message.command=="KICK" else "PART", reason ) targetchan.removeClient(targetuser)
def handle_leave(event, message): source = Client.findByNick(message.source) if (source is None): source = Server.findByName(message.source) if (source is None): return targetchan = Channel.findByName(message.parameters[0]) if (targetchan is None): return if (message.command == "PART"): targetuser = source reason = message.parameters[-1] if len( message.parameters) > 1 else "[none]" elif (message.command == "KICK"): targetuser = Client.findByNick(message.parameters[1]) if (targetuser is None): return reason = message.parameters[-1] log.debug( "%s has left %s: %s: %s", targetuser.nick, targetchan.name, "kicked by " + (source.nick if source.__class__.__name__ == "Client" else source.name) if message.command == "KICK" else "PART", reason) targetchan.removeClient(targetuser)
def handle_sdesc(event, message): server=Server.findByName(message.parameters[0]) server.description=message.parameters[-1]