X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~matthewv/git?a=blobdiff_plain;f=config.py~;fp=config.py~;h=5701288ab9c8494c48195f76a0f2f7e04c98c62c;hb=9a8c6f919c6e2df251c611630a1d4bdfb4205548;hp=0000000000000000000000000000000000000000;hpb=93a72f4dd06f9e0d1a6fe1857710e0c961603f91;p=irc.git diff --git a/config.py~ b/config.py~ new file mode 100644 index 0000000..5701288 --- /dev/null +++ b/config.py~ @@ -0,0 +1,172 @@ +# This file is part of Acrobat. +# +# Acrobat 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 2 of the License, +# or (at your option) any later version. +# +# Acrobat 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 Acrobat; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 +# USA. + +# Andrew Walkingshaw +# Peter Corbett +# Matthew Vernon +# Stephen Early + +# Acrobat configuration file + +# The following definitions are required to be present in this module: +server = "rapun" +port = 6667 +nickname = "Testbot" +channel = "#test" +owner = "Emperor" +# Also a function called "command"; see later. + +# Everything else in this file is configuration-specific. + +# Most command implementations are stored in a separate module. +import commands as c + +# This fishpond is shared between trouts and flirts. It doesn't have to be; +# you can define as many ponds as you like. +class fish: + cur_fish=5 + max_fish=5 + nofish_time=60 + fish_time_inc=60 + fish_inc=2 + DoS=0 + Boring_Git='Nobody' + quotatime=0 + +# load a file full of flirts or trouts +def __load(filename): + try: + f = open(filename, "r") + r = [l.strip() for l in f.readlines() if l.find("%s") != -1] + f.close() + except IOError: + r = [ "doesn't know what to do about %s." ] + return r + +# (troutlist,selftroutmsg,DoSmsg,notargetmsg,nofishmsg,fishpond,selftroutprob) +troutcfg = ( + __load("trouts"), + ' (at the instigation of %s)', + "Sorry, but %s is being a spoilsport.", + "Who do you wish me to trout?", + "Fish stocks exhausted.", + fish, + 0.1) + +flirtcfg = ( + __load("flirts"), + ' (but %s is their secret admirer)', + "Sorry, but %s made me take Holy Orders.", + "Who do you wish me to flirt with?", + "My libido is over-used!", + fish, + 0.1) + +# Hacky command to output the current fishpond state +def fishq(bot, cmd, nick, conn, public,f): + from irclib import irc_lower + if not public and irc_lower(nick) == irc_lower(bot.owner): + state=("Fishpond state: cur_fish=%d, max_fish=%d, nofish_time=%d, " + +"fish_time_inc=%d, fish_inc=%d, DoS=%d, Boring_Git=%s, " + +"quotatime=%d")%(f.cur_fish,f.max_fish,f.nofish_time, + f.fish_time_inc,f.fish_inc,f.DoS,f.Boring_Git, + f.quotatime) + bot.automsg(public,nick,state) + +# Karma implementation +import cPickle +karmafilename = "karmadump" +# load the karma db +try: + f = open(karmafilename, "r") + karmadb = cPickle.load(f) + f.close() +except IOError: + karmadb = {} +# Modify karma +def karma(cmd, amount): + thing=cmd.split()[0][:-2].lower() + if karmadb.has_key(thing): + karmadb[thing] += amount + else: + karmadb[thing] = amount +def savekarma(): + try: + f = open(karmafilename, "w") + cPickle.dump(karmadb, f) + f.close() + except IOError: + sys.stderr.write("Problems dumping karma: probably lost :(") + +# When the bot exits we should save the karma db +def quit(bot,cmd,nick,conn,public): + savekarma() + c.quitq(bot,cmd,nick,conn,public) +def reload(bot,cmd,nick,conn,public): + savekarma() + c.reloadq(bot,cmd,nick,conn,public) + +# Command processing: whenever something is said that the bot can hear, +# "command" is invoked and must decide what to do. This configuration +# defines a couple of special cases (for karma) but is otherwise driven +# by a dictionary of commands. + +commands = {"karma": (c.karmaq,karmadb), + "karmalist": (c.listkeysq,karmadb), + "karmadel": (c.karmadelq,karmadb), + "info": (c.infoq,karmadb), + "trout": (c.troutq,troutcfg), + "flirt": (c.troutq,flirtcfg), + "fish": (fishq,fish), + "quiet": (c.nofishq,fish), + "reload": reload, + "quit": quit, + "google": c.googleq, + "say": c.sayq, + "do": c.doq } +# disconnect and hop annoy people +# "disconnect": c.disconnq, +# "hop": c.disconnq } +commands["list"]=(c.listkeysq,commands) + +triggers = ("!", "~") # what character should the bot be invoked by: + # eg !trout, ~trout etc. + +def command(bot, cmd, nick, conn, public): + ours=0 + try: + if public and cmd[0] in triggers: + ours=1 + cmd=cmd[1:] + if not public: + ours=1 + command = cmd.split()[0] + except IndexError: + command="" + # karma: up + if command.endswith("++"): + karma(cmd,1) + # karma: down + if command.endswith("--"): + karma(cmd,-1) + + if ours and command.lower() in commands.keys(): + e=commands[command] + if callable(e): + e(bot,cmd,nick,conn,public) + else: + e[0](bot,cmd,nick,conn,public,*e[1:])