refactoring, and fix: config option request.review must be global, since
the review timestamp isn't channel specific
This commit is contained in:
parent
deef5dbf37
commit
8e05e8748a
|
@ -53,7 +53,7 @@ conf.registerChannelValue(Bantracker.request.forward, 'channels',
|
||||||
registry.SpaceSeparatedListOfStrings([],
|
registry.SpaceSeparatedListOfStrings([],
|
||||||
"List of channels/nicks to forward the request if the op that set the ban/quiet"\
|
"List of channels/nicks to forward the request if the op that set the ban/quiet"\
|
||||||
" is in the forward list."))
|
" is in the forward list."))
|
||||||
conf.registerChannelValue(Bantracker.request, 'review',
|
conf.registerGlobalValue(Bantracker.request, 'review',
|
||||||
registry.Float(7,
|
registry.Float(7,
|
||||||
"Days after which the bot will request for review a ban. Can be an integer or decimal value."))
|
"Days after which the bot will request for review a ban. Can be an integer or decimal value."))
|
||||||
|
|
||||||
|
|
|
@ -244,6 +244,10 @@ class Bantracker(callbacks.Plugin):
|
||||||
self.pendingReviews = PersistentCache('bt.reviews.db')
|
self.pendingReviews = PersistentCache('bt.reviews.db')
|
||||||
self.pendingReviews.open()
|
self.pendingReviews.open()
|
||||||
# add scheduled event for check bans that need review, check every hour
|
# add scheduled event for check bans that need review, check every hour
|
||||||
|
try:
|
||||||
|
schedule.removeEvent(self.name())
|
||||||
|
except:
|
||||||
|
pass
|
||||||
schedule.addPeriodicEvent(lambda : self.reviewBans(irc), 60*60,
|
schedule.addPeriodicEvent(lambda : self.reviewBans(irc), 60*60,
|
||||||
name=self.name())
|
name=self.name())
|
||||||
|
|
||||||
|
@ -319,7 +323,7 @@ class Bantracker(callbacks.Plugin):
|
||||||
self.bans[msg.args[1]] = []
|
self.bans[msg.args[1]] = []
|
||||||
bans = self.bans[msg.args[1]]
|
bans = self.bans[msg.args[1]]
|
||||||
bans.append(Ban(msg.args))
|
bans.append(Ban(msg.args))
|
||||||
bans.sort(key=lambda x: x.when)
|
bans.sort(key=lambda x: x.when) # needed for self.reviewBans
|
||||||
|
|
||||||
def nick_to_host(self, irc=None, target='', with_nick=True, reply_now=True):
|
def nick_to_host(self, irc=None, target='', with_nick=True, reply_now=True):
|
||||||
target = target.lower()
|
target = target.lower()
|
||||||
|
@ -354,10 +358,7 @@ class Bantracker(callbacks.Plugin):
|
||||||
except:
|
except:
|
||||||
pass
|
pass
|
||||||
queue.clear()
|
queue.clear()
|
||||||
try:
|
|
||||||
schedule.removeEvent(self.name())
|
schedule.removeEvent(self.name())
|
||||||
except:
|
|
||||||
pass
|
|
||||||
self.pendingReviews.close()
|
self.pendingReviews.close()
|
||||||
|
|
||||||
def reset(self):
|
def reset(self):
|
||||||
|
@ -443,16 +444,19 @@ class Bantracker(callbacks.Plugin):
|
||||||
irc.reply(s, to=op, private=True)
|
irc.reply(s, to=op, private=True)
|
||||||
|
|
||||||
def reviewBans(self, irc=None):
|
def reviewBans(self, irc=None):
|
||||||
|
reviewTime = int(self.registryValue('request.review') * 86400)
|
||||||
|
if not reviewTime:
|
||||||
|
# time is zero, do nothing
|
||||||
|
return
|
||||||
now = time.mktime(time.gmtime())
|
now = time.mktime(time.gmtime())
|
||||||
lastreview = self.pendingReviews.time
|
lastreview = self.pendingReviews.time
|
||||||
bansite = self.registryValue('bansite')
|
|
||||||
if not lastreview:
|
if not lastreview:
|
||||||
# initialize last time reviewed timestamp
|
# initialize last time reviewed timestamp
|
||||||
lastreview = now - self.registryValue('request.review')
|
lastreview = now - reviewTime
|
||||||
|
bansite = self.registryValue('bansite')
|
||||||
for channel, bans in self.bans.iteritems():
|
for channel, bans in self.bans.iteritems():
|
||||||
reviewAfterTime = int(self.registryValue('request.review', channel=channel) * 86400)
|
if not self.registryValue('enabled', channel=channel) \
|
||||||
if not reviewAfterTime:
|
or not self.registryValue('request', channel=channel):
|
||||||
# time is zero, do nothing
|
|
||||||
continue
|
continue
|
||||||
ignore = self.registryValue('request.ignore', channel=channel)
|
ignore = self.registryValue('request.ignore', channel=channel)
|
||||||
forward = self.registryValue('request.forward', channel=channel)
|
forward = self.registryValue('request.forward', channel=channel)
|
||||||
|
@ -462,11 +466,11 @@ class Bantracker(callbacks.Plugin):
|
||||||
if type in ('quiet', 'removal'):
|
if type in ('quiet', 'removal'):
|
||||||
# skip mutes and kicks
|
# skip mutes and kicks
|
||||||
continue
|
continue
|
||||||
banTime = now - ban.when
|
banAge = now - ban.when
|
||||||
reviewTime = lastreview - ban.when
|
reviewWindow = lastreview - ban.when
|
||||||
self.log.debug(' channel %s ban %s (%s %s %s)', channel, str(ban), reviewTime,
|
self.log.debug(' channel %s ban %s by %s (%s/%s/%s %s)', channel, ban.mask,
|
||||||
reviewAfterTime, reviewAfterTime-reviewTime)
|
ban.who, reviewWindow, reviewTime, banAge, reviewTime-reviewWindow)
|
||||||
if reviewTime <= reviewAfterTime < banTime:
|
if reviewWindow <= reviewTime < banAge:
|
||||||
# ban is old enough, and inside the "review window"
|
# ban is old enough, and inside the "review window"
|
||||||
try:
|
try:
|
||||||
# ban.who should be a user hostmask
|
# ban.who should be a user hostmask
|
||||||
|
@ -502,7 +506,7 @@ class Bantracker(callbacks.Plugin):
|
||||||
if host not in self.pendingReviews:
|
if host not in self.pendingReviews:
|
||||||
self.pendingReviews[host] = []
|
self.pendingReviews[host] = []
|
||||||
self.pendingReviews[host].append((op, msg))
|
self.pendingReviews[host].append((op, msg))
|
||||||
elif banTime < reviewAfterTime:
|
elif banAge < reviewTime:
|
||||||
# since we made sure bans are sorted by time, the bans left are more recent
|
# since we made sure bans are sorted by time, the bans left are more recent
|
||||||
break
|
break
|
||||||
self.pendingReviews.time = now # update last time reviewed
|
self.pendingReviews.time = now # update last time reviewed
|
||||||
|
|
Loading…
Reference in New Issue