mirror of
https://github.com/Mikaela/Limnoria.git
synced 2024-11-27 13:19:24 +01:00
Added lasturl command.
This commit is contained in:
parent
8b093f3b2b
commit
dcacf9c7d5
@ -39,6 +39,7 @@ from baseplugin import *
|
|||||||
|
|
||||||
import re
|
import re
|
||||||
import time
|
import time
|
||||||
|
import getopt
|
||||||
import urlparse
|
import urlparse
|
||||||
|
|
||||||
import sqlite
|
import sqlite
|
||||||
@ -116,13 +117,13 @@ class URLSnarfer(callbacks.Privmsg, ChannelDBHandler):
|
|||||||
Returns a random URL from the URL database. <channel> is only required
|
Returns a random URL from the URL database. <channel> is only required
|
||||||
if the message isn't sent in the channel itself.
|
if the message isn't sent in the channel itself.
|
||||||
"""
|
"""
|
||||||
channel = msg.args[0]
|
channel = privmsgs.getChannel(msg, args)
|
||||||
db = self.getDb(channel)
|
db = self.getDb(channel)
|
||||||
cursor = db.cursor()
|
cursor = db.cursor()
|
||||||
cursor.execute("""SELECT * FROM urls ORDER BY random() LIMIT 1""")
|
cursor.execute("""SELECT * FROM urls ORDER BY random() LIMIT 1""")
|
||||||
(id, url, added, addedBy, _, _, _, _, _, _) = cursor.fetchone()
|
(id, url, added, addedBy, _, _, _, _, _, _) = cursor.fetchone()
|
||||||
when = time.ctime(int(added))
|
when = time.ctime(int(added))
|
||||||
s = '%s: %s (added by %s on %s)' % (id, url, addedBy, when)
|
s = '%s: <%s> (added by %s on %s)' % (id, url, addedBy, when)
|
||||||
irc.reply(msg, s)
|
irc.reply(msg, s)
|
||||||
|
|
||||||
def numurls(self, irc, msg, args):
|
def numurls(self, irc, msg, args):
|
||||||
@ -131,7 +132,7 @@ class URLSnarfer(callbacks.Privmsg, ChannelDBHandler):
|
|||||||
Returns the number of URLs in the URL database. <channel> is only
|
Returns the number of URLs in the URL database. <channel> is only
|
||||||
required if the message isn't sent in the channel itself.
|
required if the message isn't sent in the channel itself.
|
||||||
"""
|
"""
|
||||||
channel = msg.args[0]
|
channel = privmsgs.getChannel(msg, args)
|
||||||
db = self.getDb(channel)
|
db = self.getDb(channel)
|
||||||
cursor = db.cursor()
|
cursor = db.cursor()
|
||||||
cursor.execute("""SELECT COUNT(*) FROM urls""")
|
cursor.execute("""SELECT COUNT(*) FROM urls""")
|
||||||
@ -139,6 +140,54 @@ class URLSnarfer(callbacks.Privmsg, ChannelDBHandler):
|
|||||||
irc.reply(msg, 'I have %s %s in my database.' % \
|
irc.reply(msg, 'I have %s %s in my database.' % \
|
||||||
(count, int(count) == 1 and 'URL' or 'URLs'))
|
(count, int(count) == 1 and 'URL' or 'URLs'))
|
||||||
|
|
||||||
|
def lasturl(self, irc, msg, args):
|
||||||
|
"""[<channel>] [--{from,with,at,proto,near}=<value>]
|
||||||
|
|
||||||
|
Gives the last URL matching the given criteria. --from is from whom
|
||||||
|
the URL came; --at is the site of the URL; --proto is the protocol the
|
||||||
|
URL used; --with is something inside the URL; --near is a string in the
|
||||||
|
messages before and after the link. <channel> is only necessary if the
|
||||||
|
message isn't sent in the channel itself.
|
||||||
|
"""
|
||||||
|
channel = privmsgs.getChannel(msg, args)
|
||||||
|
(optlist, rest) = getopt.getopt(args, '', ['from=', 'with=', 'at=',
|
||||||
|
'proto=', 'near='])
|
||||||
|
criteria = ['1=1']
|
||||||
|
formats = []
|
||||||
|
for (option, argument) in optlist:
|
||||||
|
option = option[2:] # Strip off the --.
|
||||||
|
if option == 'from':
|
||||||
|
criteria.append('added_by LIKE %s')
|
||||||
|
formats.append(argument)
|
||||||
|
elif option == 'with':
|
||||||
|
criteria.append('url LIKE %s')
|
||||||
|
formats.append(argument)
|
||||||
|
elif option == 'at':
|
||||||
|
criteria.append('site LIKE %s')
|
||||||
|
formats.append(argument)
|
||||||
|
elif option == 'proto':
|
||||||
|
criteria.append('protocol=%s')
|
||||||
|
formats.append(argument)
|
||||||
|
elif option == 'near':
|
||||||
|
criteria.append("""(previous_msg LIKE %s OR
|
||||||
|
next_msg LIKE %s OR
|
||||||
|
current_msg LIKE %s)""")
|
||||||
|
if '%' not in argument:
|
||||||
|
argument = '%%%s%%' % argument
|
||||||
|
formats.append(argument)
|
||||||
|
formats.append(argument)
|
||||||
|
formats.append(argument)
|
||||||
|
db = self.getDb(channel)
|
||||||
|
cursor = db.cursor()
|
||||||
|
criterion = ' AND '.join(criteria)
|
||||||
|
sql = 'SELECT url FROM urls WHERE %s ORDER BY id DESC' % criterion
|
||||||
|
cursor.execute(sql, *formats)
|
||||||
|
if cursor.rowcount == 0:
|
||||||
|
irc.reply(msg, 'No URLs matched that criteria.')
|
||||||
|
else:
|
||||||
|
(url,) = cursor.fetchone()
|
||||||
|
irc.reply(msg, url)
|
||||||
|
|
||||||
|
|
||||||
Class = URLSnarfer
|
Class = URLSnarfer
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user