X-Git-Url: https://jfr.im/git/z_archive/twitter.git/blobdiff_plain/6da3627e857d0a923b5f44de90e339ab51f173f2..0469b7aaf9714edca95c03d5609a67a03d7d7103:/twitter/ircbot.py diff --git a/twitter/ircbot.py b/twitter/ircbot.py index f702b79..876007d 100644 --- a/twitter/ircbot.py +++ b/twitter/ircbot.py @@ -27,9 +27,7 @@ password: """ -# TODO add delimiter if first word isn't "is" or "was" - -BOT_VERSION = "TwitterBot 0.2.1 (mike.verdone.ca/twitter)" +BOT_VERSION = "TwitterBot 0.4 (mike.verdone.ca/twitter)" IRC_BOLD = chr(0x02) IRC_ITALIC = chr(0x16) @@ -39,7 +37,7 @@ IRC_REGULAR = chr(0x0f) import sys import time from dateutil.parser import parse -from ConfigParser import ConfigParser +from ConfigParser import SafeConfigParser from heapq import heappop, heappush import traceback @@ -84,19 +82,17 @@ class Scheduler(object): now = time.time() task = heappop(self.task_heap) wait = task.next - now + task.next = now + task.delta + heappush(self.task_heap, task) if (wait > 0): time.sleep(wait) task() - task.next = now + task.delta - heappush(self.task_heap, task) debug("tasks: " + str(self.task_heap)) def run_forever(self): - try: - while True: - self.next_task() - except KeyboardInterrupt: - pass + while True: + self.next_task() + class TwitterBot(object): def __init__(self, configFilename): @@ -130,10 +126,16 @@ class TwitterBot(object): text = (htmlentitydecode( update['text'].replace('\n', ' ')) .encode('utf-8', 'replace')) - self.privmsg_channel( - "=^_^= %s%s%s %s" %( - IRC_BOLD, update['user']['screen_name'], - IRC_BOLD, text)) + + # Skip updates beginning with @ + # TODO This would be better if we only ignored messages + # to people who are not on our following list. + if not text.startswith("@"): + self.privmsg_channel( + u"=^_^= %s%s%s %s" %( + IRC_BOLD, update['user']['screen_name'], + IRC_BOLD, text.decode('utf-8'))) + nextLastUpdate = crt else: break @@ -175,7 +177,7 @@ class TwitterBot(object): def privmsg_channel(self, msg): return self.ircServer.privmsg( - self.config.get('irc', 'channel'), msg) + self.config.get('irc', 'channel'), msg.encode('utf-8')) def follow(self, conn, evt, name): userNick = evt.source().split('!')[0] @@ -223,14 +225,19 @@ class TwitterBot(object): self.config.getint('irc', 'port'), self.config.get('irc', 'nick')) self.ircServer.join(self.config.get('irc', 'channel')) - try: - self.sched.run_forever() - except KeyboardInterrupt: - pass + + while True: + try: + self.sched.run_forever() + except KeyboardInterrupt: + break + except TwitterError: + # twitter.com is probably down because it sucks. ignore the fault and keep going + pass def load_config(filename): defaults = dict(server=dict(port=6667, nick="twitterbot")) - cp = ConfigParser(defaults) + cp = SafeConfigParser(defaults) cp.read((filename,)) return cp