mirror of
https://github.com/jlu5/PyLink.git
synced 2025-02-02 23:54:08 +01:00
relay: fix cases where a remote linked channel has different name
This commit is contained in:
parent
a5e2beb566
commit
9bc8a35c25
@ -78,10 +78,23 @@ def findRelay(chanpair):
|
|||||||
if chanpair in dbentry['links']:
|
if chanpair in dbentry['links']:
|
||||||
return name
|
return name
|
||||||
|
|
||||||
|
def findRemoteChan(remotenetname, query):
|
||||||
|
chanpair = findRelay(query)
|
||||||
|
if chanpair is None:
|
||||||
|
return
|
||||||
|
if chanpair[0] == remotenetname:
|
||||||
|
return chanpair[1]
|
||||||
|
else:
|
||||||
|
for link in db[chanpair]['links']:
|
||||||
|
if link[0] == remotenetname:
|
||||||
|
return link[1]
|
||||||
|
|
||||||
def initializeChannel(irc, channel):
|
def initializeChannel(irc, channel):
|
||||||
irc.proto.joinClient(irc, irc.pseudoclient.uid, channel)
|
irc.proto.joinClient(irc, irc.pseudoclient.uid, channel)
|
||||||
c = irc.channels[channel]
|
c = irc.channels[channel]
|
||||||
relay = findRelay((irc.name, channel))
|
relay = findRelay((irc.name, channel))
|
||||||
|
if relay is None:
|
||||||
|
return
|
||||||
users = c.users.copy()
|
users = c.users.copy()
|
||||||
for link in db[relay]['links']:
|
for link in db[relay]['links']:
|
||||||
try:
|
try:
|
||||||
@ -158,6 +171,7 @@ def relayJoins(irc, channel, users, ts, modes):
|
|||||||
remoteirc.users[u].remote = irc.name
|
remoteirc.users[u].remote = irc.name
|
||||||
relayusers[(irc.name, userobj.uid)][remoteirc.name] = u
|
relayusers[(irc.name, userobj.uid)][remoteirc.name] = u
|
||||||
remoteirc.users[u].remote = irc.name
|
remoteirc.users[u].remote = irc.name
|
||||||
|
remotechan = findRemoteChan(remoteirc.name, (irc.name, channel))
|
||||||
if not remoteirc.servers[sid].has_bursted:
|
if not remoteirc.servers[sid].has_bursted:
|
||||||
# TODO: join users in batches with SJOIN, not one by one.
|
# TODO: join users in batches with SJOIN, not one by one.
|
||||||
prefix = ''
|
prefix = ''
|
||||||
@ -168,9 +182,9 @@ def relayJoins(irc, channel, users, ts, modes):
|
|||||||
# mode (e.g. the op list)
|
# mode (e.g. the op list)
|
||||||
if user in irc.channels[channel].prefixmodes[pmode+'s']:
|
if user in irc.channels[channel].prefixmodes[pmode+'s']:
|
||||||
prefix += remoteirc.cmodes[pmode]
|
prefix += remoteirc.cmodes[pmode]
|
||||||
remoteirc.proto.sjoinServer(remoteirc, sid, channel, [(prefix, u)], ts=ts)
|
remoteirc.proto.sjoinServer(remoteirc, sid, remotechan, [(prefix, u)], ts=ts)
|
||||||
else:
|
else:
|
||||||
remoteirc.proto.joinClient(remoteirc, u, channel)
|
remoteirc.proto.joinClient(remoteirc, u, remotechan)
|
||||||
|
|
||||||
def removeChannel(irc, channel):
|
def removeChannel(irc, channel):
|
||||||
if channel not in map(str.lower, irc.serverdata['channels']):
|
if channel not in map(str.lower, irc.serverdata['channels']):
|
||||||
|
Loading…
Reference in New Issue
Block a user