mirror of
https://github.com/ncoevoet/ChanTracker.git
synced 2025-04-27 05:21:10 -05:00
more features in 'pending' - allows you to retreive only --ids (can be copy/past to 'edit/editAndMark/mark') or items longer than --duration
This commit is contained in:
parent
d04636c322
commit
2d0d5cffe4
32
plugin.py
32
plugin.py
@ -382,9 +382,8 @@ class Ircd (object):
|
|||||||
c.close()
|
c.close()
|
||||||
return results
|
return results
|
||||||
|
|
||||||
def pending(self,irc,channel,mode,prefix,pattern,db,never):
|
def pending(self,irc,channel,mode,prefix,pattern,db,never,ids,duration):
|
||||||
# returns active items for a channel mode
|
# returns active items for a channel mode
|
||||||
log.debug('%s never' % never)
|
|
||||||
if not channel or not mode or not prefix:
|
if not channel or not mode or not prefix:
|
||||||
return []
|
return []
|
||||||
if not ircdb.checkCapability(prefix, '%s,op' % channel):
|
if not ircdb.checkCapability(prefix, '%s,op' % channel):
|
||||||
@ -393,6 +392,7 @@ class Ircd (object):
|
|||||||
results = []
|
results = []
|
||||||
r = []
|
r = []
|
||||||
c = db.cursor()
|
c = db.cursor()
|
||||||
|
t = time.time()
|
||||||
for m in mode:
|
for m in mode:
|
||||||
items = chan.getItemsFor(m)
|
items = chan.getItemsFor(m)
|
||||||
if len(items):
|
if len(items):
|
||||||
@ -402,7 +402,12 @@ class Ircd (object):
|
|||||||
if item.when == item.expire or not item.expire:
|
if item.when == item.expire or not item.expire:
|
||||||
r.append([item.uid,item.mode,item.value,item.by,item.when,item.expire])
|
r.append([item.uid,item.mode,item.value,item.by,item.when,item.expire])
|
||||||
else:
|
else:
|
||||||
r.append([item.uid,item.mode,item.value,item.by,item.when,item.expire])
|
if duration > 0:
|
||||||
|
log.debug('%s -> %s : %s' % (duration,item.when,(t-item.when)))
|
||||||
|
if (t - item.when) > duration:
|
||||||
|
r.append([item.uid,item.mode,item.value,item.by,item.when,item.expire])
|
||||||
|
else:
|
||||||
|
r.append([item.uid,item.mode,item.value,item.by,item.when,item.expire])
|
||||||
r.sort(reverse=True)
|
r.sort(reverse=True)
|
||||||
if len(r):
|
if len(r):
|
||||||
for item in r:
|
for item in r:
|
||||||
@ -416,7 +421,9 @@ class Ircd (object):
|
|||||||
message = ' "%s"' % comment
|
message = ' "%s"' % comment
|
||||||
else:
|
else:
|
||||||
message = ''
|
message = ''
|
||||||
if expire and expire != when:
|
if ids:
|
||||||
|
results.append('%s' % uid)
|
||||||
|
elif expire and expire != when:
|
||||||
results.append('[#%s +%s %s by %s expires at %s]%s' % (uid,mode,value,by,floatToGMT(expire),message))
|
results.append('[#%s +%s %s by %s expires at %s]%s' % (uid,mode,value,by,floatToGMT(expire),message))
|
||||||
else:
|
else:
|
||||||
results.append('[#%s +%s %s by %s on %s]%s' % (uid,mode,value,by,floatToGMT(when),message))
|
results.append('[#%s +%s %s by %s on %s]%s' % (uid,mode,value,by,floatToGMT(when),message))
|
||||||
@ -1245,12 +1252,14 @@ class ChanTracker(callbacks.Plugin,plugins.ChannelDBHandler):
|
|||||||
query = wrap(query,['user',getopts({'deep': '', 'never': '', 'active' : '','channel':'channel'}),'text'])
|
query = wrap(query,['user',getopts({'deep': '', 'never': '', 'active' : '','channel':'channel'}),'text'])
|
||||||
|
|
||||||
def pending (self, irc, msg, args, channel, optlist):
|
def pending (self, irc, msg, args, channel, optlist):
|
||||||
"""[<channel>] [--mode=<e|b|q|l>] [--oper=<nick|hostmask>] [--never]
|
"""[<channel>] [--mode=<e|b|q|l>] [--oper=<nick|hostmask>] [--never] [--ids] [--duration [<years>y] [<weeks>w] [<days>d] [<hours>h] [<minutes>m] [<seconds>s]]
|
||||||
|
|
||||||
returns active items for --mode if given, filtered by --oper if given, --never never expire only if given"""
|
returns active items for --mode, filtered by --oper, --never (never expire), --ids (only ids), --duration (item longer than)"""
|
||||||
mode = None
|
mode = None
|
||||||
oper = None
|
oper = None
|
||||||
never = False
|
never = False
|
||||||
|
ids = False
|
||||||
|
duration = -1
|
||||||
for (option, arg) in optlist:
|
for (option, arg) in optlist:
|
||||||
if option == 'mode':
|
if option == 'mode':
|
||||||
mode = arg
|
mode = arg
|
||||||
@ -1258,18 +1267,25 @@ class ChanTracker(callbacks.Plugin,plugins.ChannelDBHandler):
|
|||||||
oper = arg
|
oper = arg
|
||||||
elif option == 'never':
|
elif option == 'never':
|
||||||
never = True
|
never = True
|
||||||
|
elif option == 'ids':
|
||||||
|
ids = True
|
||||||
|
elif option == 'duration':
|
||||||
|
duration = int(arg)
|
||||||
|
if never and duration > 0:
|
||||||
|
irc.reply("you can't use --never and --duration at same time")
|
||||||
|
return
|
||||||
i = self.getIrc(irc)
|
i = self.getIrc(irc)
|
||||||
if oper in i.nicks:
|
if oper in i.nicks:
|
||||||
oper = self.getNick(irc,oper).prefix
|
oper = self.getNick(irc,oper).prefix
|
||||||
results = []
|
results = []
|
||||||
if not mode:
|
if not mode:
|
||||||
mode = self.registryValue('modesToAskWhenOpped',channel=channel) + self.registryValue('modesToAsk',channel=channel)
|
mode = self.registryValue('modesToAskWhenOpped',channel=channel) + self.registryValue('modesToAsk',channel=channel)
|
||||||
results = i.pending(irc,channel,mode,msg.prefix,oper,self.getDb(irc.network),never)
|
results = i.pending(irc,channel,mode,msg.prefix,oper,self.getDb(irc.network),never,ids,duration)
|
||||||
if len(results):
|
if len(results):
|
||||||
irc.reply(', '.join(results), private=True)
|
irc.reply(', '.join(results), private=True)
|
||||||
else:
|
else:
|
||||||
irc.reply('no result')
|
irc.reply('no result')
|
||||||
pending = wrap(pending,['op',getopts({'mode': 'letter', 'never': '', 'oper' : 'somethingWithoutSpaces'}),])
|
pending = wrap(pending,['op',getopts({'mode': 'letter', 'never': '', 'oper' : 'somethingWithoutSpaces', 'ids' : '', 'duration' : 'getTs'})])
|
||||||
|
|
||||||
def _modes (self,numModes,chan,modes,f):
|
def _modes (self,numModes,chan,modes,f):
|
||||||
for i in range(0, len(modes), numModes):
|
for i in range(0, len(modes), numModes):
|
||||||
|
Loading…
x
Reference in New Issue
Block a user