instead of sending reviews immediately, enqueue them and send then the
next time the op says something, that way not only we make sure op is online, but active as well.
This commit is contained in:
parent
5dfe161bac
commit
6b3a33ce4c
|
@ -189,8 +189,9 @@ class Bantracker(callbacks.Plugin):
|
||||||
self.get_bans(irc)
|
self.get_bans(irc)
|
||||||
self.get_nicks(irc)
|
self.get_nicks(irc)
|
||||||
# add scheduled event for check bans that need review
|
# add scheduled event for check bans that need review
|
||||||
schedule.addPeriodicEvent(lambda : self.reviewBans(irc), 20,
|
schedule.addPeriodicEvent(self.reviewBans, 20,
|
||||||
name=self.name)
|
name=self.name)
|
||||||
|
self.pendingReviews = ircutils.IrcDict()
|
||||||
|
|
||||||
def get_nicks(self, irc):
|
def get_nicks(self, irc):
|
||||||
self.hosts.clear()
|
self.hosts.clear()
|
||||||
|
@ -380,7 +381,7 @@ class Bantracker(callbacks.Plugin):
|
||||||
%(type, mask, channel, prefix, ban.id)
|
%(type, mask, channel, prefix, ban.id)
|
||||||
irc.reply(s, to=ban.who, private=True)
|
irc.reply(s, to=ban.who, private=True)
|
||||||
|
|
||||||
def reviewBans(self, irc):
|
def reviewBans(self):
|
||||||
try:
|
try:
|
||||||
self.log.debug('Checking for bans that need review ...')
|
self.log.debug('Checking for bans that need review ...')
|
||||||
now = time.mktime(time.gmtime())
|
now = time.mktime(time.gmtime())
|
||||||
|
@ -401,10 +402,19 @@ class Bantracker(callbacks.Plugin):
|
||||||
# ban.who can be a nick or IRC hostmask
|
# ban.who can be a nick or IRC hostmask
|
||||||
if ircutils.isUserHostmask(op):
|
if ircutils.isUserHostmask(op):
|
||||||
op = op[:op.find('!')]
|
op = op[:op.find('!')]
|
||||||
|
elif not ircutils.isNick(op, strictRfc=True):
|
||||||
|
# probably a ban restored by IRC server
|
||||||
|
continue
|
||||||
|
if nickMatch(op, self.registryValue('commentRequest.ignore'):
|
||||||
|
# in the ignore list
|
||||||
|
continue
|
||||||
s = "Please review ban '%s' in %s" %(ban.mask, channel)
|
s = "Please review ban '%s' in %s" %(ban.mask, channel)
|
||||||
# FIXME doesn't check if op is not online
|
|
||||||
msg = ircmsgs.privmsg(op, s)
|
msg = ircmsgs.privmsg(op, s)
|
||||||
irc.queueMsg(msg)
|
self.log.debug(' adding ban to the pending review list ...')
|
||||||
|
if op in self.pendingReviews:
|
||||||
|
self.pendingReviews[op].append(msg)
|
||||||
|
else:
|
||||||
|
self.pendingReviews[op] = [msg]
|
||||||
elif banTime < reviewAfterTime:
|
elif banTime < reviewAfterTime:
|
||||||
# the bans left are even more recent
|
# the bans left are even more recent
|
||||||
break
|
break
|
||||||
|
@ -413,6 +423,13 @@ class Bantracker(callbacks.Plugin):
|
||||||
# I need to catch exceptions as they are silenced
|
# I need to catch exceptions as they are silenced
|
||||||
self.log.debug('Except: %s' %e)
|
self.log.debug('Except: %s' %e)
|
||||||
|
|
||||||
|
def _sendReviews(self, irc, msg):
|
||||||
|
if msg.nick in self.pendingReviews:
|
||||||
|
op = msg.nick
|
||||||
|
for m in self.pendingReviews[op]:
|
||||||
|
irc.queueMsg(m)
|
||||||
|
del self.pendingReviews[op]
|
||||||
|
|
||||||
def doLog(self, irc, channel, s):
|
def doLog(self, irc, channel, s):
|
||||||
if not self.registryValue('enabled', channel):
|
if not self.registryValue('enabled', channel):
|
||||||
return
|
return
|
||||||
|
@ -470,6 +487,7 @@ class Bantracker(callbacks.Plugin):
|
||||||
'* %s %s\n' % (nick, ircmsgs.unAction(msg)))
|
'* %s %s\n' % (nick, ircmsgs.unAction(msg)))
|
||||||
else:
|
else:
|
||||||
self.doLog(irc, channel, '<%s> %s\n' % (nick, text))
|
self.doLog(irc, channel, '<%s> %s\n' % (nick, text))
|
||||||
|
self._sendReviews(irc, msg)
|
||||||
|
|
||||||
def doNotice(self, irc, msg):
|
def doNotice(self, irc, msg):
|
||||||
(recipients, text) = msg.args
|
(recipients, text) = msg.args
|
||||||
|
|
Loading…
Reference in New Issue