# Part of Acrobat. import string, cPickle, random, urllib, sys, time from irclib import irc_lower, nm_to_n # query karma def karmaq(bot, cmd, nick, conn, public, karma): try: item=cmd.split()[1].lower() except IndexError: item=None if item==None: bot.automsg(public,nick,"I have karma on %s items." % len(karma.keys())) elif karma.has_key(item): bot.automsg(public,nick,"%s has karma %s." %(item,karma[item])) else: bot.automsg(public,nick, "%s has no karma set." % item) # delete karma def karmadelq(bot, cmd, nick, conn, public, karma): try: item=cmd.split()[1].lower() except IndexError: 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) # 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 # 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.") # rehash bot config def reloadq(bot, cmd, nick, conn, public): if not public and irc_lower(nick) == irc_lower(bot.owner): try: reload(bot.config) conn.notice(nick, "Config reloaded.") except ImportError: conn.notice(nick, "Config reloading failed!") else: bot.automsg(public,nick, "Configuration can only be reloaded by my owner, by /msg.") # quit irc def quitq(bot, cmd, nick, conn, public): if irc_lower(nick) == irc_lower(bot.owner): bot.die(msg = "I have been chosen!") elif public: conn.notice(nick, "Such aggression in public!") else: conn.notice(nick, "You're not my owner.") # google for something def googleq(bot, cmd, nick, conn, public): cmdrest = string.join(cmd.split()[1:]) # "I'm Feeling Lucky" rather than try and parse the html targ = ("http://www.google.com/search?q=%s&btnI=I'm+Feeling+Lucky" % urllib.quote_plus(cmdrest)) try: # get redirected and grab the resulting url for returning gsearch = urllib.urlopen(targ).geturl() if gsearch != targ: # we've found something bot.automsg(public,nick,str(gsearch)) else: # we haven't found anything. bot.automsg(public,nick,"No pages found.") except IOError: # if the connection times out. This blocks. :( bot.automsg(public,nick,"The web's broken. Waah!") ### say to msg/channel def sayq(bot, cmd, nick, conn, public): if irc_lower(nick) == irc_lower(bot.owner): conn.privmsg(bot.channel, string.join(cmd.split()[1:])) else: if not public: conn.notice(nick, "You're not my owner!") ### action to msg/channel def doq(bot, cmd, nick, conn, public): sys.stderr.write(irc_lower(bot.owner)) sys.stderr.write(irc_lower(nick)) if not public: if irc_lower(nick) == irc_lower(bot.owner): conn.action(bot.channel, string.join(cmd.split()[1:])) else: conn.notice(nick, "You're not my owner!") ###disconnect def disconnq(bot, cmd, nick, conn, public): if cmd == "disconnect": # hop off for 60s bot.disconnect(msg="Be right back.") ### list keys of a dictionary def listkeysq(bot, cmd, nick, conn, public, dict): bot.automsg(public,nick,string.join(dict.keys()))