diff --git a/plugins/URL.py b/plugins/URL.py index 2e5c910b8..b33801760 100644 --- a/plugins/URL.py +++ b/plugins/URL.py @@ -52,8 +52,8 @@ import ircmsgs import webutils import ircutils import privmsgs +import registry import callbacks -import configurable try: import sqlite @@ -61,65 +61,53 @@ except ImportError: raise callbacks.Error, 'You need to have PySQLite installed to use this ' \ 'plugin. Download it at ' -def configure(onStart, afterConnect, advanced): - # This will be called by setup.py to configure this module. onStart and - # afterConnect are both lists. Append to onStart the commands you would - # like to be run when the bot is started; append to afterConnect the - # commands you would like to be run when the bot has finished connecting. +def configure(onStart): from questions import expect, anything, something, yn - onStart.append('load URL') + conf.registerPlugin('URL', True) if yn("""This plugin offers a snarfer that will go to tinyurl.com and get a shorter version of long URLs that are sent to the channel. - Would you like this snarfer to be enabled?""") == 'y': - onStart.append('url config tinyurl-snarfer on') - if advanced: - x = anything("""What would you like to be the minimum URL length - that will trigger this snarfer?""") - if not x: - x = '46' - while True: - try: - i = int(x) - onStart.append('url config tinyurl-minimum-length %s' % i) - return - except ValueError: - print 'That\'s not a valid integer.' - x = anything("""What would you like to be the minimum URL - length that will trigger this snarfer?""") + Would you like this snarfer to be enabled?"""): + conf.supybot.plugins.URL.tinyurlSnarfer.setValue(True) + if yn("""This plugin also offers a snarfer that will try to fetch the + title of URLs that it sees in the channel. Would like you this + snarfer to be enabled?"""): + conf.supybot.plugins.URL.titleSnarfer.setValue(True) + +conf.registerPlugin('URL') +conf.registerChannelValue(conf.supybot.plugins.URL, 'tinyurlSnarfer', + registry.Boolean(False, """Determines whether the + tinyurl snarfer is enabled. This snarfer will watch for URLs in the + channel, and if they're sufficiently long (as determined by + supybot.plugins.URL.tinyurlSnarfer.minimumLength) it will post a smaller + from tinyurl.com.""")) +conf.registerChannelValue(conf.supybot.plugins.URL, 'tinyurlMaximumLength', + registry.PositiveInteger(48, """The minimum length a URL must be before the + tinyurl snarfer will snarf it.""")) +conf.registerChannelValue(conf.supybot.plugins.URL, 'titleSnarfer', + registry.Boolean(False, """Determines whether the bot will output the HTML + title of URLs it sees in the channel.""")) +conf.registerChannelValue(conf.supybot.plugins.URL, 'titleSnarferIncludesUrl', + registry.Boolean(True, """Determines whether the bot will include the + snarfed URL in its message. This is particularly useful when people have a + habit of putting multiple URLs in a message.""")) +conf.registerChannelValue(conf.supybot.plugins.URL, 'nonSnarfingRegexp', + registry.Regexp(None, """Determines what URLs are to be snarfed and stored + in the database in the channel; URLs matchin the regexp given will not be + snarfed. Give the empty string if you have no URLs that you'd like to + exclude from being snarfed.""")) class URL(callbacks.PrivmsgCommandAndRegexp, - configurable.Mixin, plugins.ChannelDBHandler): regexps = ['tinyurlSnarfer', 'titleSnarfer'] - configurables = configurable.Dictionary( - [('tinyurl-snarfer', configurable.BoolType, False, - """Determines whether the bot will output shorter versions of URLs - longer than the tinyurl-minimum-length config variable."""), - ('tinyurl-minimum-length', configurable.IntType, 46, - """The minimum length a URL must be before the tinyurl-snarfer will - snarf it and offer a tinyurl replacement."""), - ('title-snarfer', configurable.BoolType, False, - """Determines whether the bot will output the HTML title of URLs it - sees in the channel."""), - ('title-snarfer-includes-url', configurable.BoolType, True, - """Determines whether the bot will include the snarfed URL in its - title-snarfer response. This is particularly useful when people - have a habit of putting multiple URLs in a message."""), - ('non-snarfing-regexp', configurable.RegexpStrType, None, - """A regular expression that should match URLs that should not be - snarfed. Give an empty string to have no regular expression."""),] - ) _titleRe = re.compile('(.*?)', re.I) maxSize = 4096 def __init__(self): self.nextMsgs = {} callbacks.PrivmsgCommandAndRegexp.__init__(self) - configurable.Mixin.__init__(self) plugins.ChannelDBHandler.__init__(self) def die(self): callbacks.PrivmsgCommandAndRegexp.die(self) - configurable.Mixin.die(self) plugins.ChannelDBHandler.die(self) def makeDb(self, filename): @@ -162,7 +150,7 @@ class URL(callbacks.PrivmsgCommandAndRegexp, else: text = msg.args[1] for url in webutils.urlRe.findall(text): - r = self.configurables.get('non-snarfing-regexp', channel) + r = self.registryValue('nonSnarfingRegexp', channel) if r and r.search(url): continue (protocol, site, filename, _, _, _) = urlparse.urlparse(url) @@ -187,9 +175,9 @@ class URL(callbacks.PrivmsgCommandAndRegexp, if not ircutils.isChannel(msg.args[0]): return channel = msg.args[0] - if self.configurables.get('tinyurl-snarfer', channel): + if self.registryValue('tinyurlSnarfer', channel): url = match.group(0) - minlen = self.configurables.get('tinyurl-minimum-length', channel) + minlen = self.registryValue('tinyurlMaximumLength', channel) if len(url) >= minlen: db = self.getDb(channel) cursor = db.cursor() @@ -208,13 +196,13 @@ class URL(callbacks.PrivmsgCommandAndRegexp, if not ircutils.isChannel(msg.args[0]): return channel = msg.args[0] - if self.configurables.get('title-snarfer', channel): + if self.registryValue('titleSnarfer', channel): url = match.group(0) text = webutils.getUrl(url, size=self.maxSize) m = self._titleRe.search(text) if m is not None: s = 'Title: %s' % utils.htmlToText(m.group(1).strip()) - if self.configurables.get('titlesnarferincludesurl', channel): + if self.registryValue('titleSnarferIncludesUrl', channel): s += ' (<%s>)' % url irc.reply(s, prefixName=False) titleSnarfer = privmsgs.urlSnarfer(titleSnarfer) @@ -293,9 +281,8 @@ class URL(callbacks.PrivmsgCommandAndRegexp, 'Stop being a lazy-biotch and type the URL yourself.') return channel = msg.args[0] - snarf = self.configurables.get('tinyurl-snarfer', channel=msg.args[0]) - minlen = self.configurables.get('tinyurl-minimum-length', - channel=channel) + snarf = self.registryValue('tinyurlSnarfer', channel) + minlen = self.registryValue('tinyurlMinimumLength', channel) if snarf and len(url) >= minlen: return (tinyurl, updateDb) = self._getTinyUrl(url, channel, cmd=True)