From f4def0f89ebcf79719c2f0dcb744db89d8f882a7 Mon Sep 17 00:00:00 2001 From: Daniel DiPaolo Date: Wed, 2 Feb 2005 07:21:21 +0000 Subject: [PATCH] Conversion of Lart to new plugin format --- plugins/Lart/README.txt | 1 + plugins/Lart/__init__.py | 61 +++++++++++++++++++++++++++ plugins/Lart/config.py | 51 +++++++++++++++++++++++ plugins/Lart/plugin.py | 90 ++++++++++++++++++++++++++++++++++++++++ plugins/Lart/test.py | 41 ++++++++++++++++++ setup.py | 1 + 6 files changed, 245 insertions(+) create mode 100644 plugins/Lart/README.txt create mode 100644 plugins/Lart/__init__.py create mode 100644 plugins/Lart/config.py create mode 100644 plugins/Lart/plugin.py create mode 100644 plugins/Lart/test.py diff --git a/plugins/Lart/README.txt b/plugins/Lart/README.txt new file mode 100644 index 000000000..d60b47a97 --- /dev/null +++ b/plugins/Lart/README.txt @@ -0,0 +1 @@ +Insert a description of your plugin here, with any notes, etc. about using it. diff --git a/plugins/Lart/__init__.py b/plugins/Lart/__init__.py new file mode 100644 index 000000000..b5c2e8e7c --- /dev/null +++ b/plugins/Lart/__init__.py @@ -0,0 +1,61 @@ +### +# Copyright (c) 2005, Daniel DiPaolo +# All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions are met: +# +# * Redistributions of source code must retain the above copyright notice, +# this list of conditions, and the following disclaimer. +# * Redistributions in binary form must reproduce the above copyright notice, +# this list of conditions, and the following disclaimer in the +# documentation and/or other materials provided with the distribution. +# * Neither the name of the author of this software nor the name of +# contributors to this software may be used to endorse or promote products +# derived from this software without specific prior written consent. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +# ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE +# LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +# POSSIBILITY OF SUCH DAMAGE. +### + +""" +This plugin keeps a database of larts, and larts with it. +""" + +import supybot +import supybot.world as world + +# Use this for the version of this plugin. You may wish to put a CVS keyword +# in here if you're keeping the plugin in CVS or some similar system. +__version__ = "%%VERSION%%" + +# XXX Replace this with an appropriate author or supybot.Author instance. +__author__ = supybot.authors.strike + +# This is a dictionary mapping supybot.Author instances to lists of +# contributions. +__contributors__ = {} + +import config +import plugin +reload(plugin) # In case we're being reloaded. +# Add more reloads here if you add third-party modules and want them to be +# reloaded when this plugin is reloaded. Don't forget to import them as well! + +if world.testing: + import test + +Class = plugin.Class +configure = config.configure + + +# vim:set shiftwidth=4 tabstop=8 expandtab textwidth=78: diff --git a/plugins/Lart/config.py b/plugins/Lart/config.py new file mode 100644 index 000000000..c7b524712 --- /dev/null +++ b/plugins/Lart/config.py @@ -0,0 +1,51 @@ +### +# Copyright (c) 2005, Daniel DiPaolo +# All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions are met: +# +# * Redistributions of source code must retain the above copyright notice, +# this list of conditions, and the following disclaimer. +# * Redistributions in binary form must reproduce the above copyright notice, +# this list of conditions, and the following disclaimer in the +# documentation and/or other materials provided with the distribution. +# * Neither the name of the author of this software nor the name of +# contributors to this software may be used to endorse or promote products +# derived from this software without specific prior written consent. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +# ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE +# LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +# POSSIBILITY OF SUCH DAMAGE. +### + +import supybot.conf as conf +import supybot.registry as registry + +def configure(advanced): + # This will be called by supybot to configure this module. advanced is + # a bool that specifies whether the user identified himself as an advanced + # user or not. You should effect your configuration by manipulating the + # registry as appropriate. + from supybot.questions import expect, anything, something, yn + conf.registerPlugin('Lart', True) + + +Lart = conf.registerPlugin('Lart') +# This is where your configuration variables (if any) should go. For example: +# conf.registerGlobalValue(Lart, 'someConfigVariableName', +# registry.Boolean(False, """Help for someConfigVariableName.""")) +conf.registerChannelValue(Lart, 'showIds', + registry.Boolean(False, """Determines whether the bot will show the ids of + a lart when the lart is given.""")) + + +# vim:set shiftwidth=4 tabstop=8 expandtab textwidth=78 diff --git a/plugins/Lart/plugin.py b/plugins/Lart/plugin.py new file mode 100644 index 000000000..df73c6c35 --- /dev/null +++ b/plugins/Lart/plugin.py @@ -0,0 +1,90 @@ +### +# Copyright (c) 2005, Daniel DiPaolo +# All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions are met: +# +# * Redistributions of source code must retain the above copyright notice, +# this list of conditions, and the following disclaimer. +# * Redistributions in binary form must reproduce the above copyright notice, +# this list of conditions, and the following disclaimer in the +# documentation and/or other materials provided with the distribution. +# * Neither the name of the author of this software nor the name of +# contributors to this software may be used to endorse or promote products +# derived from this software without specific prior written consent. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +# ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE +# LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +# POSSIBILITY OF SUCH DAMAGE. +### + +import re + +from supybot.commands import * +import supybot.plugins as plugins +import supybot.ircutils as ircutils + +class Lart(plugins.ChannelIdDatabasePlugin): + _meRe = re.compile(r'\bme\b', re.I) + _myRe = re.compile(r'\bmy\b', re.I) + def _replaceFirstPerson(self, s, nick): + s = self._meRe.sub(nick, s) + s = self._myRe.sub('%s\'s' % nick, s) + return s + + def addValidator(self, irc, text): + if '$who' not in text: + irc.error('Larts must contain $who.', Raise=True) + + def lart(self, irc, msg, args, channel, id, text): + """[] [] [for ] + + Uses the Luser Attitude Readjustment Tool on (for , + if given). If is given, uses that specific lart. is + only necessary if the message isn't sent in the channel itself. + """ + if ' for ' in text: + (target, reason) = map(str.strip, text.split(' for ', 1)) + else: + (target, reason) = (text, '') + if id is not None: + try: + lart = self.db.get(channel, id) + except KeyError: + irc.error(format('There is no lart with id #%i.', id)) + return + else: + lart = self.db.random(channel) + if not lart: + irc.error(format('There are no larts in my database ' + 'for %s.', channel)) + return + text = self._replaceFirstPerson(lart.text, msg.nick) + if ircutils.strEqual(target, irc.nick): + target = msg.nick + reason = self._replaceFirstPerson('trying to dis me', irc.nick) + else: + target = self._replaceFirstPerson(target, msg.nick) + reason = self._replaceFirstPerson(reason, msg.nick) + if target.endswith('.'): + target = target.rstrip('.') + text = text.replace('$who', target) + if reason: + text += ' for ' + reason + if self.registryValue('showIds', channel): + text += format(' (#%i)', lart.id) + irc.reply(text, action=True) + lart = wrap(lart, ['channeldb', optional('id'), 'text']) + +Class = Lart + +# vim:set shiftwidth=4 tabstop=8 expandtab textwidth=78: diff --git a/plugins/Lart/test.py b/plugins/Lart/test.py new file mode 100644 index 000000000..d452c68bb --- /dev/null +++ b/plugins/Lart/test.py @@ -0,0 +1,41 @@ +### +# Copyright (c) 2005, Daniel DiPaolo +# All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions are met: +# +# * Redistributions of source code must retain the above copyright notice, +# this list of conditions, and the following disclaimer. +# * Redistributions in binary form must reproduce the above copyright notice, +# this list of conditions, and the following disclaimer in the +# documentation and/or other materials provided with the distribution. +# * Neither the name of the author of this software nor the name of +# contributors to this software may be used to endorse or promote products +# derived from this software without specific prior written consent. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +# ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE +# LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +# POSSIBILITY OF SUCH DAMAGE. +### + +from supybot.test import * + +class LartTestCase(PluginTestCase): + plugins = ('Lart',) + + def testAdd(self): + self.assertError('lart add foo') # needs $who + + def testPraise(self): + self.assertError('lart foo') # no praises! + +# vim:set shiftwidth=4 tabstop=8 expandtab textwidth=78: diff --git a/setup.py b/setup.py index 943da0672..a8ed666c3 100644 --- a/setup.py +++ b/setup.py @@ -44,6 +44,7 @@ plugins = [ 'Google', 'Herald', 'Internet', + 'Lart', 'Later', 'Math', 'Network',