def irc_CAP(self, client, msg): caps = set(msg.args[2].lower().split()) if msg.args[1] == "LS": sought = (self.req | self.interactive) unavailable = sought - caps for cap in unavailable: client.trigger_handler('cap_denied_'+cap) client.send(message.cap('REQ', ' '.join(sought - unavailable))) if msg.args[1] == "ACK": client.cap_acknowledged = caps for cap in caps: client.trigger_handler('cap_acknowledged_'+cap) if cap in self.interactive: self.pending |= set([cap]) self.try_end(client) if msg.args[1] == "NAQ": client.cap_denied |= caps for cap in caps: client.trigger_handler('cap_denied_'+cap) self.try_end(client)
def irc_AUTHENTICATE(self, client, msg): # We only support PLAIN, so we don't have to do much work here... client.send(message.authenticate(self.auth)) client.send(message.cap('END'))
def try_end(self, client): if not self.pending: client.send(message.cap('END'))
def irc_client_connected(self, client): if self.req or self.interactive: client.send(message.cap('LS'))