BugFix: Bantracker does not parse multiple modes properly (LP: #495555)

Allow Bantracker to search bans by ID
This commit is contained in:
Terence Simpson 2009-12-11 17:53:15 +00:00
parent ac6fd47a8b
commit 6ffc89d007
2 changed files with 39 additions and 34 deletions

View File

@ -177,8 +177,12 @@ for h in [['Channel',0], ['Nick/Mask',1], ['Operator',2], ['Time',6]]:
print '<th>Log</th></tr>'
# Select and filter bans
cur.execute("SELECT channel,mask,operator,time,removal,removal_op,id FROM bans ORDER BY id DESC")
bans = cur.fetchall()
def getBans(id=None):
if id == None:
cur.execute("SELECT channel,mask,operator,time,removal,removal_op,id FROM bans ORDER BY id DESC")
else:
cur.execute("SELECT channel,mask,operator,time,removal,removal_op,id FROM bans ORDER BY id DESC WHERE id = %d", id)
return cur.fetchall()
def myfilter(item, regex, kick, ban, oldban, mute, oldmute, floods, operator, channel):
if operator:
@ -213,22 +217,29 @@ def getQueryTerm(query, term):
return (query, ret)
return (query, None)
bans = []
if form.has_key('query'):
k = b = ob = m = om = fb = False
oper = chan = False
if form.has_key('kicks'): k = True
if form.has_key('oldbans'): ob = True
if form.has_key('bans'): b = True
if form.has_key('oldmutes'): om = True
if form.has_key('mutes'): m = True
if form.has_key('floods'): fb = True
if "chan:" in form['query'].value:
(form['query'].value, chan) = getQueryTerm(form['query'].value, "chan:")
if "oper:" in form['query'].value:
(form['query'].value, oper) = getQueryTerm(form['query'].value, "oper:")
regex = re.compile(re.escape(form['query'].value).replace('\%','.*'), re.DOTALL | re.I)
bans = filter(lambda x: myfilter(x, regex, k, b, ob, m, om, fb, oper, chan), bans)
start = 0; end = len(bans)
try:
bans = getBans(int(form['query'].value))
start = 0; end = 1
except:
bans = getBans()
k = b = ob = m = om = fb = False
oper = chan = False
if form.has_key('kicks'): k = True
if form.has_key('oldbans'): ob = True
if form.has_key('bans'): b = True
if form.has_key('oldmutes'): om = True
if form.has_key('mutes'): m = True
if form.has_key('floods'): fb = True
if "chan:" in form['query'].value:
(form['query'].value, chan) = getQueryTerm(form['query'].value, "chan:")
if "oper:" in form['query'].value:
(form['query'].value, oper) = getQueryTerm(form['query'].value, "oper:")
regex = re.compile(re.escape(form['query'].value).replace('\%','.*'), re.DOTALL | re.I)
bans = filter(lambda x: myfilter(x, regex, k, b, ob, m, om, fb, oper, chan), bans)
start = 0; end = len(bans)
else:
page = 0
try:

View File

@ -444,23 +444,17 @@ class Bantracker(callbacks.Plugin):
'*** %s sets mode: %s %s\n' %
(msg.nick or msg.prefix, msg.args[1],
' '.join(msg.args[2:])))
if 'b' in msg.args[1] or 'd' in msg.args[1]:
i = 2
plusmin = False
for c in msg.args[1]:
if c == '-': plusmin = False
elif c == '+': plusmin = True
else:
if c == 'b':
if plusmin:
comment = self.getHostFromBan(irc, msg, msg.args[i])
self.doKickban(irc, channel, msg.nick, msg.args[i], extra_comment=comment)
else: self.doUnban(irc,channel, msg.nick, msg.args[i])
i += 1
if c == 'd':
if plusmin: self.doKickban(irc, channel, msg.nick, msg.args[i] + ' (realname)')
else: self.doUnban(irc,channel, msg.nick, msg.args[i] + ' (realname)')
i += 1
modes = ircutils.separateModes(msg.args[1:])
for param in modes:
if param == '+b':
comment = self.getHostFromBan(irc, msg, msg.args[i])
self.doKickban(irc, channel, msg.nick, msg.args[i], extra_comment=comment)
elif param == '-b':
self.doUnban(irc,channel, msg.nick, msg.args[i])
elif param == '+d':
self.doKickban(irc, channel, msg.nick, msg.args[i] + ' (realname)')
elif param == '-d':
self.doUnban(irc,channel, msg.nick, msg.args[i] + ' (realname)')
def getHostFromBan(self, irc, msg, mask):
if irc not in self.lastStates: