mirror of
https://github.com/Mikaela/Limnoria.git
synced 2024-11-27 13:19:24 +01:00
Switched the togglesnarfers to the new Toggleable mixin
This commit is contained in:
parent
f0b850118b
commit
535cdde13c
@ -91,59 +91,24 @@ def configure(onStart, afterConnect, advanced):
|
|||||||
print 'supybot sees such a URL, he will parse the web page for'
|
print 'supybot sees such a URL, he will parse the web page for'
|
||||||
print 'information and reply with the results.\n'
|
print 'information and reply with the results.\n'
|
||||||
if yn('Do you want the Bugzilla snarfer enabled by default?') == 'n':
|
if yn('Do you want the Bugzilla snarfer enabled by default?') == 'n':
|
||||||
onStart.append('Bugzilla togglesnarfer bug off')
|
onStart.append('Bugzilla toggle bug off')
|
||||||
|
|
||||||
class Bugzilla(callbacks.PrivmsgCommandAndRegexp):
|
class Bugzilla(callbacks.PrivmsgCommandAndRegexp, plugins.Toggleable):
|
||||||
"""Show a link to a bug report with a brief description"""
|
"""Show a link to a bug report with a brief description"""
|
||||||
threaded = True
|
threaded = True
|
||||||
regexps = ['bzSnarfer']
|
regexps = ['bzSnarfer']
|
||||||
|
toggles = plugins.ToggleDictionary({'bug' : True})
|
||||||
|
|
||||||
def __init__(self):
|
def __init__(self):
|
||||||
callbacks.PrivmsgCommandAndRegexp.__init__(self)
|
callbacks.PrivmsgCommandAndRegexp.__init__(self)
|
||||||
|
#plugins.Toggleabel.__init__(self)
|
||||||
self.entre = re.compile('&(\S*?);')
|
self.entre = re.compile('&(\S*?);')
|
||||||
self.db = makeDb(dbfilename)
|
self.db = makeDb(dbfilename)
|
||||||
self.snarfers = {'bug' : True}
|
|
||||||
|
|
||||||
def die(self):
|
def die(self):
|
||||||
self.db.close()
|
self.db.close()
|
||||||
del self.db
|
del self.db
|
||||||
|
|
||||||
def _toggleHelper(self, irc, msg, state, snarfer):
|
|
||||||
if not state:
|
|
||||||
self.snarfers[snarfer] = not self.snarfers[snarfer]
|
|
||||||
elif state in self._enable:
|
|
||||||
self.snarfers[snarfer] = True
|
|
||||||
elif state in self._disable:
|
|
||||||
self.snarfers[snarfer] = False
|
|
||||||
resp = []
|
|
||||||
for k in self.snarfers:
|
|
||||||
if self.snarfers[k]:
|
|
||||||
resp.append('%s%s: On' % (k[0].upper(), k[1:]))
|
|
||||||
else:
|
|
||||||
resp.append('%s%s: Off' % (k[0].upper(), k[1:]))
|
|
||||||
irc.reply(msg, '%s (%s)' % (conf.replySuccess, '; '.join(resp)))
|
|
||||||
|
|
||||||
_enable = ('on', 'enable')
|
|
||||||
_disable = ('off', 'disable')
|
|
||||||
def togglesnarfer(self, irc, msg, args):
|
|
||||||
"""<bug> [<on|off>]
|
|
||||||
|
|
||||||
Toggles the snarfer that responds to Bugzilla-style bug links. If
|
|
||||||
nothing is specified, all snarfers will have their states
|
|
||||||
toggled (on -> off, off -> on). If only a state is specified, all
|
|
||||||
snarfers will have their state set to the specified state. If a
|
|
||||||
specific snarfer is specified, the changes will apply only to that
|
|
||||||
snarfer.
|
|
||||||
"""
|
|
||||||
(snarfer, state) = privmsgs.getArgs(args, optional=1)
|
|
||||||
snarfer = snarfer.lower()
|
|
||||||
state = state.lower()
|
|
||||||
if snarfer not in self.snarfers:
|
|
||||||
raise callbacks.ArgumentError
|
|
||||||
if state and state not in self._enable and state not in self._disable:
|
|
||||||
raise callbacks.ArgumentError
|
|
||||||
self._toggleHelper(irc, msg, state, snarfer)
|
|
||||||
togglesnarfer=privmsgs.checkCapability(togglesnarfer, 'admin')
|
|
||||||
|
|
||||||
def addzilla(self, irc, msg, args):
|
def addzilla(self, irc, msg, args):
|
||||||
"""shorthand url description
|
"""shorthand url description
|
||||||
Add a bugzilla to the list of defined bugzillae.
|
Add a bugzilla to the list of defined bugzillae.
|
||||||
@ -204,7 +169,7 @@ class Bugzilla(callbacks.PrivmsgCommandAndRegexp):
|
|||||||
return
|
return
|
||||||
def bzSnarfer(self, irc, msg, match):
|
def bzSnarfer(self, irc, msg, match):
|
||||||
r"(.*)/show_bug.cgi\?id=([0-9]+)"
|
r"(.*)/show_bug.cgi\?id=([0-9]+)"
|
||||||
if not self.snarfers['bug']:
|
if not self.toggles.get('bug', channel=msg.args[0]):
|
||||||
return
|
return
|
||||||
queryurl = '%s/xml.cgi?id=%s' % (match.group(1), match.group(2))
|
queryurl = '%s/xml.cgi?id=%s' % (match.group(1), match.group(2))
|
||||||
try:
|
try:
|
||||||
|
@ -43,6 +43,7 @@ import plugins
|
|||||||
import conf
|
import conf
|
||||||
import debug
|
import debug
|
||||||
import utils
|
import utils
|
||||||
|
import plugins
|
||||||
import ircutils
|
import ircutils
|
||||||
import privmsgs
|
import privmsgs
|
||||||
import callbacks
|
import callbacks
|
||||||
@ -61,22 +62,24 @@ def configure(onStart, afterConnect, advanced):
|
|||||||
print 'supybot sees such a URL, he will parse the web page for'
|
print 'supybot sees such a URL, he will parse the web page for'
|
||||||
print 'information and reply with the results.\n'
|
print 'information and reply with the results.\n'
|
||||||
if yn('Do you want the Ebay snarfer enabled by default?') == 'n':
|
if yn('Do you want the Ebay snarfer enabled by default?') == 'n':
|
||||||
onStart.append('Ebay togglesnarfer auction off')
|
onStart.append('Ebay toggle auction off')
|
||||||
|
|
||||||
example = utils.wrapLines("""
|
example = utils.wrapLines("""
|
||||||
Add an example IRC session using this module here.
|
Add an example IRC session using this module here.
|
||||||
""")
|
""")
|
||||||
|
|
||||||
class Ebay(callbacks.PrivmsgCommandAndRegexp):
|
class Ebay(callbacks.PrivmsgCommandAndRegexp, plugins.Toggleable):
|
||||||
"""
|
"""
|
||||||
Module for eBay stuff. Currently contains a URL snarfer and a command to
|
Module for eBay stuff. Currently contains a URL snarfer and a command to
|
||||||
get info about an auction.
|
get info about an auction.
|
||||||
"""
|
"""
|
||||||
threaded = True
|
threaded = True
|
||||||
regexps = ['ebaySnarfer']
|
regexps = ['ebaySnarfer']
|
||||||
|
toggles = plugins.ToggleDictionary({'auction' : True})
|
||||||
|
|
||||||
def __init__(self):
|
def __init__(self):
|
||||||
callbacks.PrivmsgCommandAndRegexp.__init__(self)
|
callbacks.PrivmsgCommandAndRegexp.__init__(self)
|
||||||
self.snarfers = {'auction' : True}
|
#plugins.Toggleable.__init__(self)
|
||||||
|
|
||||||
_reopts = re.I | re.S
|
_reopts = re.I | re.S
|
||||||
_info = re.compile(r'<title>eBay item (\d+) \([^)]+\) - ([^<]+)</title>',
|
_info = re.compile(r'<title>eBay item (\d+) \([^)]+\) - ([^<]+)</title>',
|
||||||
@ -115,43 +118,6 @@ class Ebay(callbacks.PrivmsgCommandAndRegexp):
|
|||||||
_getSeller = lambda self, s: '%s: %s (%s)' % (ircutils.bold('Seller'),
|
_getSeller = lambda self, s: '%s: %s (%s)' % (ircutils.bold('Seller'),
|
||||||
self._seller.search(s).group(1), self._seller.search(s).group(2))
|
self._seller.search(s).group(1), self._seller.search(s).group(2))
|
||||||
|
|
||||||
def _toggleHelper(self, irc, msg, state, snarfer):
|
|
||||||
if not state:
|
|
||||||
self.snarfers[snarfer] = not self.snarfers[snarfer]
|
|
||||||
elif state in self._enable:
|
|
||||||
self.snarfers[snarfer] = True
|
|
||||||
elif state in self._disable:
|
|
||||||
self.snarfers[snarfer] = False
|
|
||||||
resp = []
|
|
||||||
for k in self.snarfers:
|
|
||||||
if self.snarfers[k]:
|
|
||||||
resp.append('%s%s: On' % (k[0].upper(), k[1:]))
|
|
||||||
else:
|
|
||||||
resp.append('%s%s: Off' % (k[0].upper(), k[1:]))
|
|
||||||
irc.reply(msg, '%s (%s)' % (conf.replySuccess, '; '.join(resp)))
|
|
||||||
|
|
||||||
_enable = ('on', 'enable')
|
|
||||||
_disable = ('off', 'disable')
|
|
||||||
def togglesnarfer(self, irc, msg, args):
|
|
||||||
"""<auction> [<on|off>]
|
|
||||||
|
|
||||||
Toggles the snarfer that responds to eBay auction links. If
|
|
||||||
nothing is specified, all snarfers will have their states
|
|
||||||
toggled (on -> off, off -> on). If only a state is specified, all
|
|
||||||
snarfers will have their state set to the specified state. If a
|
|
||||||
specific snarfer is specified, the changes will apply only to that
|
|
||||||
snarfer.
|
|
||||||
"""
|
|
||||||
(snarfer, state) = privmsgs.getArgs(args, optional=1)
|
|
||||||
snarfer = snarfer.lower()
|
|
||||||
state = state.lower()
|
|
||||||
if snarfer not in self.snarfers:
|
|
||||||
raise callbacks.ArgumentError
|
|
||||||
if state and state not in self._enable and state not in self._disable:
|
|
||||||
raise callbacks.ArgumentError
|
|
||||||
self._toggleHelper(irc, msg, state, snarfer)
|
|
||||||
togglesnarfer=privmsgs.checkCapability(togglesnarfer, 'admin')
|
|
||||||
|
|
||||||
def ebay(self, irc, msg, args):
|
def ebay(self, irc, msg, args):
|
||||||
"""[--link] <item>
|
"""[--link] <item>
|
||||||
|
|
||||||
@ -174,7 +140,7 @@ class Ebay(callbacks.PrivmsgCommandAndRegexp):
|
|||||||
def ebaySnarfer(self, irc, msg, match):
|
def ebaySnarfer(self, irc, msg, match):
|
||||||
r"http://cgi\.ebay\.com/ws/eBayISAPI\.dll\?ViewItem(?:&item=\d+|"\
|
r"http://cgi\.ebay\.com/ws/eBayISAPI\.dll\?ViewItem(?:&item=\d+|"\
|
||||||
"&category=\d+)+"
|
"&category=\d+)+"
|
||||||
if not self.snarfers['auction']:
|
if not self.toggles.get('auction', channel=msg.args[0]):
|
||||||
return
|
return
|
||||||
url = match.group(0)
|
url = match.group(0)
|
||||||
self._getResponse(irc, msg, url, snarf = True)
|
self._getResponse(irc, msg, url, snarf = True)
|
||||||
|
@ -42,6 +42,7 @@ import urllib2
|
|||||||
import conf
|
import conf
|
||||||
import debug
|
import debug
|
||||||
import utils
|
import utils
|
||||||
|
import plugins
|
||||||
import ircutils
|
import ircutils
|
||||||
import privmsgs
|
import privmsgs
|
||||||
import callbacks
|
import callbacks
|
||||||
@ -54,12 +55,17 @@ def configure(onStart, afterConnect, advanced):
|
|||||||
# commands you would like to be run when the bot has finished connecting.
|
# commands you would like to be run when the bot has finished connecting.
|
||||||
from questions import expect, anything, something, yn
|
from questions import expect, anything, something, yn
|
||||||
onStart.append('load Gameknot')
|
onStart.append('load Gameknot')
|
||||||
|
if advanced:
|
||||||
print 'The Gameknot plugin has the functionality to watch for URLs'
|
print 'The Gameknot plugin has the functionality to watch for URLs'
|
||||||
print 'that match a specific pattern (we call this a snarfer). When'
|
print 'that match a specific pattern (we call this a snarfer). When'
|
||||||
print 'supybot sees such a URL, he will parse the web page for information'
|
print 'supybot sees such a URL, he will parse the web page for'
|
||||||
print 'and reply with the results.\n'
|
print 'information and reply with the results.\n'
|
||||||
if yn('Do you want the Gameknot snarfer enabled by default?') == 'n':
|
if yn('Do you want the Gameknot stats snarfer enabled by default?') ==\
|
||||||
onStart.append('Gameknot togglesnarfer')
|
'n':
|
||||||
|
onStart.append('Gameknot toggle stat off')
|
||||||
|
if yn('Do you want the Gameknot Game links snarfer enabled by '\
|
||||||
|
'default?') == 'n':
|
||||||
|
onStart.append('Gameknot toggle stat off')
|
||||||
|
|
||||||
|
|
||||||
example = utils.wrapLines("""
|
example = utils.wrapLines("""
|
||||||
@ -73,13 +79,14 @@ example = utils.wrapLines("""
|
|||||||
<supybot> Challenge from ddipaolo: inkedmn (901; W-69, L-84, D-4) vs. ddipaolo (1159; W-135, L-136, D-8); inkedmn to move. <http://gameknot.com/chess.pl?bd=1038943>
|
<supybot> Challenge from ddipaolo: inkedmn (901; W-69, L-84, D-4) vs. ddipaolo (1159; W-135, L-136, D-8); inkedmn to move. <http://gameknot.com/chess.pl?bd=1038943>
|
||||||
""")
|
""")
|
||||||
|
|
||||||
class Gameknot(callbacks.PrivmsgCommandAndRegexp):
|
class Gameknot(callbacks.PrivmsgCommandAndRegexp, plugins.Toggleable):
|
||||||
threaded = True
|
threaded = True
|
||||||
regexps = ['gameknotSnarfer', 'gameknotStatsSnarfer']
|
regexps = ['gameknotSnarfer', 'gameknotStatsSnarfer']
|
||||||
|
toggles = plugins.ToggleDictionary({'game' : True,
|
||||||
|
'stat' : True})
|
||||||
def __init__(self):
|
def __init__(self):
|
||||||
callbacks.PrivmsgCommandAndRegexp.__init__(self)
|
callbacks.PrivmsgCommandAndRegexp.__init__(self)
|
||||||
self.snarfers = {'game' : True,
|
#plugins.Toggleable.__init__(self)
|
||||||
'stat' : True}
|
|
||||||
|
|
||||||
_gkrating = re.compile(r'<font color="#FFFF33">(\d+)</font>')
|
_gkrating = re.compile(r'<font color="#FFFF33">(\d+)</font>')
|
||||||
_gkgames = re.compile(r's: </td><td class=sml>(\d+)</td></tr>')
|
_gkgames = re.compile(r's: </td><td class=sml>(\d+)</td></tr>')
|
||||||
@ -164,43 +171,6 @@ class Gameknot(callbacks.PrivmsgCommandAndRegexp):
|
|||||||
name = privmsgs.getArgs(args)
|
name = privmsgs.getArgs(args)
|
||||||
irc.reply(msg, self.getStats(name))
|
irc.reply(msg, self.getStats(name))
|
||||||
|
|
||||||
def _toggleHelper(self, irc, msg, state, snarfer):
|
|
||||||
if not state:
|
|
||||||
self.snarfers[snarfer] = not self.snarfers[snarfer]
|
|
||||||
elif state in self._enable:
|
|
||||||
self.snarfers[snarfer] = True
|
|
||||||
elif state in self._disable:
|
|
||||||
self.snarfers[snarfer] = False
|
|
||||||
resp = []
|
|
||||||
for k in self.snarfers:
|
|
||||||
if self.snarfers[k]:
|
|
||||||
resp.append('%s%s: On' % (k[0].upper(), k[1:]))
|
|
||||||
else:
|
|
||||||
resp.append('%s%s: Off' % (k[0].upper(), k[1:]))
|
|
||||||
irc.reply(msg, '%s (%s)' % (conf.replySuccess, '; '.join(resp)))
|
|
||||||
|
|
||||||
_enable = ('on', 'enable')
|
|
||||||
_disable = ('off', 'disable')
|
|
||||||
def togglesnarfer(self, irc, msg, args):
|
|
||||||
"""<game|stat> [<on|off>]
|
|
||||||
|
|
||||||
Toggles the snarfer that responds to Gameknot game links or stat links.
|
|
||||||
If nothing is specified, all snarfers will have their states
|
|
||||||
toggled (on -> off, off -> on). If only a state is specified, all
|
|
||||||
snarfers will have their state set to the specified state. If a
|
|
||||||
specific snarfer is specified, the changes will apply only to that
|
|
||||||
snarfer.
|
|
||||||
"""
|
|
||||||
(snarfer, state) = privmsgs.getArgs(args, optional=1)
|
|
||||||
snarfer = snarfer.lower()
|
|
||||||
state = state.lower()
|
|
||||||
if snarfer not in self.snarfers:
|
|
||||||
raise callbacks.ArgumentError
|
|
||||||
if state and state not in self._enable and state not in self._disable:
|
|
||||||
raise callbacks.ArgumentError
|
|
||||||
self._toggleHelper(irc, msg, state, snarfer)
|
|
||||||
togglesnarfer=privmsgs.checkCapability(togglesnarfer, 'admin')
|
|
||||||
|
|
||||||
_gkPlayer = re.compile(r"popd\('(Rating[^']+)'\).*?>([^<]+)<")
|
_gkPlayer = re.compile(r"popd\('(Rating[^']+)'\).*?>([^<]+)<")
|
||||||
_gkRating = re.compile(r": (\d+)[^:]+:<br>(\d+)[^,]+, (\d+)[^,]+, (\d+)")
|
_gkRating = re.compile(r": (\d+)[^:]+:<br>(\d+)[^,]+, (\d+)[^,]+, (\d+)")
|
||||||
_gkGameTitle = re.compile(r"<p><b>(.*?)\s*</b> \s*<span.*?>\(started")
|
_gkGameTitle = re.compile(r"<p><b>(.*?)\s*</b> \s*<span.*?>\(started")
|
||||||
@ -208,7 +178,7 @@ class Gameknot(callbacks.PrivmsgCommandAndRegexp):
|
|||||||
_gkReason = re.compile(r'won\s+\(\S+\s+(\S+)\)')
|
_gkReason = re.compile(r'won\s+\(\S+\s+(\S+)\)')
|
||||||
def gameknotSnarfer(self, irc, msg, match):
|
def gameknotSnarfer(self, irc, msg, match):
|
||||||
r"http://(?:www\.)?gameknot\.com/chess\.pl\?bd=\d+(&r=\d+)?"
|
r"http://(?:www\.)?gameknot\.com/chess\.pl\?bd=\d+(&r=\d+)?"
|
||||||
if not self.snarfers['stat']:
|
if not self.toggles.get('game', channel=msg.args[0]):
|
||||||
return
|
return
|
||||||
#debug.printf('Got a GK URL from %s' % msg.prefix)
|
#debug.printf('Got a GK URL from %s' % msg.prefix)
|
||||||
url = match.group(0)
|
url = match.group(0)
|
||||||
@ -261,7 +231,7 @@ class Gameknot(callbacks.PrivmsgCommandAndRegexp):
|
|||||||
|
|
||||||
def gameknotStatsSnarfer(self, irc, msg, match):
|
def gameknotStatsSnarfer(self, irc, msg, match):
|
||||||
r"http://gameknot\.com/stats\.pl\?([^&]+)"
|
r"http://gameknot\.com/stats\.pl\?([^&]+)"
|
||||||
if not self.snarfers['game']:
|
if not self.toggles.get('stat', channel=msg.args[0]):
|
||||||
return
|
return
|
||||||
name = match.group(1)
|
name = match.group(1)
|
||||||
s = self.getStats(name)
|
s = self.getStats(name)
|
||||||
|
@ -48,6 +48,7 @@ import conf
|
|||||||
import debug
|
import debug
|
||||||
import utils
|
import utils
|
||||||
import ircmsgs
|
import ircmsgs
|
||||||
|
import plugins
|
||||||
import ircutils
|
import ircutils
|
||||||
import privmsgs
|
import privmsgs
|
||||||
import callbacks
|
import callbacks
|
||||||
@ -88,10 +89,10 @@ def configure(onStart, afterConnect, advanced):
|
|||||||
print 'snarfing and a google search snarfer.\n'
|
print 'snarfing and a google search snarfer.\n'
|
||||||
if yn('Do you want the Google Groups link snarfer enabled by '\
|
if yn('Do you want the Google Groups link snarfer enabled by '\
|
||||||
'default?') == 'n':
|
'default?') == 'n':
|
||||||
onStart.append('Google togglesnarfer groups off')
|
onStart.append('Google toggle groups off')
|
||||||
if yn('Do you want the Google search snarfer enabled by default?')\
|
if yn('Do you want the Google search snarfer enabled by default?')\
|
||||||
== 'y':
|
== 'y':
|
||||||
onStart.append('Google togglesnarfer search on')
|
onStart.append('Google toggle search on')
|
||||||
else:
|
else:
|
||||||
print 'You\'ll need to get a key before you can use this plugin.'
|
print 'You\'ll need to get a key before you can use this plugin.'
|
||||||
print 'You can apply for a key at http://www.google.com/apis/'
|
print 'You can apply for a key at http://www.google.com/apis/'
|
||||||
@ -135,15 +136,16 @@ def search(*args, **kwargs):
|
|||||||
else:
|
else:
|
||||||
raise
|
raise
|
||||||
|
|
||||||
class Google(callbacks.PrivmsgCommandAndRegexp):
|
class Google(callbacks.PrivmsgCommandAndRegexp, plugins.Toggleable):
|
||||||
threaded = True
|
threaded = True
|
||||||
regexps = sets.Set(['googleSnarfer', 'googleGroups'])
|
regexps = sets.Set(['googleSnarfer', 'googleGroups'])
|
||||||
|
toggles = plugins.ToggleDictionary({'groups' : True,
|
||||||
|
'search' : False})
|
||||||
def __init__(self):
|
def __init__(self):
|
||||||
super(self.__class__, self).__init__()
|
super(self.__class__, self).__init__()
|
||||||
|
#plugins.Toggleable.__init__(self)
|
||||||
self.total = 0
|
self.total = 0
|
||||||
self.totalTime = 0
|
self.totalTime = 0
|
||||||
self.snarfers = {'groups' : True,
|
|
||||||
'search' : False}
|
|
||||||
self.last24hours = structures.queue()
|
self.last24hours = structures.queue()
|
||||||
|
|
||||||
def formatData(self, data):
|
def formatData(self, data):
|
||||||
@ -174,43 +176,6 @@ class Google(callbacks.PrivmsgCommandAndRegexp):
|
|||||||
irc.reply(msg, conf.replySuccess)
|
irc.reply(msg, conf.replySuccess)
|
||||||
licensekey = privmsgs.checkCapability(licensekey, 'admin')
|
licensekey = privmsgs.checkCapability(licensekey, 'admin')
|
||||||
|
|
||||||
def _toggleHelper(self, irc, msg, state, snarfer):
|
|
||||||
if not state:
|
|
||||||
self.snarfers[snarfer] = not self.snarfers[snarfer]
|
|
||||||
elif state in self._enable:
|
|
||||||
self.snarfers[snarfer] = True
|
|
||||||
elif state in self._disable:
|
|
||||||
self.snarfers[snarfer] = False
|
|
||||||
resp = []
|
|
||||||
for k in self.snarfers:
|
|
||||||
if self.snarfers[k]:
|
|
||||||
resp.append('%s%s: On' % (k[0].upper(), k[1:]))
|
|
||||||
else:
|
|
||||||
resp.append('%s%s: Off' % (k[0].upper(), k[1:]))
|
|
||||||
irc.reply(msg, '%s (%s)' % (conf.replySuccess, '; '.join(resp)))
|
|
||||||
|
|
||||||
_enable = ('on', 'enable')
|
|
||||||
_disable = ('off', 'disable')
|
|
||||||
def togglesnarfer(self, irc, msg, args):
|
|
||||||
"""<groups|search> [<on|off>]
|
|
||||||
|
|
||||||
Toggles the snarfer that responds to Google Groups links or Google
|
|
||||||
searches. If nothing is specified, all snarfers will have their states
|
|
||||||
toggled (on -> off, off -> on). If only a state is specified, all
|
|
||||||
snarfers will have their state set to the specified state. If a
|
|
||||||
specific snarfer is specified, the changes will apply only to that
|
|
||||||
snarfer.
|
|
||||||
"""
|
|
||||||
(snarfer, state) = privmsgs.getArgs(args, optional=1)
|
|
||||||
snarfer = snarfer.lower()
|
|
||||||
state = state.lower()
|
|
||||||
if snarfer not in self.snarfers:
|
|
||||||
raise callbacks.ArgumentError
|
|
||||||
if state and state not in self._enable and state not in self._disable:
|
|
||||||
raise callbacks.ArgumentError
|
|
||||||
self._toggleHelper(irc, msg, state, snarfer)
|
|
||||||
togglesnarfer=privmsgs.checkCapability(togglesnarfer, 'admin')
|
|
||||||
|
|
||||||
def google(self, irc, msg, args):
|
def google(self, irc, msg, args):
|
||||||
"""<search> [--{language,restrict}=<value>] [--{notsafe,similar}]
|
"""<search> [--{language,restrict}=<value>] [--{notsafe,similar}]
|
||||||
|
|
||||||
@ -312,7 +277,7 @@ class Google(callbacks.PrivmsgCommandAndRegexp):
|
|||||||
|
|
||||||
def googleSnarfer(self, irc, msg, match):
|
def googleSnarfer(self, irc, msg, match):
|
||||||
r"^google\s+(.*)$"
|
r"^google\s+(.*)$"
|
||||||
if not self.snarfers['search']:
|
if not self.toggles.get('search', channel=msg.args[0]):
|
||||||
return
|
return
|
||||||
searchString = match.group(1)
|
searchString = match.group(1)
|
||||||
try:
|
try:
|
||||||
@ -329,7 +294,7 @@ class Google(callbacks.PrivmsgCommandAndRegexp):
|
|||||||
_ggGroup = re.compile(r'Newsgroups: <a[^>]+>([^<]+)</a>')
|
_ggGroup = re.compile(r'Newsgroups: <a[^>]+>([^<]+)</a>')
|
||||||
def googleGroups(self, irc, msg, match):
|
def googleGroups(self, irc, msg, match):
|
||||||
r"http://groups.google.com/[^\s]+"
|
r"http://groups.google.com/[^\s]+"
|
||||||
if not self.snarfers['groups']:
|
if not self.toggles.get('groups', channel=msg.args[0]):
|
||||||
return
|
return
|
||||||
request = urllib2.Request(match.group(0), headers=\
|
request = urllib2.Request(match.group(0), headers=\
|
||||||
{'User-agent': 'Mozilla/4.0 (compatible; MSIE 5.5; Windows NT 4.0)'})
|
{'User-agent': 'Mozilla/4.0 (compatible; MSIE 5.5; Windows NT 4.0)'})
|
||||||
|
@ -42,6 +42,7 @@ from itertools import ifilter
|
|||||||
import conf
|
import conf
|
||||||
import debug
|
import debug
|
||||||
import utils
|
import utils
|
||||||
|
import plugins
|
||||||
import ircutils
|
import ircutils
|
||||||
import privmsgs
|
import privmsgs
|
||||||
import callbacks
|
import callbacks
|
||||||
@ -60,7 +61,7 @@ def configure(onStart, afterConnect, advanced):
|
|||||||
print 'supybot sees such a URL, he will parse the web page for'
|
print 'supybot sees such a URL, he will parse the web page for'
|
||||||
print 'information and reply with the results.\n'
|
print 'information and reply with the results.\n'
|
||||||
if yn('Do you want the Sourceforge snarfer enabled by default?') =='n':
|
if yn('Do you want the Sourceforge snarfer enabled by default?') =='n':
|
||||||
onStart.append('Sourceforge togglesnarfer tracker off')
|
onStart.append('Sourceforge toggle tracker off')
|
||||||
|
|
||||||
print 'The bugs and rfes commands of the Sourceforge plugin can be set'
|
print 'The bugs and rfes commands of the Sourceforge plugin can be set'
|
||||||
print 'to query a default project when no project is specified. If this'
|
print 'to query a default project when no project is specified. If this'
|
||||||
@ -87,7 +88,7 @@ in 0.71, Bug #820961: dock icon doesn't show up with..., Bug #820879: Cannot con
|
|||||||
< supybot> jamessan|work: Improve CLI interface <http://sourceforge.net/tracker/index.php?func=detail&aid=720757&group_id=75946&atid=545548>
|
< supybot> jamessan|work: Improve CLI interface <http://sourceforge.net/tracker/index.php?func=detail&aid=720757&group_id=75946&atid=545548>
|
||||||
""")
|
""")
|
||||||
|
|
||||||
class Sourceforge(callbacks.PrivmsgCommandAndRegexp):
|
class Sourceforge(callbacks.PrivmsgCommandAndRegexp, plugins.Toggleable):
|
||||||
"""
|
"""
|
||||||
Module for Sourceforge stuff. Currently contains commands to query a
|
Module for Sourceforge stuff. Currently contains commands to query a
|
||||||
project's most recent bugs and rfes.
|
project's most recent bugs and rfes.
|
||||||
@ -109,10 +110,12 @@ class Sourceforge(callbacks.PrivmsgCommandAndRegexp):
|
|||||||
'Submitted by':_submitted, 'Priority':_priority,
|
'Submitted by':_submitted, 'Priority':_priority,
|
||||||
'Status':_status}
|
'Status':_status}
|
||||||
|
|
||||||
|
toggles = plugins.ToggleDictionary({'tracker' : True})
|
||||||
|
project = None
|
||||||
|
|
||||||
def __init__(self):
|
def __init__(self):
|
||||||
callbacks.PrivmsgCommandAndRegexp.__init__(self)
|
callbacks.PrivmsgCommandAndRegexp.__init__(self)
|
||||||
self.snarfers = {'tracker' : True}
|
#plugins.Toggleable.__init__(self)
|
||||||
self.project = None
|
|
||||||
|
|
||||||
def _formatResp(self, num, text):
|
def _formatResp(self, num, text):
|
||||||
"""
|
"""
|
||||||
@ -142,43 +145,6 @@ class Sourceforge(callbacks.PrivmsgCommandAndRegexp):
|
|||||||
irc.reply(msg, conf.replySuccess)
|
irc.reply(msg, conf.replySuccess)
|
||||||
setdefault = privmsgs.checkCapability(setdefault, 'admin')
|
setdefault = privmsgs.checkCapability(setdefault, 'admin')
|
||||||
|
|
||||||
def _toggleHelper(self, irc, msg, state, snarfer):
|
|
||||||
if not state:
|
|
||||||
self.snarfers[snarfer] = not self.snarfers[snarfer]
|
|
||||||
elif state in self._enable:
|
|
||||||
self.snarfers[snarfer] = True
|
|
||||||
elif state in self._disable:
|
|
||||||
self.snarfers[snarfer] = False
|
|
||||||
resp = []
|
|
||||||
for k in self.snarfers:
|
|
||||||
if self.snarfers[k]:
|
|
||||||
resp.append('%s%s: On' % (k[0].upper(), k[1:]))
|
|
||||||
else:
|
|
||||||
resp.append('%s%s: Off' % (k[0].upper(), k[1:]))
|
|
||||||
irc.reply(msg, '%s (%s)' % (conf.replySuccess, '; '.join(resp)))
|
|
||||||
|
|
||||||
_enable = ('on', 'enable')
|
|
||||||
_disable = ('off', 'disable')
|
|
||||||
def togglesnarfer(self, irc, msg, args):
|
|
||||||
"""<tracker> [<on|off>]
|
|
||||||
|
|
||||||
Toggles the snarfer that responds to Sourceforge Tracker links. If
|
|
||||||
nothing is specified, all snarfers will have their states
|
|
||||||
toggled (on -> off, off -> on). If only a state is specified, all
|
|
||||||
snarfers will have their state set to the specified state. If a
|
|
||||||
specific snarfer is specified, the changes will apply only to that
|
|
||||||
snarfer.
|
|
||||||
"""
|
|
||||||
(snarfer, state) = privmsgs.getArgs(args, optional=1)
|
|
||||||
snarfer = snarfer.lower()
|
|
||||||
state = state.lower()
|
|
||||||
if snarfer not in self.snarfers:
|
|
||||||
raise callbacks.ArgumentError
|
|
||||||
if state and state not in self._enable and state not in self._disable:
|
|
||||||
raise callbacks.ArgumentError
|
|
||||||
self._toggleHelper(irc, msg, state, snarfer)
|
|
||||||
togglesnarfer=privmsgs.checkCapability(togglesnarfer, 'admin')
|
|
||||||
|
|
||||||
def _getTrackerInfo(self, irc, msg, url, regex, num):
|
def _getTrackerInfo(self, irc, msg, url, regex, num):
|
||||||
try:
|
try:
|
||||||
fd = urllib2.urlopen(url)
|
fd = urllib2.urlopen(url)
|
||||||
@ -277,7 +243,7 @@ class Sourceforge(callbacks.PrivmsgCommandAndRegexp):
|
|||||||
_linkType = re.compile(r'(\w+ \w+|\w+): Tracker Detailed View', re.I)
|
_linkType = re.compile(r'(\w+ \w+|\w+): Tracker Detailed View', re.I)
|
||||||
def sfSnarfer(self, irc, msg, match):
|
def sfSnarfer(self, irc, msg, match):
|
||||||
r"https?://(?:www\.)?(?:sourceforge|sf)\.net/tracker/(?:index\.php)?\?(?:&?func=detail|&?aid=\d+|&?group_id=\d+|&?atid=\d+){4}"
|
r"https?://(?:www\.)?(?:sourceforge|sf)\.net/tracker/(?:index\.php)?\?(?:&?func=detail|&?aid=\d+|&?group_id=\d+|&?atid=\d+){4}"
|
||||||
if not self.snarfers['tracker']:
|
if not self.toggles.get('tracker', channel=msg.args[0]):
|
||||||
return
|
return
|
||||||
url = match.group(0)
|
url = match.group(0)
|
||||||
fd = urllib2.urlopen(url)
|
fd = urllib2.urlopen(url)
|
||||||
|
@ -88,14 +88,14 @@ class SourceforgeTest(PluginTestCase, PluginDocumentation):
|
|||||||
self.assertNoResponse('https://sourceforge.net/tracker/?'\
|
self.assertNoResponse('https://sourceforge.net/tracker/?'\
|
||||||
'group_id=58965&atid=489447')
|
'group_id=58965&atid=489447')
|
||||||
|
|
||||||
def testDisablesfsnarfer(self):
|
def testToggle(self):
|
||||||
s = r'.*Status.*: \w+'
|
s = r'.*Status.*: \w+'
|
||||||
self.assertRegexp('http://sourceforge.net/tracker/index.php?'\
|
self.assertRegexp('http://sourceforge.net/tracker/index.php?'\
|
||||||
'func=detail&aid=540223&group_id=235&atid=300235', s)
|
'func=detail&aid=540223&group_id=235&atid=300235', s)
|
||||||
self.assertNotError('togglesnarfer tracker off')
|
self.assertNotError('Sourceforge toggle tracker off')
|
||||||
self.assertNoResponse('http://sourceforge.net/tracker/index.php?'\
|
self.assertNoResponse('http://sourceforge.net/tracker/index.php?'\
|
||||||
'func=detail&aid=540223&group_id=235&atid=300235')
|
'func=detail&aid=540223&group_id=235&atid=300235')
|
||||||
self.assertNotError('togglesnarfer tracker on')
|
self.assertNotError('Sourceforge toggle tracker on')
|
||||||
self.assertRegexp('http://sourceforge.net/tracker/index.php?'\
|
self.assertRegexp('http://sourceforge.net/tracker/index.php?'\
|
||||||
'func=detail&aid=540223&group_id=235&atid=300235', s)
|
'func=detail&aid=540223&group_id=235&atid=300235', s)
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user