mirror of
https://github.com/jlu5/PyLink.git
synced 2025-02-17 14:01:03 +01:00
relay: attempt to fix kick relaying (#76)
This commit is contained in:
parent
6abb56921e
commit
a1fc6d6734
@ -357,7 +357,12 @@ def handle_kick(irc, source, command, args):
|
|||||||
log.debug('(%s) Relay kick: real target for %s is %s', irc.name, target, real_target)
|
log.debug('(%s) Relay kick: real target for %s is %s', irc.name, target, real_target)
|
||||||
else:
|
else:
|
||||||
log.debug('(%s) Relay kick: target %s is an internal client, going to look up the real user', irc.name, target)
|
log.debug('(%s) Relay kick: target %s is an internal client, going to look up the real user', irc.name, target)
|
||||||
real_target = getLocalUser(irc, target)[1]
|
real_userpair = getLocalUser(irc, target)
|
||||||
|
if real_userpair[0] == remoteirc.name:
|
||||||
|
real_target = real_userpair[1]
|
||||||
|
else:
|
||||||
|
sourceirc = utils.networkobjects[real_userpair[0]]
|
||||||
|
real_target = getRemoteUser(sourceirc, remoteirc, real_userpair[1])
|
||||||
log.debug('(%s) Relay kick: kicker_modes are %r', irc.name, kicker_modes)
|
log.debug('(%s) Relay kick: kicker_modes are %r', irc.name, kicker_modes)
|
||||||
if irc.name not in db[relay]['claim'] and not \
|
if irc.name not in db[relay]['claim'] and not \
|
||||||
any([mode in kicker_modes for mode in ('q', 'a', 'o', 'h')]):
|
any([mode in kicker_modes for mode in ('q', 'a', 'o', 'h')]):
|
||||||
@ -457,12 +462,19 @@ def relayModes(irc, remoteirc, sender, channel, modes=None):
|
|||||||
if modechar in irc.prefixmodes:
|
if modechar in irc.prefixmodes:
|
||||||
# This is a prefix mode (e.g. +o). We must coerse the argument
|
# This is a prefix mode (e.g. +o). We must coerse the argument
|
||||||
# so that the target exists on the remote relay network.
|
# so that the target exists on the remote relay network.
|
||||||
|
log.debug("(%s) Relay mode: coersing argument of (%r, %r) "
|
||||||
|
"for network %r.",
|
||||||
|
irc.name, modechar, arg, remoteirc.name)
|
||||||
try:
|
try:
|
||||||
|
# If the target is a remote user, get the real target
|
||||||
|
# (original user).
|
||||||
arg = getLocalUser(irc, arg)[1]
|
arg = getLocalUser(irc, arg)[1]
|
||||||
except TypeError:
|
finally:
|
||||||
# getLocalUser returns None, raises None when trying to
|
# Then, get the client on our network for them.
|
||||||
# get [1] from it.
|
arg = getRemoteUser(irc, remoteirc, arg, spawnIfMissing=False)
|
||||||
arg = getRemoteUser(irc, remoteirc, arg)
|
log.debug("(%s) Relay mode: argument found as (%r, %r) "
|
||||||
|
"for network %r.",
|
||||||
|
irc.name, modechar, arg, remoteirc.name)
|
||||||
supported_char = remoteirc.cmodes.get(name)
|
supported_char = remoteirc.cmodes.get(name)
|
||||||
if supported_char:
|
if supported_char:
|
||||||
if name in ('ban', 'banexception', 'invex') and not utils.isHostmask(arg):
|
if name in ('ban', 'banexception', 'invex') and not utils.isHostmask(arg):
|
||||||
@ -471,11 +483,6 @@ def relayModes(irc, remoteirc, sender, channel, modes=None):
|
|||||||
irc.name, modechar, arg)
|
irc.name, modechar, arg)
|
||||||
break
|
break
|
||||||
supported_modes.append((prefix+supported_char, arg))
|
supported_modes.append((prefix+supported_char, arg))
|
||||||
break
|
|
||||||
else:
|
|
||||||
log.debug("(%s) Relay mode: skipping mode (%r, %r) because "
|
|
||||||
"the remote network (%s)'s IRCd (%s) doesn't support it.",
|
|
||||||
irc.name, modechar, arg, remoteirc.name, irc.proto.__name__)
|
|
||||||
log.debug('(%s) Relay mode: final modelist (sending to %s%s) is %s', irc.name, remoteirc.name, remotechan, supported_modes)
|
log.debug('(%s) Relay mode: final modelist (sending to %s%s) is %s', irc.name, remoteirc.name, remotechan, supported_modes)
|
||||||
# Don't send anything if there are no supported modes left after filtering.
|
# Don't send anything if there are no supported modes left after filtering.
|
||||||
if supported_modes:
|
if supported_modes:
|
||||||
@ -484,8 +491,8 @@ def relayModes(irc, remoteirc, sender, channel, modes=None):
|
|||||||
u = getRemoteUser(irc, remoteirc, sender, spawnIfMissing=False)
|
u = getRemoteUser(irc, remoteirc, sender, spawnIfMissing=False)
|
||||||
if u:
|
if u:
|
||||||
remoteirc.proto.modeClient(remoteirc, u, remotechan, supported_modes)
|
remoteirc.proto.modeClient(remoteirc, u, remotechan, supported_modes)
|
||||||
return
|
else:
|
||||||
remoteirc.proto.modeServer(remoteirc, remoteirc.sid, remotechan, supported_modes)
|
remoteirc.proto.modeServer(remoteirc, remoteirc.sid, remotechan, supported_modes)
|
||||||
|
|
||||||
def getSupportedUmodes(irc, remoteirc, modes):
|
def getSupportedUmodes(irc, remoteirc, modes):
|
||||||
supported_modes = []
|
supported_modes = []
|
||||||
|
Loading…
x
Reference in New Issue
Block a user