refactoring, requested reviews now follow forward options, some fixes
This commit is contained in:
parent
b31a266933
commit
8bb046e84c
|
@ -376,37 +376,43 @@ class Bantracker(callbacks.Plugin):
|
||||||
# send msg
|
# send msg
|
||||||
prefix = conf.supybot.reply.whenAddressedBy.chars()[0] # prefix char for commands
|
prefix = conf.supybot.reply.whenAddressedBy.chars()[0] # prefix char for commands
|
||||||
# check to who send the request
|
# check to who send the request
|
||||||
if nickMatch(ban.who, self.registryValue('commentRequest.forward', channel=channel)):
|
try:
|
||||||
|
op = ircutils.nickFromHostmask(ban.who)
|
||||||
|
except:
|
||||||
|
op = ban.who
|
||||||
|
if nickMatch(op, self.registryValue('commentRequest.forward', channel=channel)):
|
||||||
channels = self.registryValue('commentRequest.forward.channels', channel=channel)
|
channels = self.registryValue('commentRequest.forward.channels', channel=channel)
|
||||||
if channels:
|
if channels:
|
||||||
s = "Please somebody comment on the %s of %s in %s done by %s, use:"\
|
s = "Please somebody comment on the %s of %s in %s done by %s, use:"\
|
||||||
" %scomment %s <comment>" %(type, mask, channel, ban.who, prefix, ban.id)
|
" %scomment %s <comment>" %(type, mask, channel, op, prefix, ban.id)
|
||||||
for chan in channels:
|
for chan in channels:
|
||||||
msg = ircmsgs.notice(chan, s)
|
msg = ircmsgs.notice(chan, s)
|
||||||
|
self.log.info('SENDING: %s' %msg)
|
||||||
irc.queueMsg(msg)
|
irc.queueMsg(msg)
|
||||||
return
|
return
|
||||||
# send to op
|
# send to op
|
||||||
s = "Please comment on the %s of %s in %s, use: %scomment %s <comment>" \
|
s = "Please comment on the %s of %s in %s, use: %scomment %s <comment>" \
|
||||||
%(type, mask, channel, prefix, ban.id)
|
%(type, mask, channel, prefix, ban.id)
|
||||||
try:
|
self.log.info('SENDING: %s %s' %(op, s))
|
||||||
op = ircutils.nickFromHostmask(ban.who)
|
#irc.reply(s, to=op, private=True)
|
||||||
except:
|
|
||||||
op = ban.who
|
|
||||||
irc.reply(s, to=op, private=True)
|
|
||||||
|
|
||||||
def reviewBans(self):
|
def reviewBans(self):
|
||||||
try:
|
try:
|
||||||
reviewAfterTime = int(self.registryValue('reviewAfterTime') * 84600)
|
reviewAfterTime = int(self.registryValue('reviewAfterTime') * 86400)
|
||||||
if not reviewAfterTime:
|
if not reviewAfterTime:
|
||||||
# time is zero, do nothing
|
# time is zero, do nothing
|
||||||
return
|
return
|
||||||
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())
|
||||||
lastreview = self.registryValue('reviewTime')
|
lastreview = self.registryValue('reviewTime')
|
||||||
|
bansite = self.registryValue('bansite')
|
||||||
if not lastreview:
|
if not lastreview:
|
||||||
# initialize last time reviewed timestamp
|
# initialize last time reviewed timestamp
|
||||||
lastreview = now - reviewAfterTime
|
lastreview = now - reviewAfterTime
|
||||||
for channel, bans in self.bans.iteritems():
|
for channel, bans in self.bans.iteritems():
|
||||||
|
ignore = self.registryValue('commentRequest.ignore', channel=channel)
|
||||||
|
forward = self.registryValue('commentRequest.forward', channel=channel)
|
||||||
|
fchannels = self.registryValue('commentRequest.forward.channels', channel=channel)
|
||||||
for ban in bans:
|
for ban in bans:
|
||||||
type = guessBanType(ban.mask)
|
type = guessBanType(ban.mask)
|
||||||
if type in ('quiet', 'removal'):
|
if type in ('quiet', 'removal'):
|
||||||
|
@ -414,8 +420,8 @@ class Bantracker(callbacks.Plugin):
|
||||||
continue
|
continue
|
||||||
banTime = now - ban.when
|
banTime = now - ban.when
|
||||||
reviewTime = lastreview - ban.when
|
reviewTime = lastreview - ban.when
|
||||||
self.log.debug(' channel %s ban %s (%s/%s/%s)', channel, str(ban), reviewTime,
|
self.log.debug(' channel %s ban %s (%s %s %s)', channel, str(ban), reviewTime,
|
||||||
reviewAfterTime, banTime)
|
reviewAfterTime, reviewAfterTime-reviewTime)
|
||||||
if reviewTime <= reviewAfterTime < banTime:
|
if reviewTime <= reviewAfterTime < banTime:
|
||||||
# ban is old enough, and inside the "review window"
|
# ban is old enough, and inside the "review window"
|
||||||
try:
|
try:
|
||||||
|
@ -426,21 +432,30 @@ class Bantracker(callbacks.Plugin):
|
||||||
# probably a ban restored by IRC server in a netsplit
|
# probably a ban restored by IRC server in a netsplit
|
||||||
# XXX see if something can be done about this
|
# XXX see if something can be done about this
|
||||||
continue
|
continue
|
||||||
if nickMatch(op, self.registryValue('commentRequest.ignore')):
|
if nickMatch(op, ignore):
|
||||||
# in the ignore list
|
# in the ignore list
|
||||||
continue
|
continue
|
||||||
|
self.log.debug(' adding ban to the pending review list ...')
|
||||||
if not ban.id:
|
if not ban.id:
|
||||||
ban.id = self.get_banId(ban.mask, channel)
|
ban.id = self.get_banId(ban.mask, channel)
|
||||||
s = "Hi, please review the ban '%s' that you set on %s in %s,"\
|
if nickMatch(op, forward):
|
||||||
" link: %s/bans.cgi?log=%s" %(ban.mask, ban.ascwhen, channel,
|
msgs = []
|
||||||
self.registryValue('bansite'), ban.id)
|
s = "Hi, please somebody review the ban '%s' set by %s on %s in"\
|
||||||
self.log.debug(' adding ban to the pending review list ...')
|
" %s, link: %s/bans.cgi?log=%s" %(ban.mask, op, ban.ascwhen, channel,
|
||||||
if host in self.pendingReviews:
|
bansite, ban.id)
|
||||||
self.pendingReviews[host].append((op, s))
|
for chan in fchannels:
|
||||||
|
msgs.append(ircmsgs.notice(chan, s))
|
||||||
|
# FIXME forwards should be sent now, not later.
|
||||||
else:
|
else:
|
||||||
self.pendingReviews[host] = [(op, s)]
|
s = "Hi, please review the ban '%s' that you set on %s in %s, link:"\
|
||||||
|
" %s/bans.cgi?log=%s" %(ban.mask, ban.ascwhen, channel, bansite, ban.id)
|
||||||
|
msgs = [ircmsgs.privmsg(op, s)]
|
||||||
|
if host not in self.pendingReviews:
|
||||||
|
self.pendingReviews[host] = []
|
||||||
|
for msg in msgs:
|
||||||
|
self.pendingReviews[host].append((op, msg))
|
||||||
elif banTime < reviewAfterTime:
|
elif banTime < reviewAfterTime:
|
||||||
# the bans left are even more recent
|
# since we made sure bans are sorted by time, the bans left are more recent
|
||||||
break
|
break
|
||||||
self.setRegistryValue('reviewTime', now) # update last time reviewed
|
self.setRegistryValue('reviewTime', now) # update last time reviewed
|
||||||
except Exception, e:
|
except Exception, e:
|
||||||
|
@ -449,22 +464,18 @@ class Bantracker(callbacks.Plugin):
|
||||||
self.log.error('Except: %s' %e)
|
self.log.error('Except: %s' %e)
|
||||||
self.log.error(traceback.format_exc())
|
self.log.error(traceback.format_exc())
|
||||||
|
|
||||||
def _sendReviews(self, irc, msg=None):
|
def _sendReviews(self, irc, msg):
|
||||||
if msg is None:
|
host = ircutils.hostFromHostmask(msg.prefix)
|
||||||
# try to send them all
|
if host in self.pendingReviews:
|
||||||
for host, values in self.pendingReviews.iteritems():
|
op = msg.nick
|
||||||
op, s = values
|
for nick, msg in self.pendingReviews[host]:
|
||||||
msg = ircmsgs.privmsg(op, s)
|
if msg.command == 'NOTICE':
|
||||||
irc.queueMsg(msg)
|
self.log.info('SENDING: %s' %msg)
|
||||||
self.pendingReviews.clear()
|
|
||||||
else:
|
|
||||||
host = ircutils.hostFromHostmask(msg.prefix)
|
|
||||||
if host in self.pendingReviews:
|
|
||||||
op = msg.nick
|
|
||||||
for _, s in self.pendingReviews[host]:
|
|
||||||
msg = ircmsgs.privmsg(op, s)
|
|
||||||
irc.queueMsg(msg)
|
irc.queueMsg(msg)
|
||||||
del self.pendingReviews[host]
|
else:
|
||||||
|
m = ircmsgs.privmsg(op, msg.args[1])
|
||||||
|
#irc.queueMsg(m)
|
||||||
|
del self.pendingReviews[host]
|
||||||
|
|
||||||
def doLog(self, irc, channel, s):
|
def doLog(self, irc, channel, s):
|
||||||
if not self.registryValue('enabled', channel):
|
if not self.registryValue('enabled', channel):
|
||||||
|
@ -484,7 +495,10 @@ class Bantracker(callbacks.Plugin):
|
||||||
n = now()
|
n = now()
|
||||||
if use_time:
|
if use_time:
|
||||||
n = fromTime(use_time)
|
n = fromTime(use_time)
|
||||||
nick = ircutils.nickFromHostmask(operator)
|
try:
|
||||||
|
nick = ircutils.nickFromHostmask(operator)
|
||||||
|
except:
|
||||||
|
nick = operator
|
||||||
id = self.db_run("INSERT INTO bans (channel, mask, operator, time, log) values(%s, %s, %s, %s, %s)",
|
id = self.db_run("INSERT INTO bans (channel, mask, operator, time, log) values(%s, %s, %s, %s, %s)",
|
||||||
(channel, target, nick, n, '\n'.join(self.logs[channel])), expect_id=True)
|
(channel, target, nick, n, '\n'.join(self.logs[channel])), expect_id=True)
|
||||||
if kickmsg and id and not (kickmsg == nick):
|
if kickmsg and id and not (kickmsg == nick):
|
||||||
|
|
Loading…
Reference in New Issue