BugFix: Bantracker does not parse multiple modes properly (LP: #495555)
Allow Bantracker to search bans by ID
This commit is contained in:
parent
ac6fd47a8b
commit
6ffc89d007
|
@ -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:
|
||||
|
|
|
@ -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:
|
||||
|
|
Loading…
Reference in New Issue