mirror of
https://github.com/Mikaela/Limnoria.git
synced 2024-12-18 08:02:49 +01:00
211 lines
6.7 KiB
Python
211 lines
6.7 KiB
Python
#!/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):
|
|
"""<something>
|
|
|
|
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):
|
|
"""<morse code text>
|
|
|
|
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):
|
|
"""<text>
|
|
|
|
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>"
|
|
text = privmsgs.getArgs(args)
|
|
L = list(text)
|
|
L.reverse()
|
|
irc.reply(msg, ''.join(L))
|
|
|
|
def mime(self, irc, msg, args):
|
|
"""<text>
|
|
|
|
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):
|
|
"""<text>
|
|
|
|
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'> <text>
|
|
|
|
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>"""
|
|
(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
|