chiark / gitweb /
the products of larks twisted imagination
[irc.git] / acrobat-chiark-0.2.py
index 6cb3bfdccd46b113185aa336dadbf095112fd4a5..bcc25dcd664b7ec8f86649befca594bfab786212 100755 (executable)
@@ -50,6 +50,8 @@ class Acrobat(SingleServerIRCBot):
         self.channel = channel
         self.owner = owner
         self.quotatime = time.time()
+        #List of known !commands we respond to
+        self.known =['karma','trout','info','die','quiet','list','google','say','do','reload','flirt']
         #Configurable stuff - how often do we add how many fish?
         self.cur_fish=5
         self.max_fish=5       #Maximum of 5 fish
@@ -70,6 +72,12 @@ class Acrobat(SingleServerIRCBot):
             f.close()
         except IOError:
             self.trouts = [ "hits %s with a wet trout.", "thwaps %s.", "questions %s's parentage.", "pokes its tounge out at %s.", "bites its thumb at %s."]
+        try:
+            f = open("flirts", "r")
+            self.flirts = [l.strip() for l in f.readlines() if l.find("%s") != -1]
+            f.close()
+        except IOError:
+            self.flirts = [ "falls madly in love with %s", "blows kisses at %s"]
 
     ## EVENT HANDLERS
             
@@ -159,6 +167,34 @@ class Acrobat(SingleServerIRCBot):
             conn.notice(nick, "My owner is %s; I have karma on %s items." %
                         (self.owner, len(self.karma.dict.keys())))
 
+    # list know commands
+    def listq(self, cmd, nick, conn, public):
+        conn.notice(nick, "%s" % string.join(self.known))
+    # flirt with someone
+    def flirtq(self, cmd, nick, conn, public):
+        self.fish_quota()
+        if self.DoS == 1:
+            conn.notice(nick, "Sorry, but %s made me take Holy Orders." %
+                        self.Boring_Git)
+            return
+        if self.cur_fish <= 0:
+            conn.notice(nick, "My libido is over-used!")
+        else:
+            self.cur_fish -=1
+            try:
+                target = string.join(cmd.split()[1:])
+                me = self.connection.get_nickname()
+                trout_msg = random.choice(self.flirts)
+                # ...and touchy.
+                if me.lower() == target.lower():
+                    target = nick
+                if public == 0:
+                    if random.random() <= 0.1:
+                        trout_msg+= ' (but %s is their secret admirer)' % nick
+                conn.action(self.channel, trout_msg % target)
+            except IndexError:
+                conn.notice(nick, "Who do you wish me to flirt with?")
+    
     # trout someone
     def troutq(self, cmd, nick, conn, public):
         self.fish_quota()
@@ -166,7 +202,7 @@ class Acrobat(SingleServerIRCBot):
             conn.notice(nick, "Sorry, but %s is being a spoilsport." %
                         self.Boring_Git)
             return
-        if self.cur_fish == 0:
+        if self.cur_fish <= 0:
             conn.notice(nick, "Fish stocks exhausted.")
         else:
             self.cur_fish -=1
@@ -181,10 +217,8 @@ class Acrobat(SingleServerIRCBot):
                 if me.lower() == target.lower():
                     target = nick
                 if public == 0:
-                    if random.random() <= 0.25:
-                        trout_msg+= ' (at the instigation of '
-                        trout_msg+=nick
-                        trout_msg+= ')'
+                    if random.random() <= 0.1:
+                        trout_msg+= ' (at the instigation of %s)' % nick
                 conn.action(self.channel, trout_msg % target)
             except IndexError:
                 conn.notice(nick, "Who do you wish me to trout?")
@@ -193,14 +227,18 @@ class Acrobat(SingleServerIRCBot):
     def reloadq(self, cmd, nick, conn, public):
         if irc_lower(nick) == irc_lower(self.owner):
             tback = self.trouts
+            fback = self.flirts
             try:
                 f = open("trouts", "r")
                 self.trouts = [l.strip() for l in f.readlines() if l.find("%s") != -1]
                 f.close()
+                f = open("flirts", "r")
+                self.flirts = [l.strip() for l in f.readlines() if l.find("%s") != -1]
                 conn.notice(nick, "I am re-armed!")
             except IOError:
                 conn.notice(nick, "Trout re-arming failed!")
                 self.trouts = tback
+                self.flirts = fback
         else:
             conn.notice(nick, "This command can only be invoked by my owner.")
     # Shut up trouting for a minute
@@ -250,17 +288,17 @@ class Acrobat(SingleServerIRCBot):
                 if public == 0:
                     conn.notice(nick, str(gsearch))
                 else: # we haven't found anything.
-                    conn.privmsg(nick, str(gsearch))
+                    conn.privmsg(self.channel, str(gsearch))
             else:
                 if public == 0:
                     conn.notice(nick, "No pages found.")
                 else:
-                    conn.privmsg(nick, "No pages found.")
+                    conn.privmsg(self.channel, "No pages found.")
         except IOError: # if the connection times out. This blocks. :(
             if public == 0:
                 conn,notice(nick, "The web's broken. Waah!")
             else:
-                conn.privmsg(nick, "The web's broken. Waah!")
+                conn.privmsg(self.channel, "The web's broken. Waah!")
                 
     # General query handler
     def do_command(self, nick, cmd, public=0):
@@ -281,9 +319,14 @@ class Acrobat(SingleServerIRCBot):
         if cmd == "info":
             self.infoq(cmd, nick, conn, public)
 
+        # Known commands
+        if cmd == "list":
+            self.listq(cmd, nick, conn, public)
         # weaponry
         if cmd.split()[0] == "trout":
             self.troutq(cmd, nick, conn, public)
+        if cmd.split()[0] == "flirt":
+            self.flirtq(cmd, nick, conn, public)
         if cmd == "reload":
             self.reloadq(cmd, nick, conn, public)