Tag NICK messages with the channel as for QUIT messages.

This commit is contained in:
Valentin Lorentz 2015-12-04 13:27:11 +01:00
parent d2749ea4d6
commit 3b78fd2424
2 changed files with 25 additions and 1 deletions

View File

@ -655,8 +655,12 @@ class IrcState(IrcCommandDispatcher, log.Firewalled):
del self.nicksToHostmasks[oldNick]
except KeyError:
pass
for channel in self.channels.values():
channel_names = ircutils.IrcSet()
for (name, channel) in self.channels.items():
if msg.nick in channel.users:
channel_names.add(name)
channel.replaceUser(oldNick, newNick)
msg.tag('channels', channel_names)
def doBatch(self, irc, msg):
batch_name = msg.args[0][1:]

View File

@ -470,6 +470,7 @@ class IrcTestCase(SupyTestCase):
self.irc.reset()
self.irc.feedMsg(ircmsgs.IrcMsg(':someuser JOIN #foo'))
self.irc.feedMsg(ircmsgs.IrcMsg(':someuser JOIN #bar'))
self.irc.feedMsg(ircmsgs.IrcMsg(':someuser2 JOIN #bar2'))
class Callback(irclib.IrcCallback):
channels_set = None
def name(self):
@ -484,6 +485,25 @@ class IrcTestCase(SupyTestCase):
self.irc.removeCallback(c.name())
self.assertEqual(c.channels_set, ircutils.IrcSet(['#foo', '#bar']))
def testNick(self):
self.irc.reset()
self.irc.feedMsg(ircmsgs.IrcMsg(':someuser JOIN #foo'))
self.irc.feedMsg(ircmsgs.IrcMsg(':someuser JOIN #bar'))
self.irc.feedMsg(ircmsgs.IrcMsg(':someuser2 JOIN #bar2'))
class Callback(irclib.IrcCallback):
channels_set = None
def name(self):
return 'testcallback'
def doNick(self2, irc, msg):
self2.channels_set = msg.tagged('channels')
c = Callback()
self.irc.addCallback(c)
try:
self.irc.feedMsg(ircmsgs.IrcMsg(':someuser NICK newuser'))
finally:
self.irc.removeCallback(c.name())
self.assertEqual(c.channels_set, ircutils.IrcSet(['#foo', '#bar']))
def testBatch(self):
self.irc.reset()
self.irc.feedMsg(ircmsgs.IrcMsg(':someuser1 JOIN #foo'))