mirror of
https://github.com/jlu5/PyLink.git
synced 2024-11-24 03:29:28 +01:00
relay: only join users once, returning if there are no queued users at all
Closes #71, prevents op floods on multiple SJOIN being sent. Also, this squashes AssertionErrors raised by protocol modules in sjoinServer, when we try to join zero users to a channel!
This commit is contained in:
parent
7daa595a7b
commit
b681a675eb
@ -663,13 +663,19 @@ def relayJoins(irc, channel, users, ts, modes):
|
||||
log.debug('Okay, spawning %s/%s everywhere', user, irc.name)
|
||||
assert user in irc.users, "(%s) How is this possible? %r isn't in our user database." % (irc.name, user)
|
||||
u = getRemoteUser(irc, remoteirc, user)
|
||||
ts = irc.channels[channel].ts
|
||||
# TODO: join users in batches with SJOIN, not one by one.
|
||||
prefixes = getPrefixModes(irc, remoteirc, channel, user)
|
||||
userpair = (prefixes, u)
|
||||
queued_users.append(userpair)
|
||||
log.debug('(%s) relayJoins: joining %s to %s%s', irc.name, userpair, remoteirc.name, remotechan)
|
||||
remoteirc.proto.sjoinServer(remoteirc, remoteirc.sid, remotechan, queued_users, ts=ts)
|
||||
# Only join users if they aren't already joined. This prevents op floods
|
||||
# on charybdis from all the SJOINing.
|
||||
if u not in remoteirc.channels[channel].users:
|
||||
ts = irc.channels[channel].ts
|
||||
prefixes = getPrefixModes(irc, remoteirc, channel, user)
|
||||
userpair = (prefixes, u)
|
||||
queued_users.append(userpair)
|
||||
log.debug('(%s) relayJoins: joining %s to %s%s', irc.name, userpair, remoteirc.name, remotechan)
|
||||
else:
|
||||
log.debug('(%s) relayJoins: not joining %s to %s%s; they\'re already there!', irc.name,
|
||||
u, remoteirc.name, remotechan)
|
||||
if queued_users:
|
||||
remoteirc.proto.sjoinServer(remoteirc, remoteirc.sid, remotechan, queued_users, ts=ts)
|
||||
relayModes(irc, remoteirc, irc.sid, channel, modes)
|
||||
|
||||
def relayPart(irc, channel, user):
|
||||
|
Loading…
Reference in New Issue
Block a user