\n')
+ body.append('\n')
db = self._getbandb()
c = db.cursor()
- ar = []
- if query.startswith('id='):
- search = query.split('=')[1]
- si = int(search)
- c.execute("""SELECT id,channel,oper,kind,mask,begin_at,end_at,removed_at,removed_by FROM bans WHERE id=?""",(si,))
- r = c.fetchall()
- if len(r):
- ban = r[0]
- (id,channel,oper,kind,mask,begin_at,end_at,removed_at,removed_by) = ban
- if not channels or channel in channels:
- body.extend([
- '
' % (h,q,utils.web.urlencode({'removed_by':removed_by}),removed_by)])
- c.execute("""SELECT full,log FROM nicks WHERE ban_id=?""",(id,))
- r = c.fetchall()
- if len(r):
- body.append('
Logs
')
- for nick in r:
- (full,log) = nick
- body.append('
for %s
' % full)
- if log != '':
- body.append('
')
- for line in log.split('\n'):
- if line != '':
- body.append('
%s
' % line)
- body.append('
')
- c.execute("""SELECT oper,at,comment FROM comments WHERE ban_id=?""",(id,))
- r = c.fetchall()
- if len(r):
- body.extend(['
Comments
', '
'])
- for comment in r:
- (oper,at,com) = comment
- s = time.strftime('%Y-%m-%d %H:%M:%S GMT',time.gmtime(float(at)))
- body.append('
%s by %s: %s
' % (s,oper,com))
- body.append('
')
- c.close()
- write(subtitle, body)
- return
- elif query.startswith('channel='):
- search = '#'+query.split('=')[1]
- c.execute("""SELECT id,channel,oper,kind,mask,begin_at,end_at,removed_at,removed_by FROM bans WHERE channel=? ORDER BY id DESC""",(search,))
- r = c.fetchall()
- if len(r):
- ar.extend(r)
- elif query.startswith('removed_by='):
- search = query.split('=')[1]
- c.execute("""SELECT id,channel,oper,kind,mask,begin_at,end_at,removed_at,removed_by FROM bans WHERE removed_by=? ORDER BY id DESC""",(search,))
- r = c.fetchall()
- if len(r):
- ar.extend(r)
- elif query.startswith('oper='):
- search = query.split('=')[1]
- c.execute("""SELECT id,channel,oper,kind,mask,begin_at,end_at,removed_at,removed_by FROM bans WHERE oper=? ORDER BY id DESC""",(search,))
- r = c.fetchall()
- if len(r):
- ar.extend(r)
- elif query.startswith('mask='):
- search = query.split('=')[1]
- sg = '*%s*' % search
- sl = '%%%s%%' % search
- c.execute("""SELECT ban_id,full FROM nicks WHERE full GLOB ? OR full LIKE ? OR log GLOB ? OR log LIKE ? ORDER BY ban_id DESC""",(sg,sl,sg,sl))
- r = c.fetchall()
- L = []
- a = {}
- if len(r):
- d = {}
- for ban in r:
- (id,full) = ban
- if id not in d:
- d[id] = id
- for id in d:
- c.execute("""SELECT id,channel,oper,kind,mask,begin_at,end_at,removed_at,removed_by FROM bans WHERE id=?""",(id,))
- r = c.fetchall()
- if len(r):
- for ban in r:
- a[ban[0]] = ban
- c.execute("""SELECT id,channel,oper,kind,mask,begin_at,end_at,removed_at,removed_by FROM bans WHERE mask GLOB ? OR mask LIKE ? ORDER BY id DESC""",(sg,sl))
- r = c.fetchall()
- if len(r):
- for ban in r:
- a[ban[0]] = ban
- if len(a):
- ar = []
- for ban in list(a.keys()):
- ar.append(a[ban])
- ar.sort(key=lambda x: x[0], reverse=True)
- elif query.startswith('search='):
- search = query.split('=')[1]
- search = search.replace('+','*')
- print(search)
- if search:
- if not re.match(r'^[0-9]+$', search):
- sg = '*%s*' % search
- sl = '%%%s%%' % search
- si = None
- c.execute("""SELECT ban_id,full FROM nicks WHERE full GLOB ? OR full LIKE ? OR log GLOB ? OR log LIKE ? ORDER BY ban_id DESC""",(sg,sl,sg,sl))
- r = c.fetchall()
- else:
- si = int(search)
- r = []
- L = []
- a = {}
- if len(r):
- d = {}
- for ban in r:
- (id,full) = ban
- if id not in d:
- d[id] = id
- for id in d:
- c.execute("""SELECT id,channel,oper,kind,mask,begin_at,end_at,removed_at,removed_by FROM bans WHERE id=?""",(id,))
- r = c.fetchall()
- if len(r):
- for ban in r:
- a[ban[0]] = ban
- if not si:
- c.execute("""SELECT id,channel,oper,kind,mask,begin_at,end_at,removed_at,removed_by FROM bans WHERE mask GLOB ? OR mask LIKE ? OR channel GLOB ? OR channel LIKE ? OR oper GLOB ? OR oper LIKE ? ORDER BY id DESC""",(sg,sl,sg,sl,sg,sl))
- else:
- c.execute("""SELECT id,channel,oper,kind,mask,begin_at,end_at,removed_at,removed_by FROM bans WHERE id=?""",(si,))
+ if query:
+ ar = []
+ if query.startswith('/&id='):
+ search = query.split('/&id=')[1]
+ c.execute("""SELECT id,channel,oper,kind,mask,begin_at,end_at,removed_at,removed_by FROM bans WHERE id=? ORDER BY id DESC""",(search,))
r = c.fetchall()
if len(r):
- for ban in r:
- a[ban[0]] = ban
- if not si:
- c.execute("""SELECT ban_id, comment FROM comments WHERE comment GLOB ? OR comment LIKE ? ORDER BY ban_id DESC""",(sg,sl))
- r = c.fetchall()
- else:
- r = []
- d = {}
+ ban = r[0]
+ (id,channel,oper,kind,mask,begin_at,end_at,removed_at,removed_by) = ban
+ if not len(channels) or channel in channels:
+ body.append('
\n' % time.strftime('%Y-%m-%d %H:%M:%S GMT',time.gmtime(float(begin_at))))
+ was = float(begin_at) == float(end_at)
+ if was:
+ was = 'forever'
+ else:
+ was = timeElapsed(float(end_at) - float(begin_at))
+ body.append('
Original duration : %s
\n' % was)
+ if not removed_at:
+ if was != 'forever':
+ body.append('
%s
\n' % 'It will expire in %s' % timeElapsed(float(end_at) - time.time()))
+ else:
+ body.append('
%s
\n' % 'Removed after %s on %s by %s' % (timeElapsed(float(removed_at)-float(begin_at)),time.strftime('%Y-%m-%d %H:%M:%S GMT',time.gmtime(float(removed_at))),removed_by))
+ c.execute("""SELECT full, log FROM nicks WHERE ban_id=?""",(id,))
+ r = c.fetchall()
+ if len(r):
+ users = r
+ body.append('
Logs
\n')
+ for u in users:
+ (full,log) = u
+ body.append('
for %s
\n' % full)
+ if log != '':
+ body.append('
\n')
+ for line in log.split('\n'):
+ if line != '':
+ body.append('
%s
\n' % line)
+ body.append('
\n')
+ c.execute("""SELECT oper, at, comment FROM comments WHERE ban_id=?""",(id,))
+ r = c.fetchall()
+ if len(r):
+ body.append('
Comments
\n')
+ body.append('
\n')
+ comments = r
+ for com in comments:
+ (oper,at,comment) = com
+ s = time.strftime('%Y-%m-%d %H:%M:%S GMT',time.gmtime(float(at)))
+ body.append('
%s by %s : %s
\n' % (s,oper,comment))
+ body.append('
\n')
+ elif query.startswith('/&channel='):
+ search = '#'+query.split('/&channel=')[1]
+ c.execute("""SELECT id,channel,oper,kind,mask,begin_at,end_at,removed_at,removed_by FROM bans WHERE channel=? ORDER BY id DESC""",(search,))
+ r = c.fetchall()
if len(r):
- for ban in r:
+ bans = r
+ for ban in bans:
+ (id,channel,oper,kind,mask,begin_at,end_at,removed_at,removed_by) = ban
+ ar.append([int(id),channel,oper,kind,mask,begin_at,end_at,removed_at,removed_by])
+ elif query.startswith('/&removed_by='):
+ search = query.split('/&removed_by=')[1]
+ c.execute("""SELECT id,channel,oper,kind,mask,begin_at,end_at,removed_at,removed_by FROM bans WHERE removed_by=? ORDER BY id DESC""",(search,))
+ r = c.fetchall()
+ if len(r):
+ bans = r
+ for ban in bans:
+ (id,channel,oper,kind,mask,begin_at,end_at,removed_at,removed_by) = ban
+ ar.append([int(id),channel,oper,kind,mask,begin_at,end_at,removed_at,removed_by])
+ elif query.startswith('/&oper='):
+ search = query.split('/&oper=')[1]
+ c.execute("""SELECT id,channel,oper,kind,mask,begin_at,end_at,removed_at,removed_by FROM bans WHERE oper=? ORDER BY id DESC""",(search,))
+ r = c.fetchall()
+ if len(r):
+ bans = r
+ for ban in bans:
+ (id,channel,oper,kind,mask,begin_at,end_at,removed_at,removed_by) = ban
+ ar.append([int(id),channel,oper,kind,mask,begin_at,end_at,removed_at,removed_by])
+ elif query.startswith('/&mask='):
+ search = query.split('/&mask=')[1]
+ glob = '*%s*' % search
+ like = '%'+search+'%'
+ c.execute("""SELECT ban_id, full FROM nicks WHERE full GLOB ? OR full LIKE ? OR log GLOB ? OR log LIKE ? ORDER BY ban_id DESC""",(glob,like,glob,like))
+ L = []
+ a = {}
+ r = c.fetchall()
+ if len(r):
+ bans = r
+ d = {}
+ for ban in bans:
(id,full) = ban
- d[id] = id
+ if not id in d:
+ d[id] = id
for id in d:
- if id not in a:
- c.execute("""SELECT id,channel,oper,kind,mask,begin_at,end_at,removed_at,removed_by FROM bans WHERE id=?""",(id,))
- r = c.fetchall()
- if len(r):
- for ban in r:
- a[ban[0]] = ban
+ c.execute("""SELECT id,channel,oper,kind,mask,begin_at,end_at,removed_at,removed_by FROM bans WHERE id=? ORDER BY id DESC""",(int(id),))
+ r = c.fetchall()
+ if len(r):
+ bans = r
+ for ban in bans:
+ (id,channel,oper,kind,mask,begin_at,end_at,removed_at,removed_by) = ban
+ a[str(id)] = ban
+ c.execute("""SELECT id,channel,oper,kind,mask,begin_at,end_at,removed_at,removed_by FROM bans WHERE mask GLOB ? OR mask LIKE ? ORDER BY id DESC""",(glob,like))
+ r = c.fetchall()
+ if len(r):
+ bans = r
+ for ban in bans:
+ (id,channel,oper,kind,mask,begin_at,end_at,removed_at,removed_by) = ban
+ a[str(id)] = ban
if len(a):
ar = []
- for ban in list(a.keys()):
- ar.append(a[ban])
- ar.sort(key=lambda x: x[0], reverse=True)
- if len(ar):
- print('Found %s results' % len(ar))
- body.extend([
- '
Results %s
' % search,
- '
',
- '
ID
Channel
Operator
Type
Mask
Begin date
End date
Removed
Removed by
',
- ''
- ])
- for ban in ar:
- (id,channel,oper,kind,mask,begin_at,end_at,removed_at,removed_by) = ban
- if not channels or channel in channels:
- s = time.strftime('%Y-%m-%d %H:%M:%S GMT',time.gmtime(float(begin_at)))
- body.extend([
- '
')
-# affected = ''
-# try:
-# c.execute("""SELECT full, log FROM nicks WHERE ban_id=?""",(id,))
-# affected = len(c.fetchall())
-# except:
+ for ban in a:
+ (id,channel,oper,kind,mask,begin_at,end_at,removed_at,removed_by) = a[ban]
+ ar.append([int(id),channel,oper,kind,mask,begin_at,end_at,removed_at,removed_by])
+ def sort_function (item):
+ return item[0]
+ ar.sort(key=sort_function)
+ ar.sort(reverse=True)
+ elif query.startswith('/&search='):
+ search = query.split('/&search=')[1]
+ search = search.replace('+','*')
+ print(search)
+ if search:
+ s = '*%s*' % search
+ qu = '%'+search+'%'
+ c.execute("""SELECT ban_id, full FROM nicks WHERE full GLOB ? OR full LIKE ? OR log GLOB ? OR log LIKE ? ORDER BY ban_id DESC""",(s,qu,s,qu))
+ L = []
+ a = {}
+ r = c.fetchall()
+ if len(r):
+ bans = r
+ d = {}
+ for ban in bans:
+ (id,full) = ban
+ if not id in d:
+ d[id] = id
+ for id in d:
+ c.execute("""SELECT id,channel,oper,kind,mask,begin_at,end_at,removed_at,removed_by FROM bans WHERE id=? ORDER BY id DESC""",(int(id),))
+ r = c.fetchall()
+ if len(r):
+ bans = r
+ for ban in bans:
+ (id,channel,oper,kind,mask,begin_at,end_at,removed_at,removed_by) = ban
+ a[id] = ban
+ c.execute("""SELECT id,channel,oper,kind,mask,begin_at,end_at,removed_at,removed_by FROM bans WHERE mask GLOB ? OR mask LIKE ? OR channel GLOB ? OR channel LIKE ? OR oper GLOB ? OR oper LIKE ? ORDER BY id DESC""",(s,qu,s,qu,s,qu))
+ r = c.fetchall()
+ if len(r):
+ bans = r
+ for ban in bans:
+ (id,channel,oper,kind,mask,begin_at,end_at,removed_at,removed_by) = ban
+ a[id] = ban
+ c.execute("""SELECT ban_id, comment FROM comments WHERE comment GLOB ? OR comment LIKE ? ORDER BY ban_id DESC""",(s,qu))
+ r = c.fetchall()
+ d = {}
+ if len(r):
+ bans = r
+ for ban in bans:
+ (id,full) = ban
+ d[id] = id
+ for id in d:
+ if not id in a:
+ c.execute("""SELECT id,channel,oper,kind,mask,begin_at,end_at,removed_at,removed_by FROM bans WHERE id=? ORDER BY id DESC LIMIT 1""",(int(id),))
+ r = c.fetchall()
+ if len(r):
+ bans = r
+ for ban in bans:
+ (id,channel,oper,kind,mask,begin_at,end_at,removed_at,removed_by) = ban
+ a[id] = ban
+ if len(a):
+ ar = []
+ for ban in a:
+ (id,channel,oper,kind,mask,begin_at,end_at,removed_at,removed_by) = a[ban]
+ ar.append([int(id),channel,oper,kind,mask,begin_at,end_at,removed_at,removed_by])
+ def sort_function (item):
+ return item[0]
+ ar.sort(key=sort_function)
+ ar.sort(reverse=True)
+ else:
+ body.append('
nothing found
\n')
+ if len(ar):
+ print('found %s results' % len(ar))
+ i = 0
+ body.append('
results %s
' % search)
+ body.append('
\n')
+ body.append('
ID
Channel
Operator
Kind
Target
Begin date
End date
Removed date
Removed by
\n')
+ body.append('\n')
+ while i < len(ar):
+ (id,channel,oper,kind,mask,begin_at,end_at,removed_at,removed_by) = ar[i]
+ if not len(channels) or channel in channels:
+ body.append('