#!/usr/bin/env python ### # Copyright (c) 2002, Jeremiah Fincher # 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. ### ### # Note the exception above the declaration of _code. ### """Module to replicate some of moobot's functionality.""" from baseplugin import * import base64 import ircmsgs import ircutils import privmsgs import callbacks class Moobot(callbacks.Privmsg): def cool(self, irc, msg, args): """ Says something's cool. Yeah. :cool: Supybot :cool: :) """ something = privmsgs.getArgs(args) irc.reply(msg, ':cool: %s :cool:' % something) # Stolen shamelessless from moobot, so I suppose this data structure is # GPLed. Don't worry, it doesn't infect the rest of the code because it's # not essential to the operation of the bot. _code = { "A" : ".- ", "B" : "-... ", "C" : "-.-. ", "D" : "-.. ", "E" : ". ", "F" : "..-. ", "G" : "--. ", "H" : ".... ", "I" : ".. ", "J" : ".--- ", "K" : "-.- ", "L" : ".-.. ", "M" : "-- ", "N" : "-. ", "O" : "--- ", "P" : ".--. ", "Q" : "--.- ", "R" : ".-. ", "S" : "... ", "T" : "- ", "U" : "..- ", "V" : "...- ", "W" : ".-- ", "X" : "-..- ", "Y" : "-.-- ", "Z" : "--.. ", "0" : "----- ", "1" : ".---- ", "2" : "..--- ", "3" : "...-- ", "4" : "....- ", "5" : "..... ", "6" : "-.... ", "7" : "--... ", "8" : "---.. ", "9" : "----. ", } _revcode = dict([(y.strip(), x) for (x, y) in _code.items()]) def unmorse(self, irc, msg, args): """ Does the reverse of the morse/ditdaw command. """ text = privmsgs.getArgs(args) L = [] for (first, second, third) in window(text.split(' ')+[''], 3): if first == '' and second == '' and third == '': L.append(' ') else: try: L.append(self._revcode[first]) except KeyError: L.append(first) irc.reply(msg, ''.join(L)) def morse(self, irc, msg, args): """ Gives the more code equivalent of a given string. """ text = privmsgs.getArgs(args) L = [] for c in text.upper(): if c in self._code: L.append(self._code[c]) else: L.append(c) irc.reply(msg, ' '.join(L)) ditdaw = morse def hi(self, irc, msg, args): "takes no arguments" irc.reply(msg, 'howdy, %s!' % msg.nick) def reverse(self, irc, msg, args): "" text = privmsgs.getArgs(args) L = list(text) L.reverse() irc.reply(msg, ''.join(L)) def mime(self, irc, msg, args): """ Encodes text in base64. Here for compatibility with Moobot; this and other encodings are available in the FunCommands module. """ text = privmsgs.getArgs(args) s = base64.encodestring(text).strip() if ircutils.validArgument(s): irc.reply(msg, s) else: irc.error(msg, 'Base64 requires a newline in that string. '\ 'Try a smaller string.') def unmime(self, irc, msg, args): """ Decodes base64 encoded text. Here for compatibility with Moobot; this and other encodings are available in the FunCommands module. """ text = privmsgs.getArgs(args) s = base64.decodestring(text) if ircutils.validArgument(s): irc.reply(msg, s) else: irc.error(msg, 'I can\'t send \\n, \\r, or \\0.') _stack = [] def stack(self, irc, msg, args): """<'push'|'pop'|'size'|'xray'> Maintains a stack of various strings; push pushes onto the stack, pop pops off it, size gives its current size, and xray takes an index into the stack and gives that element. """ (command, value) = privmsgs.getArgs(args, optional=1) if command == 'pop': if self._stack: x = self._stack.pop() irc.reply(msg, x) else: irc.error(msg, 'Stack is empty.') elif command == 'push': self._stack.append(value) irc.reply(msg, '"%s" pushed.' % value) elif command == 'size': irc.reply(msg, 'Stack size is %s.' % len(self._stack)) elif command == 'xray': i = int(value) try: irc.reply(msg, self._stack[-i]) except IndexError: irc.error(msg, 'Invalid position %s' % i) else: irc.error(msg, 'I don\'t recognize that stack command.') def give(self, irc, msg, args): """ """ (someone, something) = privmsgs.getArgs(args, needed=2) if someone == 'me': someone = msg.nick elif someone in ('yourself', 'you', irc.nick): someone = himself response = 'gives %s %s' % (someone, something) irc.queueMsg(ircmsgs.action(ircutils.reply(msg), response)) Class = Moobot