X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~matthewv/git?p=irc.git;a=blobdiff_plain;f=acrobat-chiark-0.2.py;h=bcc25dcd664b7ec8f86649befca594bfab786212;hp=0d9757d68d90a421f37ec76cde3b3057a988aefc;hb=0ad09bb40c89ffbaa10e6303938dd2ce99e77de2;hpb=9aa26e36cb612b063282fe39db3216ac1e7cfcf3 diff --git a/acrobat-chiark-0.2.py b/acrobat-chiark-0.2.py index 0d9757d..bcc25dc 100755 --- a/acrobat-chiark-0.2.py +++ b/acrobat-chiark-0.2.py @@ -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 @@ -86,15 +94,15 @@ class Acrobat(SingleServerIRCBot): and (irc_lower(a[0]) == irc_lower(self.connection.get_nickname()) or irc_lower(a[0])[:-1] == irc_lower(self.connection.get_nickname())): - self.do_command(self.channel, string.strip(a[1]), public = 1) + self.do_command(nm_to_n(evt.source()), string.strip(a[1]), public = 1) if a[0].endswith("++"): self.karmaup(a[0]) if a[0].endswith("--"): self.karmadown(a[0]) if payload[0] == "!" and len(payload)>1: - self.do_command(self.channel, string.strip(payload[1:]), public=1) + self.do_command(nm_to_n(evt.source()), string.strip(payload[1:]), public=1) if payload[0] == "~" and len(payload)>1: - self.do_command(self.channel, string.strip(payload[1:]), public=1) + self.do_command(nm_to_n(evt.source()), string.strip(payload[1:]), public=1) # And now bot commands; @@ -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 @@ -180,10 +216,10 @@ class Acrobat(SingleServerIRCBot): # ...and touchy. if me.lower() == target.lower(): target = nick - conn.action(self.channel, trout_msg % target) if public == 0: if random.random() <= 0.1: - conn.action(self.channel, "notes %s is conducting a whispering campaign" % nick) + 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?") @@ -191,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 @@ -248,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): @@ -279,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)