mirror of
https://github.com/jlu5/PyLink.git
synced 2024-12-25 04:02:45 +01:00
inspircd: make handle_part return a list of channels, not just one
Some IRCds, like TS6, allow sending multiple channels (as a comma-separated list) in PART. Update relay accordingly.
This commit is contained in:
parent
3494d4f794
commit
72be5ca79c
@ -258,15 +258,16 @@ def handle_nick(irc, numeric, command, args):
|
||||
utils.add_hook(handle_nick, 'NICK')
|
||||
|
||||
def handle_part(irc, numeric, command, args):
|
||||
channel = args['channel']
|
||||
channels = args['channels']
|
||||
text = args['text']
|
||||
for netname, user in relayusers[(irc.name, numeric)].copy().items():
|
||||
remoteirc = utils.networkobjects[netname]
|
||||
remotechan = findRemoteChan(irc, remoteirc, channel)
|
||||
remoteirc.proto.partClient(remoteirc, user, remotechan, text)
|
||||
if not remoteirc.users[user].channels:
|
||||
remoteirc.proto.quitClient(remoteirc, user, 'Left all shared channels.')
|
||||
del relayusers[(irc.name, numeric)][remoteirc.name]
|
||||
for channel in channels:
|
||||
for netname, user in relayusers[(irc.name, numeric)].copy().items():
|
||||
remoteirc = utils.networkobjects[netname]
|
||||
remotechan = findRemoteChan(irc, remoteirc, channel)
|
||||
remoteirc.proto.partClient(remoteirc, user, remotechan, text)
|
||||
if not remoteirc.users[user].channels:
|
||||
remoteirc.proto.quitClient(remoteirc, user, 'Left all shared channels.')
|
||||
del relayusers[(irc.name, numeric)][remoteirc.name]
|
||||
utils.add_hook(handle_part, 'PART')
|
||||
|
||||
def handle_privmsg(irc, numeric, command, args):
|
||||
|
@ -329,18 +329,19 @@ def handle_kick(irc, source, command, args):
|
||||
return {'channel': channel, 'target': kicked, 'text': args[2]}
|
||||
|
||||
def handle_part(irc, source, command, args):
|
||||
channel = args[0].lower()
|
||||
# We should only get PART commands for channels that exist, right??
|
||||
irc.channels[channel].removeuser(source)
|
||||
try:
|
||||
irc.users[source].channels.discard(channel)
|
||||
except KeyError:
|
||||
log.debug("(%s) handle_part: KeyError trying to remove %r from %r's channel list?", irc.name, channel, source)
|
||||
try:
|
||||
reason = args[1]
|
||||
except IndexError:
|
||||
reason = ''
|
||||
return {'channel': channel, 'text': reason}
|
||||
channels = args[0].lower().split(',')
|
||||
for channel in channels:
|
||||
# We should only get PART commands for channels that exist, right??
|
||||
irc.channels[channel].removeuser(source)
|
||||
try:
|
||||
irc.users[source].channels.discard(channel)
|
||||
except KeyError:
|
||||
log.debug("(%s) handle_part: KeyError trying to remove %r from %r's channel list?", irc.name, channel, source)
|
||||
try:
|
||||
reason = args[1]
|
||||
except IndexError:
|
||||
reason = ''
|
||||
return {'channels': channels, 'text': reason}
|
||||
|
||||
def handle_error(irc, numeric, command, args):
|
||||
irc.connected = False
|
||||
|
Loading…
Reference in New Issue
Block a user