chiark / gitweb /
Add twit command (patch from naath)
[irc.git] / Servus-chiark.py
index 8e308bab74bfb76bcc067604480b76272e274f9e..0af2dbce4424bc423676a1581ed22e6ba35b1bf3 100644 (file)
@@ -24,7 +24,9 @@
 # Acrobat configuration file
 
 # The following definitions are required to be present in this module:
-server = "rapun"
+# You can also override them on the command-line
+# e.g. python acrobat.py Servus-chiark nickname=testbot channel=\#test owner=MyNick
+server = "chiark"
 port = 6667
 nickname = "Servus"
 channel = "#chiark"
@@ -33,7 +35,7 @@ owner = "Emperor"
 
 # Everything else in this file is configuration-specific.
 
-import os, time
+import os, time, re, twitter
 
 # Most command implementations are stored in a separate module.
 import commands as c
@@ -140,6 +142,17 @@ class game:
        maxlose=14*minlose #2 weeks
        losetime=time.time()+300000
 
+# initialise the urldb on startup
+urldb={}
+lastexp=time.time()
+#expire urls if not asked about or seen for >71 hours
+expirelen=71*60*60
+#do an expiry run every hour
+expirevery=60*60
+
+# non-authenticated twitter api instance
+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
 # defines a couple of special cases (for karma) but is otherwise driven
@@ -158,13 +171,15 @@ commands = {"karma": (c.karmaq,karmadb),
             "reload": reload,
             "quit": quit,
            "die": quit,
+           "define": c.defineq,
             "google": c.googleq,
+           "url": (c.urlq,urldb),
            "units": c.unitq,
            "help": c.helpq,
-           "define": c.defineq,
 #          "game": (c.gameq,game),
             "say": c.sayq,
-            "do": c.doq }
+            "do": c.doq, 
+            "twit": (c.twitterq,twitapi) }
 # disconnect and hop annoy people
 #            "disconnect": c.disconnq,
 #            "hop": c.disconnq }
@@ -174,6 +189,7 @@ triggers = ("!", "~") # what character should the bot be invoked by:
                       # eg !trout, ~trout etc.
 
 def command(bot, cmd, nick, conn, public):
+    global urldb,lastexp,expirelen,expirevery,twitapi
     ours=0
     try:
            if public and cmd[0] in triggers:
@@ -184,6 +200,16 @@ def command(bot, cmd, nick, conn, public):
            command = cmd.split()[0]
     except IndexError:
            command=""
+
+    t=time.time()
+    if t - lastexp > expirevery:
+           c.urlexpire(urldb,expirelen)
+           lastexp=t
+
+    if public:
+      if c.urlre.search(cmd) and command.lower()!="url":
+        c.dourl(bot,conn,nick,cmd,urldb)
+
     # karma: up
     if command.endswith("++"):
         karma(cmd,1)