# 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
DoS=0
Boring_Git='Nobody'
quotatime=0
+ last=""
+
+# 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
+
+#set up blame dbs for trouts/flirts/slashes
+tbdb,tbdbk=loadblame("trouts")
+fbdb,fbdbk=loadblame("flirts")
+sbdb,sbdbk=loadblame("slashes")
# load a file full of flirts or trouts
def __load(filename):
#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)
+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
"nsfw": (c.nsfwq,urldb),
"nws": (c.nsfwq,urldb),
"units": c.unitq,
+ "currency":c.currencyq,
+ "blame": (c.blameq,fish,tbdb,tbdbk,fbdb,fbdbk,sbdb,sbdbk),
"help": c.helpq,
"say": c.sayq,
"do": c.doq,