1 # This file is part of Acrobat.
3 # Acrobat is free software; you can redistribute it and/or modify
4 # it under the terms of the GNU General Public License as published
5 # by the Free Software Foundation; either version 2 of the License,
6 # or (at your option) any later version.
8 # Acrobat is distributed in the hope that it will be useful,
9 # but WITHOUT ANY WARRANTY; without even the implied warranty of
10 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11 # GNU General Public License for more details.
13 # You should have received a copy of the GNU General Public License
14 # along with Acrobat; if not, write to the Free Software
15 # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
18 # Andrew Walkingshaw <andrew@lexical.org.uk>
19 # Peter Corbett <ptc24@cam.ac.uk>
20 # Matthew Vernon <matthew@debian.org>
21 # Stephen Early <steve@greenend.org.uk>
23 # Acrobat configuration file
25 # The following definitions are required to be present in this module:
26 server = "kern.srcf.ucam.org"
29 channel = "#assassins"
31 # Also a function called "command"; see later.
33 # Everything else in this file is configuration-specific.
35 # Most command implementations are stored in a separate module.
38 # This fishpond is shared between trouts and flirts. It doesn't have to be;
39 # you can define as many ponds as you like.
40 class fish (c.FishPond):
48 # load a file full of flirts or trouts
51 f = open(filename, "r")
52 r = [l.strip() for l in f.readlines() if l.find("%s") != -1]
55 r = [ "doesn't know what to do about %s." ]
58 # (troutlist,selftroutmsg,DoSmsg,notargetmsg,nofishmsg,fishpond,selftroutprob)
61 ' (at the instigation of %s)',
62 "Sorry, but %s is being a spoilsport.",
63 "Who do you wish me to trout?",
64 "Fish stocks exhausted.",
70 ' (but %s is their secret admirer)',
71 "Sorry, but %s made me take Holy Orders.",
72 "Who do you wish me to flirt with?",
73 "My libido is over-used!",
77 # Hacky command to output the current fishpond state
78 def fishq(bot, cmd, nick, conn, public,f):
79 from irclib import irc_lower
80 if not public and irc_lower(nick) == irc_lower(bot.owner):
81 state=("Fishpond state: cur_fish=%d, max_fish=%d, nofish_time=%d, "
82 +"fish_time_inc=%d, fish_inc=%d, DoS=%d, Boring_Git=%s, "
83 +"quotatime=%d")%(f.cur_fish,f.max_fish,f.nofish_time,
84 f.fish_time_inc,f.fish_inc,f.DoS,f.Boring_Git,
86 bot.automsg(public,nick,state)
88 # Karma implementation
90 karmafilename = "karmadump.assassins"
93 f = open(karmafilename, "r")
94 karmadb = cPickle.load(f)
99 def karma(cmd, amount):
100 thing=cmd.split()[0][:-2].lower()
101 if karmadb.has_key(thing):
102 karmadb[thing] += amount
104 karmadb[thing] = amount
107 f = open(karmafilename, "w")
108 cPickle.dump(karmadb, f)
111 sys.stderr.write("Problems dumping karma: probably lost :(")
113 # When the bot exits we should save the karma db
114 def quit(bot,cmd,nick,conn,public):
116 c.quitq(bot,cmd,nick,conn,public)
117 def reload(bot,cmd,nick,conn,public):
119 c.reloadq(bot,cmd,nick,conn,public)
121 # Command processing: whenever something is said that the bot can hear,
122 # "command" is invoked and must decide what to do. This configuration
123 # defines a couple of special cases (for karma) but is otherwise driven
124 # by a dictionary of commands.
126 commands = {"karma": (c.karmaq,karmadb),
127 "karmalist": (c.listkeysq,karmadb),
128 "karmadel": (c.karmadelq,karmadb),
129 "info": (c.infoq,karmadb),
130 "trout": (c.troutq,troutcfg),
131 "fish": (fishq,fish),
132 "flirt": (c.troutq,flirtcfg),
133 "quiet": (c.nofishq,fish),
140 # disconnect and hop annoy people
141 # "disconnect": c.disconnq,
142 # "hop": c.disconnq }
143 commands["list"]=(c.listkeysq,commands)
145 triggers = ("!", "~") # what character should the bot be invoked by:
146 # eg !trout, ~trout etc.
148 def command(bot, cmd, nick, conn, public):
151 if public and cmd[0] in triggers:
156 command = cmd.split()[0]
160 if command.endswith("++"):
163 if command.endswith("--"):
166 if ours and command.lower() in commands.keys():
169 e(bot,cmd,nick,conn,public)
171 e[0](bot,cmd,nick,conn,public,*e[1:])