From d396fe02223243ed5a0dd1132a5466d80738ec73 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Eli=C3=A1n=20Hanisch?= Date: Fri, 7 Sep 2012 21:45:14 -0300 Subject: [PATCH 1/2] don't "$r:name" => "name (realname)" --- Bantracker/plugin.py | 17 +++++++---------- 1 file changed, 7 insertions(+), 10 deletions(-) diff --git a/Bantracker/plugin.py b/Bantracker/plugin.py index 9ec3c9c..92ac974 100644 --- a/Bantracker/plugin.py +++ b/Bantracker/plugin.py @@ -338,7 +338,10 @@ def guessBanType(mask): elif ircutils.isUserHostmask(mask) \ or mask[0] == '$' \ or mask.endswith('(realname)'): - if not ('*' in mask or '?' in mask or '$' in mask): + if not ('*' in mask or \ + '?' in mask or \ + '$' in mask or \ + ' ' in mask): # XXX hack over hack, we are supposing these are marks as normal # bans aren't usually set to exact match, while marks are. return 'mark' @@ -628,8 +631,6 @@ class Bantracker(callbacks.Plugin): except KeyError: bans = self.bans[channel] = [] ban = Ban(msg.args) - if ban.mask.startswith("$r:"): - ban.mask = ban.mask[3:] + " (realname)" if ban not in bans: bans.append(ban) @@ -1130,25 +1131,21 @@ class Bantracker(callbacks.Plugin): continue # channel mask stuff - realname = mask = '' + mask = '' comment = None if mode[1] not in "bq": continue mask = param[1] - if mask.startswith("$r:"): - mask = mask[3:] - realname = ' (realname)' - if mode[1] == 'q': mask = '%' + mask if mode[0] == '+': comment = self.getHostFromBan(irc, msg, mask) - ban = self.doKickban(irc, channel, msg.prefix, mask + realname, + ban = self.doKickban(irc, channel, msg.prefix, mask, extra_comment=comment) elif mode[0] == '-': - self.doUnban(irc,channel, msg.nick, mask + realname) + self.doUnban(irc,channel, msg.nick, mask) def getHostFromBan(self, irc, msg, mask): if irc not in self.lastStates: From 48355cf2006b32c9859cc738a26bde071edd1d36 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Eli=C3=A1n=20Hanisch?= Date: Fri, 7 Sep 2012 23:14:44 -0300 Subject: [PATCH 2/2] add some tests --- Bantracker/test.py | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/Bantracker/test.py b/Bantracker/test.py index 292e4e5..d243ef5 100644 --- a/Bantracker/test.py +++ b/Bantracker/test.py @@ -391,6 +391,11 @@ class BantrackerTestCase(ChannelPluginTestCase): fetch = self.query("SELECT id,channel,mask,operator FROM bans") self.assertEqual((1, '#test', 'asd!*@*', 'op'), fetch[0]) + def testBanRealname(self): + self.feedBan('$r:asd') + fetch = self.query("SELECT id,channel,mask,operator FROM bans") + self.assertEqual((1, '#test', '$r:asd', 'op'), fetch[0]) + def testQuiet(self): self.feedBan('asd!*@*', mode='q') fetch = self.query("SELECT id,channel,mask,operator FROM bans") @@ -467,6 +472,17 @@ class BantrackerTestCase(ChannelPluginTestCase): msg = self.irc.takeMsg() # unban msg self.assertEqual(str(msg).strip(), "MODE #test -q :asd!*@*") + def testDurationRealname(self): + self.op() + cb = self.getCallback() + self.feedBan('$r:asd?asd', mode='b') + self.assertNotError('duration 1 1') + print 'waiting 2 sec ...' + time.sleep(2) + cb.autoRemoveBans(self.irc) + msg = self.irc.takeMsg() # unban msg + self.assertEqual(str(msg).strip(), "MODE #test -b :$r:asd?asd") + def testDurationBadType(self): self.feedBan('nick', mode='k') self.assertResponse('duration 1 1',