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>'
|
print '<th>Log</th></tr>'
|
||||||
|
|
||||||
# Select and filter bans
|
# Select and filter bans
|
||||||
cur.execute("SELECT channel,mask,operator,time,removal,removal_op,id FROM bans ORDER BY id DESC")
|
def getBans(id=None):
|
||||||
bans = cur.fetchall()
|
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):
|
def myfilter(item, regex, kick, ban, oldban, mute, oldmute, floods, operator, channel):
|
||||||
if operator:
|
if operator:
|
||||||
|
@ -213,22 +217,29 @@ def getQueryTerm(query, term):
|
||||||
return (query, ret)
|
return (query, ret)
|
||||||
return (query, None)
|
return (query, None)
|
||||||
|
|
||||||
|
bans = []
|
||||||
|
|
||||||
if form.has_key('query'):
|
if form.has_key('query'):
|
||||||
k = b = ob = m = om = fb = False
|
try:
|
||||||
oper = chan = False
|
bans = getBans(int(form['query'].value))
|
||||||
if form.has_key('kicks'): k = True
|
start = 0; end = 1
|
||||||
if form.has_key('oldbans'): ob = True
|
except:
|
||||||
if form.has_key('bans'): b = True
|
bans = getBans()
|
||||||
if form.has_key('oldmutes'): om = True
|
k = b = ob = m = om = fb = False
|
||||||
if form.has_key('mutes'): m = True
|
oper = chan = False
|
||||||
if form.has_key('floods'): fb = True
|
if form.has_key('kicks'): k = True
|
||||||
if "chan:" in form['query'].value:
|
if form.has_key('oldbans'): ob = True
|
||||||
(form['query'].value, chan) = getQueryTerm(form['query'].value, "chan:")
|
if form.has_key('bans'): b = True
|
||||||
if "oper:" in form['query'].value:
|
if form.has_key('oldmutes'): om = True
|
||||||
(form['query'].value, oper) = getQueryTerm(form['query'].value, "oper:")
|
if form.has_key('mutes'): m = True
|
||||||
regex = re.compile(re.escape(form['query'].value).replace('\%','.*'), re.DOTALL | re.I)
|
if form.has_key('floods'): fb = True
|
||||||
bans = filter(lambda x: myfilter(x, regex, k, b, ob, m, om, fb, oper, chan), bans)
|
if "chan:" in form['query'].value:
|
||||||
start = 0; end = len(bans)
|
(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:
|
else:
|
||||||
page = 0
|
page = 0
|
||||||
try:
|
try:
|
||||||
|
|
|
@ -444,23 +444,17 @@ class Bantracker(callbacks.Plugin):
|
||||||
'*** %s sets mode: %s %s\n' %
|
'*** %s sets mode: %s %s\n' %
|
||||||
(msg.nick or msg.prefix, msg.args[1],
|
(msg.nick or msg.prefix, msg.args[1],
|
||||||
' '.join(msg.args[2:])))
|
' '.join(msg.args[2:])))
|
||||||
if 'b' in msg.args[1] or 'd' in msg.args[1]:
|
modes = ircutils.separateModes(msg.args[1:])
|
||||||
i = 2
|
for param in modes:
|
||||||
plusmin = False
|
if param == '+b':
|
||||||
for c in msg.args[1]:
|
comment = self.getHostFromBan(irc, msg, msg.args[i])
|
||||||
if c == '-': plusmin = False
|
self.doKickban(irc, channel, msg.nick, msg.args[i], extra_comment=comment)
|
||||||
elif c == '+': plusmin = True
|
elif param == '-b':
|
||||||
else:
|
self.doUnban(irc,channel, msg.nick, msg.args[i])
|
||||||
if c == 'b':
|
elif param == '+d':
|
||||||
if plusmin:
|
self.doKickban(irc, channel, msg.nick, msg.args[i] + ' (realname)')
|
||||||
comment = self.getHostFromBan(irc, msg, msg.args[i])
|
elif param == '-d':
|
||||||
self.doKickban(irc, channel, msg.nick, msg.args[i], extra_comment=comment)
|
self.doUnban(irc,channel, msg.nick, msg.args[i] + ' (realname)')
|
||||||
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
|
|
||||||
|
|
||||||
def getHostFromBan(self, irc, msg, mask):
|
def getHostFromBan(self, irc, msg, mask):
|
||||||
if irc not in self.lastStates:
|
if irc not in self.lastStates:
|
||||||
|
|
Loading…
Reference in New Issue