send -b/-q messages when ban/quiet expires

This commit is contained in:
Elián Hanisch 2012-06-27 01:14:51 -03:00
parent 57c349aace
commit 912cc8490c
2 changed files with 16 additions and 4 deletions

View File

@ -142,10 +142,12 @@ class Ban(object):
self.id = None self.id = None
if args: if args:
# in most ircd: args = (nick, channel, mask, who, when) # in most ircd: args = (nick, channel, mask, who, when)
self.channel = args[1]
self.mask = args[2] self.mask = args[2]
self.who = args[3] self.who = args[3]
self.when = float(args[4]) self.when = float(args[4])
else: else:
self.channel = kwargs['channel']
self.mask = kwargs['mask'] self.mask = kwargs['mask']
self.who = kwargs['who'] self.who = kwargs['who']
self.when = float(kwargs['when']) self.when = float(kwargs['when'])
@ -699,8 +701,15 @@ class Bantracker(callbacks.Plugin):
del self.pendingReviews[None] del self.pendingReviews[None]
def autoRemoveBans(self, irc=None): def autoRemoveBans(self, irc=None):
modedict = { 'quiet': '-q', 'ban': '-b' }
for ban in self.managedBans.popExpired(): for ban in self.managedBans.popExpired():
self.log.info('Ban %s expired' % ban.ban.mask) channel, mask, type = ban.ban.channel, ban.ban.mask, ban.ban.type
self.log.info("%s '%s' in %s expired", type,
mask,
channel)
# send unban msg
unban = ircmsgs.mode(channel, (modedict[type], mask))
irc.queueMsg(unban)
def doLog(self, irc, channel, s): def doLog(self, irc, channel, s):
if not self.registryValue('enabled', channel): if not self.registryValue('enabled', channel):
@ -735,7 +744,7 @@ class Bantracker(callbacks.Plugin):
self.db_run("INSERT INTO comments (ban_id, who, comment, time) values(%s,%s,%s,%s)", (id, nick, kickmsg, n)) self.db_run("INSERT INTO comments (ban_id, who, comment, time) values(%s,%s,%s,%s)", (id, nick, kickmsg, n))
if extra_comment: if extra_comment:
self.db_run("INSERT INTO comments (ban_id, who, comment, time) values(%s,%s,%s,%s)", (id, nick, extra_comment, n)) self.db_run("INSERT INTO comments (ban_id, who, comment, time) values(%s,%s,%s,%s)", (id, nick, extra_comment, n))
ban = Ban(mask=target, who=operator, when=time.mktime(time.gmtime()), id=id) ban = Ban(mask=target, who=operator, when=time.mktime(time.gmtime()), id=id, channel=channel)
if add_to_cache: if add_to_cache:
if channel not in self.bans: if channel not in self.bans:
self.bans[channel] = [] self.bans[channel] = []

View File

@ -351,11 +351,14 @@ class BantrackerTestCase(ChannelPluginTestCase):
cb = self.getCallback() cb = self.getCallback()
self.feedBan('asd!*@*') self.feedBan('asd!*@*')
self.assertTrue(cb.managedBans) # ban in list self.assertTrue(cb.managedBans) # ban in list
cb.autoRemoveBans() cb.autoRemoveBans(self.irc)
self.assertTrue(cb.managedBans) # ban in list self.assertTrue(cb.managedBans) # ban in list
print 'waiting 2 secs ...'
time.sleep(2) time.sleep(2)
cb.autoRemoveBans() cb.autoRemoveBans(self.irc)
self.assertFalse(cb.managedBans) # ban removed self.assertFalse(cb.managedBans) # ban removed
msg = self.irc.takeMsg() # unban msg
self.assertEqual(str(msg).strip(), "MODE #test -b :asd!*@*")