Beispiel #1
0
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)
Beispiel #2
0
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]