]> jfr.im git - z_archive/twitter.git/commitdiff
irc bot (not yet working)
authormverdone <redacted>
Mon, 5 May 2008 22:57:01 +0000 (22:57 +0000)
committermverdone <redacted>
Mon, 5 May 2008 22:57:01 +0000 (22:57 +0000)
git-svn-id: http://svn.mike.verdone.ca/pyprojects/twitter/trunk@161 d723f978-dc38-0410-87ed-da353333cdcc

setup.py
twitter/cmdline.py
twitter/ircbot.py [new file with mode: 0644]

index 681aec8b4e9c8f7ef2d6121c40c405aca53a74a8..f8a110bce3b9c34f5dcdad37d974689cf86cacb5 100644 (file)
--- a/setup.py
+++ b/setup.py
@@ -20,6 +20,7 @@ setup(name='twitter',
       install_requires=[
           # -*- Extra requirements: -*-
           "simplejson>=1.7.1",
+          "dateutil>=1.1",
       ],
       entry_points="""
       # -*- Entry points: -*-
index 9f04df1a600f7074b4a6c8940cc8efa1c7007ac7..d36e873d695d9e731f009cd2da9cda283973d189 100644 (file)
@@ -127,8 +127,10 @@ class PublicAction(StatusAction):
 
 class SetStatusAction(Action):
     def __call__(self, twitter, options):
-        status = (u" ".join(options['extra_args'])).encode(
-            'utf8', 'replace')
+        statusTxt = (u" ".join(options['extra_args']) 
+                     if options['extra_args'] 
+                     else unicode(raw_input("message: ")))
+        status = (statusTxt.encode('utf8', 'replace'))
         twitter.statuses.update(status=status)
 
 actions = {
diff --git a/twitter/ircbot.py b/twitter/ircbot.py
new file mode 100644 (file)
index 0000000..2ff425b
--- /dev/null
@@ -0,0 +1,69 @@
+
+import time
+from dateutil.parser import parse
+
+try:
+    import irclib
+except:
+    raise Exception("This module requires python_irclib")
+
+class SchedTask(object):
+    def __init__(self, task, delta):
+        self.task = task
+        self.delta = delta
+        self.next = time.time() + delta
+        
+class Scheduler(object):
+    def __init__(self, tasks):
+        self.tasks = sorted(tasks, lambda x,y: cmp(x.delta, y.delta))
+    
+    def next_task(self):
+        now = time.time()
+        task = self.tasks.pop(0)
+        wait = task.next - now
+        if (wait > 0):
+            time.sleep(wait)
+        task.task()
+        task.next = now + task.delta
+        for idx in range(len(self.tasks)):
+            if self.tasks[idx].next > task.next:
+                break
+        self.tasks.insert(idx, task)
+        
+    def run_forever(self):
+        try:
+            while True:
+                self.next_task()
+        except KeyboardInterrupt:
+            pass
+            
+class TwitterBot(object):
+    def __init__(self, twitter, twitter_users, server, port, nick):
+        self.server = server
+        self.port = port
+        self.nick = nick
+        self.twitter = twitter
+        self.twitter_user_dict = {}
+        now = time.gmtime()
+        for user in twitter_users:
+            self.twitter_user_dict[user] = now
+        self.irc = irclib.IRC()
+        self.server = self.irc.server()
+        self.sched = Scheduler(
+            (SchedTask(self.check_statuses, 60),))
+
+    def check_statuses(self):
+        for user, last_update in self.twiter_users.items():
+            updates = self.twitter.statuses.user_timeline(
+                id=user, count=1)
+            if (updates):
+                latest = updates[0]
+                crt = parse(latest['created_at']).utctimetuple()
+                if (crt > last_update):
+                    self.server.
+                    self.twitter_user_dict[user] = crt
+    def run(self):
+        self.server.connect(server, port, nick)
+        self.server.join(self.channel)
+        self.sched.run_forever()
+