X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~matthewv/git?a=blobdiff_plain;f=Servus-chiark.py;h=f0be526abdf5f855cf5cb77ac6ac126032397c23;hb=HEAD;hp=81f8076dfd7ad925c42946b4715a833797cae818;hpb=5ec921a98112b8971747d0c84bdb4a35bdf0688d;p=irc.git diff --git a/Servus-chiark.py b/Servus-chiark.py old mode 100644 new mode 100755 index 81f8076..f0be526 --- a/Servus-chiark.py +++ b/Servus-chiark.py @@ -35,23 +35,41 @@ owner = "Emperor" # Everything else in this file is configuration-specific. -import os, time, re, twitter +import os, time, re, twitter, subprocess, sys, os.path # 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: +class Fish (c.FishPond): cur_fish=5 max_fish=5 nofish_time=60 fish_time_inc=60 fish_inc=2 - DoS=0 Boring_Git='Nobody' - quotatime=0 +fish = Fish() + +# load the "blame" details for a file +def loadblame(filename): + p=subprocess.Popen(["git","blame","-s",filename], + stdout=subprocess.PIPE,stderr=subprocess.PIPE) + out,err=p.communicate() + if len(err)>0: + sys.exit("git blame failure: %s" % err) + bdb={} + lines=out.split("\n") + for line in lines: + l=line.split() + if len(line.strip())>0: + commit=l[0] + thing=' '.join(l[2:]) + bdb[thing]=commit + keys=bdb.keys() + return bdb,keys,filename + # load a file full of flirts or trouts def __load(filename): try: @@ -70,7 +88,9 @@ troutcfg = ( "Who do you wish me to trout?", "Fish stocks exhausted.", fish, - 0.1) + 0.1, + loadblame("trouts"), + ) flirtcfg = ( __load("flirts"), @@ -79,7 +99,9 @@ flirtcfg = ( "Who do you wish me to flirt with?", "My libido is over-used!", fish, - 0.1) + 0.1, + loadblame("flirts"), + ) slashcfg= ( __load("slashes"), @@ -88,7 +110,9 @@ slashcfg= ( "Who do you want to slash?", "I have writer's block!", fish, - 0.1) + 0.1, + loadblame("slashes") + ) # Hacky command to output the current fishpond state def fishq(bot, cmd, nick, conn, public,f): @@ -142,8 +166,35 @@ expirelen=71*60*60 #do an expiry run every hour expirevery=60*60 + +#path where Oauth details are kept +twioauthpath=os.path.expanduser("~/private/servus_twapi_oauth.txt") + +try: + f=open(twioauthpath,"r") + for line in f: + if line[0]=='#': + continue + key,val=map(str.strip,line.split(':')) + if key == "consumer_key": + twoaapck = val + elif key == "consumer_secret": + twoaapcs = val + elif key == "access_token": + twoapat = val + elif key == "access_token_secret": + twoapats = val + else: + raise ValueError, "Invalid line in twitter auth details file %s" % line + f.close() + twitapi = twitter.Api(consumer_key = twoaapck, + consumer_secret = twoaapcs, + access_token_key = twoapat, + access_token_secret = twoapats, + tweet_mode = "extended") +except IOError: # non-authenticated twitter api instance -twitapi = twitter.Api() + twitapi = twitter.Api() # Command processing: whenever something is said that the bot can hear, # "command" is invoked and must decide what to do. This configuration @@ -169,6 +220,8 @@ commands = {"karma": (c.karmaq,karmadb), "nsfw": (c.nsfwq,urldb), "nws": (c.nsfwq,urldb), "units": c.unitq, + "currency":c.currencyq, + "blame": (c.blameq,fish, [troutcfg,flirtcfg,slashcfg]), "help": c.helpq, "say": c.sayq, "do": c.doq,