convert to/standardize docstrings a bit.
this got boring fast, so it's only half done
This commit is contained in:
parent
247719814e
commit
acca8723b3
|
@ -24,13 +24,11 @@ from extlib import irclib
|
|||
from Module import Module
|
||||
|
||||
class Alias(Module):
|
||||
"""
|
||||
Allows for commands to be aliased as !command, circumventing bot addressing stuff.
|
||||
"""
|
||||
|
||||
"""Alias commands as !command, circumventing bot addressing stuff."""
|
||||
|
||||
def do(self, connection, event, nick, userhost, replypath, what, admin_unlocked):
|
||||
"""
|
||||
See if there is an alias ("!command") in the text, and if so, translate it into
|
||||
"""See if there is an alias ("!command") in the text, and if so, translate it into
|
||||
an internal bot command and run it.
|
||||
"""
|
||||
|
||||
|
@ -99,8 +97,8 @@ class Alias(Module):
|
|||
except NoSectionError: pass
|
||||
|
||||
def try_recursion(self, connection, event, nick, userhost, replypath, what, admin_unlocked):
|
||||
"""
|
||||
Scan message for subcommands to execute and use as part of this command.
|
||||
"""Scan message for subcommands to execute and use as part of this command.
|
||||
|
||||
Upon seeing a line intended for this module, see if there are subcommands
|
||||
that we should do what is basically a text replacement on. The intent is to
|
||||
allow things like the following:
|
||||
|
|
|
@ -1,18 +1,20 @@
|
|||
# Countdown - track and display time until events
|
||||
# Copyright (C) 2010 Brian S. Stephan
|
||||
#
|
||||
# This program is free software: you can redistribute it and/or modify
|
||||
# it under the terms of the GNU General Public License as published by
|
||||
# the Free Software Foundation, either version 3 of the License, or
|
||||
# (at your option) any later version.
|
||||
#
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
# GNU General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU General Public License
|
||||
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
"""
|
||||
Countdown - track and display time until events
|
||||
Copyright (C) 2010 Brian S. Stephan
|
||||
|
||||
This program is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation, either version 3 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
"""
|
||||
|
||||
from ConfigParser import NoOptionError, NoSectionError
|
||||
from datetime import datetime
|
||||
|
@ -24,11 +26,13 @@ from extlib import irclib
|
|||
|
||||
from Module import Module
|
||||
|
||||
# Class that adds a countdown item to the bot
|
||||
|
||||
class Countdown(Module):
|
||||
|
||||
"""Class that adds a countdown item to the bot."""
|
||||
|
||||
def do(self, connection, event, nick, userhost, replypath, what, admin_unlocked):
|
||||
"""Add/retrieve countdown items."""
|
||||
|
||||
whats = what.split(' ')
|
||||
if whats[0] == 'countdown' and len(whats) >= 2:
|
||||
if whats[1] == 'add' and len(whats) >= 4:
|
||||
|
|
|
@ -1,18 +1,20 @@
|
|||
# Dice - roll dice when asked, intended for RPGs
|
||||
# Copyright (C) 2010 Brian S. Stephan
|
||||
#
|
||||
# This program is free software: you can redistribute it and/or modify
|
||||
# it under the terms of the GNU General Public License as published by
|
||||
# the Free Software Foundation, either version 3 of the License, or
|
||||
# (at your option) any later version.
|
||||
#
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
# GNU General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU General Public License
|
||||
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
"""
|
||||
Dice - roll dice when asked, intended for RPGs
|
||||
Copyright (C) 2010 Brian S. Stephan
|
||||
|
||||
This program is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation, either version 3 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
"""
|
||||
|
||||
import math
|
||||
import re
|
||||
|
@ -25,10 +27,10 @@ from Module import Module
|
|||
import ply.lex as lex
|
||||
import ply.yacc as yacc
|
||||
|
||||
# Rolls dice, for RPGs mostly
|
||||
|
||||
class Dice(Module):
|
||||
|
||||
"""Roll simple or complex dice strings."""
|
||||
|
||||
tokens = ['NUMBER', 'TEXT']
|
||||
literals = ['#', '/', '+', '-', 'd', ';']
|
||||
|
||||
|
@ -56,9 +58,11 @@ class Dice(Module):
|
|||
|
||||
output = ""
|
||||
|
||||
# Takes the parsed dice string for a single roll (eg 3/4d20) and performs
|
||||
# the actual roll. Returns a string representing the result
|
||||
def roll_dice(self, keep, dice, size):
|
||||
"""Takes the parsed dice string for a single roll (eg 3/4d20) and performs
|
||||
the actual roll. Returns a string representing the result.
|
||||
"""
|
||||
|
||||
a = range(dice)
|
||||
for i in range(dice):
|
||||
a[i] = random.randint(1, size)
|
||||
|
@ -82,10 +86,14 @@ class Dice(Module):
|
|||
|
||||
return (total, outstr)
|
||||
|
||||
# Processes rolls coming from the parser. This generates the inputs
|
||||
# for the roll_dice() command, and returns the full string representing
|
||||
# the whole current dice string (the part up to a semicolon or end of line)
|
||||
def process_roll(self, trials, mods, comment):
|
||||
"""Processes rolls coming from the parser.
|
||||
|
||||
This generates the inputs for the roll_dice() command, and returns
|
||||
the full string representing the whole current dice string (the part
|
||||
up to a semicolon or end of line).
|
||||
"""
|
||||
|
||||
output = ""
|
||||
repeat = 1
|
||||
if trials != None:
|
||||
|
@ -129,18 +137,22 @@ class Dice(Module):
|
|||
output = "%s: %s" % (comment.strip(), output)
|
||||
return output
|
||||
|
||||
# General idea I had when creating this grammar: A roll string is a chain
|
||||
# of modifiers, which may be repeated for a certain number of trials. It can
|
||||
# have a comment that describes the roll
|
||||
# Multiple roll strings can be chained with semicolon
|
||||
def p_roll_r(self, p):
|
||||
"""Chain rolls together."""
|
||||
|
||||
# General idea I had when creating this grammar: A roll string is a chain
|
||||
# of modifiers, which may be repeated for a certain number of trials. It can
|
||||
# have a comment that describes the roll
|
||||
# Multiple roll strings can be chained with semicolon
|
||||
|
||||
'roll : roll ";" roll'
|
||||
global output
|
||||
p[0] = p[1] + "; " + p[3]
|
||||
output = p[0]
|
||||
|
||||
# The basic roll string
|
||||
def p_roll(self, p):
|
||||
"""Parse a basic roll string."""
|
||||
|
||||
'roll : trial modifier comment'
|
||||
global output
|
||||
mods = []
|
||||
|
@ -151,8 +163,9 @@ class Dice(Module):
|
|||
p[0] = self.process_roll(p[1], mods, p[3])
|
||||
output = p[0]
|
||||
|
||||
# Trial is optional so have a rule without it
|
||||
def p_roll_no_trials(self, p):
|
||||
"""Parse a roll string without trials."""
|
||||
|
||||
'roll : modifier comment'
|
||||
global output
|
||||
mods = []
|
||||
|
@ -164,6 +177,8 @@ class Dice(Module):
|
|||
output = p[0]
|
||||
|
||||
def p_comment(self, p):
|
||||
"""Parse a comment."""
|
||||
|
||||
'''comment : TEXT
|
||||
|'''
|
||||
if len(p) == 2:
|
||||
|
@ -172,6 +187,8 @@ class Dice(Module):
|
|||
p[0] = None
|
||||
|
||||
def p_modifier(self, p):
|
||||
"""Parse a modifier on a roll string."""
|
||||
|
||||
'''modifier : modifier "+" modifier
|
||||
| modifier "-" modifier'''
|
||||
# Use append to prevent nested lists (makes dealing with this easier)
|
||||
|
@ -186,8 +203,9 @@ class Dice(Module):
|
|||
else:
|
||||
p[0] = [p[1], p[2], p[3]]
|
||||
|
||||
# Return the left side before the "d", and the number of faces
|
||||
def p_die(self, p):
|
||||
"""Return the left side before the "d", and the number of faces."""
|
||||
|
||||
'modifier : left NUMBER'
|
||||
p[0] = (p[1], p[2])
|
||||
|
||||
|
@ -195,8 +213,8 @@ class Dice(Module):
|
|||
'modifier : NUMBER'
|
||||
p[0] = p[1]
|
||||
|
||||
# left is the number of dice we are rolling, and how many we are keeping
|
||||
def p_left(self, p):
|
||||
"""Parse the number of dice we are rolling, and how many we are keeping."""
|
||||
'left : keep dice'
|
||||
if p[1] == None:
|
||||
p[0] = [None, p[2]]
|
||||
|
@ -233,8 +251,8 @@ class Dice(Module):
|
|||
'dice : "d"'
|
||||
p[0] = 1
|
||||
|
||||
# Provide the user with something (albeit not much) when the roll can't be parsed
|
||||
def p_error(self, p):
|
||||
"""Provide the user with something (albeit not much) when the roll can't be parsed."""
|
||||
global output
|
||||
output = "Unable to parse roll"
|
||||
|
||||
|
|
|
@ -21,11 +21,12 @@ from extlib import irclib
|
|||
from Module import Module
|
||||
|
||||
class Echo(Module):
|
||||
"""
|
||||
Repeat provided text, for random internal use, mostly.
|
||||
"""
|
||||
|
||||
"""Repeat provided text."""
|
||||
|
||||
def do(self, connection, event, nick, userhost, replypath, what, admin_unlocked):
|
||||
"""Repeat provided text."""
|
||||
|
||||
whats = what.split(' ')
|
||||
if whats[0] == 'echo' and len(whats) >= 2:
|
||||
return self.reply(connection, replypath, ' '.join(whats[1:]))
|
||||
|
|
|
@ -23,6 +23,7 @@ from extlib import irclib
|
|||
from Module import Module
|
||||
|
||||
class EightBall(Module):
|
||||
|
||||
"""Return a random answer when asked a question."""
|
||||
|
||||
def __init__(self, config, server, modlist):
|
||||
|
|
|
@ -1,18 +1,20 @@
|
|||
# FactFile - display facts from a flat file upon request
|
||||
# Copyright (C) 2010 Brian S. Stephan
|
||||
#
|
||||
# This program is free software: you can redistribute it and/or modify
|
||||
# it under the terms of the GNU General Public License as published by
|
||||
# the Free Software Foundation, either version 3 of the License, or
|
||||
# (at your option) any later version.
|
||||
#
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
# GNU General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU General Public License
|
||||
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
"""
|
||||
FactFile - display facts from a flat file upon request
|
||||
Copyright (C) 2010 Brian S. Stephan
|
||||
|
||||
This program is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation, either version 3 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
"""
|
||||
|
||||
from ConfigParser import NoOptionError
|
||||
import os
|
||||
|
@ -23,11 +25,13 @@ from extlib import irclib
|
|||
|
||||
from Module import Module
|
||||
|
||||
# Returns a random fact/quote/whatever from one or more files
|
||||
|
||||
class FactFile(Module):
|
||||
|
||||
"""Return a random fact/quote/whatever from one or more files."""
|
||||
|
||||
def do(self, connection, event, nick, userhost, replypath, what, admin_unlocked):
|
||||
"""Search for a fact, or return a random one."""
|
||||
|
||||
whats = what.split(' ')
|
||||
try:
|
||||
filename = self.config.get(self.__class__.__name__, whats[0])
|
||||
|
|
|
@ -25,15 +25,14 @@ from extlib import irclib
|
|||
from Module import Module
|
||||
|
||||
class Facts(Module):
|
||||
"""
|
||||
Select a fact from the database. Facts are categorized by a name,
|
||||
which may allow for random selection and so on.
|
||||
|
||||
"""Select a fact from the database.
|
||||
|
||||
Facts are categorized by a name, which may allow for random selection and so on.
|
||||
"""
|
||||
|
||||
def db_init(self):
|
||||
"""
|
||||
Initialize database tables.
|
||||
"""
|
||||
"""Initialize database tables."""
|
||||
|
||||
# init the database if module isn't registered
|
||||
version = self.db_module_registered(self.__class__.__name__)
|
||||
|
@ -58,6 +57,8 @@ class Facts(Module):
|
|||
raise
|
||||
|
||||
def do(self, connection, event, nick, userhost, replypath, what, admin_unlocked):
|
||||
"""Add or retrieve a fact from the database."""
|
||||
|
||||
whats = what.split(' ')
|
||||
|
||||
if whats[0] == 'facts' and len(whats) >= 2:
|
||||
|
|
|
@ -1,18 +1,20 @@
|
|||
# GoogleTranslate - go out to google and translate sentences
|
||||
# Copyright (C) 2010 Brian S. Stephan
|
||||
#
|
||||
# This program is free software: you can redistribute it and/or modify
|
||||
# it under the terms of the GNU General Public License as published by
|
||||
# the Free Software Foundation, either version 3 of the License, or
|
||||
# (at your option) any later version.
|
||||
#
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
# GNU General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU General Public License
|
||||
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
"""
|
||||
GoogleTranslate - go out to google and translate sentences
|
||||
Copyright (C) 2010 Brian S. Stephan
|
||||
|
||||
This program is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation, either version 3 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
"""
|
||||
|
||||
from urllib2 import urlopen
|
||||
from urllib import urlencode
|
||||
|
@ -21,13 +23,19 @@ from extlib import irclib
|
|||
|
||||
from Module import Module
|
||||
|
||||
# Class that translates text via Google Translate.
|
||||
#
|
||||
# http://code.google.com/apis/ajaxlanguage/documentation/
|
||||
|
||||
class GoogleTranslate(Module):
|
||||
|
||||
"""Class that translates text via Google Translate.
|
||||
|
||||
http://code.google.com/apis/ajaxlanguage/documentation/
|
||||
"""
|
||||
|
||||
def do(self, connection, event, nick, userhost, replypath, what, admin_unlocked):
|
||||
"""Query Google for weather info.
|
||||
|
||||
Leaves the input alone to let google make the best guess.
|
||||
"""
|
||||
|
||||
whats = what.split(' ')
|
||||
if whats[0] == 'translate' and len(whats) >= 4:
|
||||
fromlang = whats[1]
|
||||
|
|
|
@ -1,18 +1,20 @@
|
|||
# IrcAdmin - handle normal IRC functions one would expect
|
||||
# Copyright (C) 2010 Brian S. Stephan
|
||||
#
|
||||
# This program is free software: you can redistribute it and/or modify
|
||||
# it under the terms of the GNU General Public License as published by
|
||||
# the Free Software Foundation, either version 3 of the License, or
|
||||
# (at your option) any later version.
|
||||
#
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
# GNU General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU General Public License
|
||||
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
"""
|
||||
IrcAdmin - handle normal IRC functions one would expect
|
||||
Copyright (C) 2010 Brian S. Stephan
|
||||
|
||||
This program is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation, either version 3 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
"""
|
||||
|
||||
from ConfigParser import NoOptionError
|
||||
import signal
|
||||
|
@ -22,10 +24,10 @@ from extlib import irclib
|
|||
|
||||
from Module import Module
|
||||
|
||||
# All kinds of miscellaneous irc stuff
|
||||
|
||||
class IrcAdmin(Module):
|
||||
|
||||
"""Support miscellaneous IRC stuff --- joining channels, changing the nick, etc."""
|
||||
|
||||
def register_handlers(self, server):
|
||||
server.add_global_handler('welcome', self.on_connect)
|
||||
server.add_global_handler('pubmsg', self.on_pubmsg)
|
||||
|
@ -40,8 +42,7 @@ class IrcAdmin(Module):
|
|||
self.server.remove_global_handler('privmsg', self.on_privmsg)
|
||||
|
||||
def on_connect(self, connection, event):
|
||||
"""handler for when the bot has connected to IRC
|
||||
"""
|
||||
"""Set up handlers when the bot has connected to IRC."""
|
||||
|
||||
# user modes
|
||||
try:
|
||||
|
@ -160,8 +161,8 @@ class IrcAdmin(Module):
|
|||
return self.reply(connection, replypath, replystr)
|
||||
|
||||
def sub_load_module(self, connection, event, nick, userhost, replypath, what, admin_unlocked):
|
||||
"""
|
||||
Load a module (in both the python and dr.botzo sense) if not already loaded.
|
||||
"""Load a module (in both the python and dr.botzo sense) if not
|
||||
already loaded.
|
||||
"""
|
||||
|
||||
whats = what.split(' ')
|
||||
|
@ -189,9 +190,7 @@ class IrcAdmin(Module):
|
|||
return self.reply(connection, replypath, 'Module ' + modname + ' not found.')
|
||||
|
||||
def sub_unload_module(self, connection, event, nick, userhost, replypath, what, admin_unlocked):
|
||||
"""
|
||||
Attempt to unload and del a module if it's loaded.
|
||||
"""
|
||||
"""Attempt to unload and del a module if it's loaded."""
|
||||
|
||||
whats = what.split(' ')
|
||||
modname = whats[1]
|
||||
|
@ -216,8 +215,8 @@ class IrcAdmin(Module):
|
|||
return self.reply(connection, replypath, 'Module ' + modname + ' is not loaded.')
|
||||
|
||||
def sub_reload_module(self, connection, event, nick, userhost, replypath, what, admin_unlocked):
|
||||
"""
|
||||
Attempt to reload a module, by removing it from memory and then re-initializing it.
|
||||
"""Attempt to reload a module, by removing it from memory and then
|
||||
re-initializing it.
|
||||
"""
|
||||
|
||||
whats = what.split(' ')
|
||||
|
|
Loading…
Reference in New Issue