mirror of
				https://github.com/Mikaela/Limnoria.git
				synced 2025-10-31 07:37:22 +01:00 
			
		
		
		
	Add Dunno plugin from supybot-plugins package
Signed-off-by: James Vega <jamessan@users.sourceforge.net>
This commit is contained in:
		
							parent
							
								
									2b09c70bc3
								
							
						
					
					
						commit
						f3a1e36727
					
				
							
								
								
									
										1
									
								
								plugins/Dunno/README.txt
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										1
									
								
								plugins/Dunno/README.txt
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1 @@ | ||||
| Insert a description of your plugin here, with any notes, etc. about using it. | ||||
							
								
								
									
										64
									
								
								plugins/Dunno/__init__.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										64
									
								
								plugins/Dunno/__init__.py
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,64 @@ | ||||
| ### | ||||
| # Copyright (c) 2003-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. | ||||
| ### | ||||
| 
 | ||||
| """ | ||||
| The Dunno module is used to spice up the reply when given an invalid command | ||||
| with random 'I dunno'-like responses.  If you want something spicier than | ||||
| '<x> is not a valid command'-like responses, use this plugin. | ||||
| """ | ||||
| 
 | ||||
| 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__ = "0.1" | ||||
| 
 | ||||
| __author__ = supybot.authors.strike | ||||
| 
 | ||||
| # This is a dictionary mapping supybot.Author instances to lists of | ||||
| # contributions. | ||||
| __contributors__ = { | ||||
|     supybot.authors.jemfinch: ['Flatfile DB implementation.'], | ||||
|     } | ||||
| 
 | ||||
| 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 softtabstop=4 expandtab textwidth=79: | ||||
							
								
								
									
										48
									
								
								plugins/Dunno/config.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										48
									
								
								plugins/Dunno/config.py
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,48 @@ | ||||
| ### | ||||
| # Copyright (c) 2003-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('Dunno', True) | ||||
| 
 | ||||
| 
 | ||||
| Dunno = conf.registerPlugin('Dunno') | ||||
| conf.registerChannelValue(Dunno, 'prefixNick', | ||||
|     registry.Boolean(True, """Determines whether the bot will prefix the nick | ||||
|     of the user giving an invalid command to the "dunno" response.""")) | ||||
| 
 | ||||
| 
 | ||||
| # vim:set shiftwidth=4 softtabstop=4 expandtab textwidth=79: | ||||
							
								
								
									
										57
									
								
								plugins/Dunno/plugin.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										57
									
								
								plugins/Dunno/plugin.py
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,57 @@ | ||||
| ### | ||||
| # Copyright (c) 2003-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.commands import * | ||||
| import supybot.plugins as plugins | ||||
| import supybot.ircutils as ircutils | ||||
| 
 | ||||
| class Dunno(plugins.ChannelIdDatabasePlugin): | ||||
|     """This plugin was written initially to work with MoobotFactoids, the two | ||||
|     of them to provide a similar-to-moobot-and-blootbot interface for factoids. | ||||
|     Basically, it replaces the standard 'Error: <x> is not a valid command.' | ||||
|     messages with messages kept in a database, able to give more personable | ||||
|     responses.""" | ||||
| 
 | ||||
|     callAfter = ['MoobotFactoids', 'Factoids', 'Infobot'] | ||||
|     def invalidCommand(self, irc, msg, tokens): | ||||
|         channel = msg.args[0] | ||||
|         if irc.isChannel(channel): | ||||
|             dunno = self.db.random(channel) | ||||
|             if dunno is not None: | ||||
|                 dunno = dunno.text | ||||
|                 prefixNick = self.registryValue('prefixNick', channel) | ||||
|                 env = {'command': tokens[0]} | ||||
|                 dunno = ircutils.standardSubstitute(irc, msg, dunno, env=env) | ||||
|                 irc.reply(dunno, prefixNick=prefixNick) | ||||
| 
 | ||||
| 
 | ||||
| Class = Dunno | ||||
| 
 | ||||
| 
 | ||||
| # vim:set shiftwidth=4 softtabstop=4 expandtab textwidth=79: | ||||
							
								
								
									
										78
									
								
								plugins/Dunno/test.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										78
									
								
								plugins/Dunno/test.py
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,78 @@ | ||||
| ### | ||||
| # Copyright (c) 2003-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 DunnoTestCase(ChannelPluginTestCase): | ||||
|     plugins = ('Dunno', 'User') | ||||
|     def setUp(self): | ||||
|         PluginTestCase.setUp(self) | ||||
|         self.prefix = 'foo!bar@baz' | ||||
|         self.assertNotError('register tester moo', private=True) | ||||
| 
 | ||||
|     def testDunnoAdd(self): | ||||
|         self.assertNotError('dunno add moo') | ||||
|         self.assertResponse('asdfagagfosdfk', 'moo') | ||||
| 
 | ||||
|     def testDunnoRemove(self): | ||||
|         self.assertNotError('dunno add moo') | ||||
|         self.assertNotError('dunno remove 1') | ||||
| 
 | ||||
|     def testDunnoSearch(self): | ||||
|         self.assertNotError('dunno add foo') | ||||
|         self.assertRegexp('dunno search moo', 'No.*dunnos.*found') | ||||
|         # Test searching using just the getopts | ||||
|         self.assertRegexp('dunno search --regexp m/foo/', r'1 found') | ||||
|         self.assertNotError('dunno add moo') | ||||
|         self.assertRegexp('dunno search moo', r'1 found') | ||||
|         self.assertRegexp('dunno search m', r'1 found') | ||||
|         # Test multiple adds | ||||
|         for i in range(5): | ||||
|             self.assertNotError('dunno add moo%s' % i) | ||||
|         self.assertRegexp('dunno search moo', r'6 found') | ||||
| 
 | ||||
|     def testDunnoGet(self): | ||||
|         self.assertNotError('dunno add moo') | ||||
|         self.assertRegexp('dunno get 1', r'#1.*moo') | ||||
|         self.assertNotError('dunno add $who') | ||||
|         self.assertRegexp('dunno get 2', r'#2.*\$who') | ||||
|         self.assertError('dunno get 3') | ||||
|         self.assertError('dunno get a') | ||||
| 
 | ||||
|     def testDunnoChange(self): | ||||
|         self.assertNotError('dunno add moo') | ||||
|         self.assertNotError('dunno change 1 s/moo/bar/') | ||||
|         self.assertRegexp('dunno get 1', '.*?: [\'"]bar[\'"]') | ||||
| 
 | ||||
|     def testDollarCommand(self): | ||||
|         self.assertNotError("dunno add I can't $command.") | ||||
|         self.assertResponse('asdf', "I can't asdf.") | ||||
| 
 | ||||
| 
 | ||||
| # vim:set shiftwidth=4 softtabstop=4 expandtab textwidth=79: | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user
	 James Vega
						James Vega