chiark / gitweb /
new trout from rejs ( https://twitter.com/kingsbookstore/status/1620432807196778496 )
[irc.git] / Servus-chiark.py
old mode 100644 (file)
new mode 100755 (executable)
index 81f8076..f0be526
@@ -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,