+ conn.notice(nick, "What should I delete?")
+ return
+ if nick != bot.owner:
+ conn.notice(nick, "You are not my owner.")
+ return
+ if karma.has_key(item):
+ del karma[item]
+ conn.notice(nick, "Item %s deleted."%item)
+ else:
+ conn.notice(nick, "There is no karma stored for %s."%item)
+
+# help - provides the URL of the help file
+def helpq(bot, cmd, nick, conn, public):
+ bot.automsg(public,nick,
+ "For help see http://www.pick.ucam.org/~matthew/irc/servus.html")
+
+
+# query bot status
+def infoq(bot, cmd, nick, conn, public, karma):
+ bot.automsg(public,nick,
+ ("I am Acrobat %s, on %s, as nick %s. "+
+ "My owner is %s; I have karma on %s items.") %
+ (bot.revision.split()[1], bot.channel, conn.get_nickname(),
+ bot.owner, len(karma.keys())))
+
+# Check on fish stocks
+def fish_quota(pond):
+ if pond.DoS:
+ if time.time()>=pond.quotatime:
+ pond.DoS=0
+ else:
+ return
+ if (time.time()-pond.quotatime)>pond.fish_time_inc:
+ pond.cur_fish+=(((time.time()-pond.quotatime)
+ /pond.fish_time_inc)*pond.fish_inc)
+ if pond.cur_fish>pond.max_fish:
+ pond.cur_fish=pond.max_fish
+ pond.quotatime=time.time()
+
+# trout someone, or flirt with them
+def troutq(bot, cmd, nick, conn, public, cfg):
+ fishlist=cfg[0]
+ selftrout=cfg[1]
+ quietmsg=cfg[2]
+ notargetmsg=cfg[3]
+ nofishmsg=cfg[4]
+ fishpond=cfg[5]
+ selftroutchance=cfg[6]
+
+ fish_quota(fishpond)
+ if fishpond.DoS:
+ conn.notice(nick, quietmsg%fishpond.Boring_Git)
+ return
+ if fishpond.cur_fish<=0:
+ conn.notice(nick, nofishmsg)
+ return
+ target = string.join(cmd.split()[1:])
+ if len(target)==0:
+ conn.notice(nick, notargetmsg)
+ return
+ me = bot.connection.get_nickname()
+ trout_msg = random.choice(fishlist)
+ # The bot won't trout or flirt with itself;
+ if irc_lower(me) == irc_lower(target):
+ target = nick
+ # There's a chance the game may be given away if the request was not
+ # public...
+ if not public:
+ if random.random()<=selftroutchance:
+ trout_msg=trout_msg+(selftrout%nick)
+
+ conn.action(bot.channel, trout_msg % target)
+ fishpond.cur_fish-=1
+
+# slash a pair
+def slashq(bot, cmd, nick, conn, public, cfg):
+ fishlist=cfg[0]
+ selfslash=cfg[1]
+ quietmsg=cfg[2]
+ notargetmsg=cfg[3]
+ nofishmsg=cfg[4]
+ fishpond=cfg[5]
+ selfslashchance=cfg[6]
+
+ fish_quota(fishpond)
+ if fishpond.DoS:
+ conn.notice(nick, quietmsg%fishpond.Boring_Git)
+ return
+ if fishpond.cur_fish<=0:
+ conn.notice(nick, nofishmsg)
+ return
+ target = string.join(cmd.split()[1:])
+ #who = cmd.split()[1:]
+ who = ' '.join(cmd.split()[1:]).split(' / ')
+ if len(who) < 2:
+ conn.notice(nick, "it takes two to tango!")
+ return
+ elif len(who) > 2:
+ conn.notice(nick, "we'll have none of that round here")
+ return
+ me = bot.connection.get_nickname()
+ slash_msg = random.choice(fishlist)
+ # The bot won't slash people with themselves
+ if irc_lower(who[0]) == irc_lower(who[1]):
+ conn.notice(nick, "oooooh no missus!")
+ return
+ # The bot won't slash with itself, instead slashing the requester
+ for n in [0,1]:
+ if irc_lower(me) == irc_lower(who[n]):
+ who[n] = nick
+ # Perhaps someone asked to slash themselves with the bot then we get
+ if irc_lower(who[0]) == irc_lower(who[1]):
+ conn.notice(nick, "you wish!")
+ return
+ # There's a chance the game may be given away if the request was not
+ # public...
+ if not public:
+ if random.random()<=selfslashchance:
+ slash_msg=slash_msg+(selfslash%nick)
+
+ conn.action(bot.channel, slash_msg % (who[0], who[1]))
+ fishpond.cur_fish-=1
+
+#query units
+def unitq(bot, cmd, nick, conn, public):
+ args = ' '.join(cmd.split()[1:]).split(' as ')
+ if len(args) != 2:
+ args = ' '.join(cmd.split()[1:]).split(' / ')
+ if len(args) != 2:
+ conn.notice(nick, "syntax: units arg1 as arg2")
+ return
+ if args[1]=='?':
+ sin,sout=os.popen2(["units","--verbose",args[0]],"r")
+ else:
+ sin,sout=os.popen2(["units","--verbose",args[0],args[1]],"r")
+ sin.close()
+ res=sout.readlines()
+ #popen2 doesn't clean up the child properly. Do this by hand
+ child=os.wait()
+ if os.WEXITSTATUS(child[1])==0:
+ bot.automsg(public,nick,res[0].strip())
+ else:
+ conn.notice(nick,'; '.join(map(lambda x: x.strip(),res)))
+
+# Shut up trouting for a minute
+def nofishq(bot, cmd, nick, conn, public, fish):
+ fish.cur_fish=0
+ fish.DoS=1
+ fish.Boring_Git=nick
+ fish.quotatime=time.time()
+ fish.quotatime+=fish.nofish_time
+ conn.notice(nick, "Fish stocks depleted, as you wish.")