X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~matthewv/git?a=blobdiff_plain;f=Servus-chiark.py;h=6d3af24c258625c62231c49635d0b79722e6337c;hb=fe2636ef4ab3ee35896aefab0595ef09370c1aa6;hp=e0eb741ebeb2bcc9a4f3ec4a87f6ae14ed4097b9;hpb=868ccbe2f35203adfc0eaf7b743f18c6397e0b93;p=irc.git diff --git a/Servus-chiark.py b/Servus-chiark.py old mode 100644 new mode 100755 index e0eb741..6d3af24 --- a/Servus-chiark.py +++ b/Servus-chiark.py @@ -35,7 +35,7 @@ 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 @@ -51,7 +51,27 @@ class fish: DoS=0 Boring_Git='Nobody' quotatime=0 + last="" + last_cfg=None +# 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 +90,9 @@ troutcfg = ( "Who do you wish me to trout?", "Fish stocks exhausted.", fish, - 0.1) + 0.1, + loadblame("trouts"), + ) flirtcfg = ( __load("flirts"), @@ -79,7 +101,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 +112,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 +168,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 @@ -170,6 +223,7 @@ commands = {"karma": (c.karmaq,karmadb), "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,