diff --git a/Bantracker/plugin.py b/Bantracker/plugin.py index cf3ef11..b451c1d 100644 --- a/Bantracker/plugin.py +++ b/Bantracker/plugin.py @@ -362,6 +362,10 @@ class BanRemoval(object): self.ban = Ban(args=(None, None, None, None, 0)) self.ban.deserialize(L[2:]) +def enumerateReversed(L): + """enumerate in reverse order""" + for i in reversed(xrange(len(L))): + yield i, L[i] class BanStore(object): def __init__(self, filename): @@ -406,11 +410,6 @@ class BanStore(object): def popExpired(self, time=0): """Pops a list of expired bans""" - def enumerateReversed(L): - """enumerate in reverse order""" - for i in reversed(xrange(len(L))): - yield i, L[i] - L = [] for i, ban in enumerateReversed(self.shelf): if ban.expired(offset=time): @@ -915,11 +914,13 @@ class Bantracker(callbacks.Plugin): self.db_run("UPDATE bans SET removal=%s , removal_op=%s WHERE id=%s", (now(), nick, int(data[0][0]))) if not channel in self.bans: self.bans[channel] = [] - for ban in self.bans[channel]: + for idx, ban in enumerateReversed(self.bans[channel]): if ban.mask == mask: - idx = self.bans[channel].index(ban) del self.bans[channel][idx] # we don't break here because bans might be duplicated. + for idx, br in enumerateReversed(self.managedBans.shelf): + if (channel == br.ban.channel) and (mask == br.ban.mask): + del self.managedBans.shelf[idx] def doPrivmsg(self, irc, msg): (recipients, text) = msg.args @@ -1515,12 +1516,17 @@ class Bantracker(callbacks.Plugin): irc.reply("[%s] %s - %s - %s - expires in %s" \ % (id, type, mask, channel, (br.ban.when + br.expires) - nowSeconds())) - else: - if type in ('quiet', 'ban'): + return + + if type in ('quiet', 'ban'): + if not removal: irc.reply("[%s] %s - %s - %s - never expires" \ % (id, type, mask, channel)) else: - irc.reply("[%s] %s - %s - %s" % (id, type, mask, channel)) + irc.reply("[%s] %s - %s - %s - not active" \ + % (id, type, mask, channel)) + else: + irc.reply("[%s] %s - %s - %s" % (id, type, mask, channel)) baninfo = wrap(baninfo, ['id']) diff --git a/Bantracker/test.py b/Bantracker/test.py index 73fee7f..69193e4 100644 --- a/Bantracker/test.py +++ b/Bantracker/test.py @@ -453,5 +453,8 @@ class BantrackerTestCase(ChannelPluginTestCase): self.assertResponse('baninfo 1', '[1] ban - asd!*@* - #test - never expires') self.assertNotError('banremove 1 10') self.assertResponse('baninfo 1', '[1] ban - asd!*@* - #test - expires in 10.0') + self.irc.feedMsg(ircmsgs.unban(self.channel, 'asd!*@*', + 'op!user@host.net')) + self.assertResponse('baninfo 1', '[1] ban - asd!*@* - #test - not active')