From 4f1ebdeebf5eaf3f3f5a145322409eceaecf33d3 Mon Sep 17 00:00:00 2001 From: chat Date: Sun, 20 Jul 2014 23:39:51 +0200 Subject: [PATCH] init() --- .gitignore | 4 +++ eventlooper.py | 70 ++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 74 insertions(+) create mode 100644 .gitignore create mode 100755 eventlooper.py diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..6a07201 --- /dev/null +++ b/.gitignore @@ -0,0 +1,4 @@ +.*swp +cmdfifo +logs/ +event_files/ diff --git a/eventlooper.py b/eventlooper.py new file mode 100755 index 0000000..33913b1 --- /dev/null +++ b/eventlooper.py @@ -0,0 +1,70 @@ +#!/usr/bin/python + +import sys, os, re, time + +BUFSIZ = 8192 +delay = 0.100 # seconds +ignore_user = 'urlbot' + +basedir = '.' +if 2 == len(sys.argv): basedir = sys.argv[1] + +event_files_dir = os.path.join(basedir, 'event_files') +fifo_path = os.path.join(basedir, 'cmdfifo') + +def debug_enabled(): +# return True + return False + +def e(data): + return data.encode('string-escape') + +def logger(severity, message): + if \ + 'err' == severity or \ + 'warn' == severity or \ + 'info' == severity: + sys.stderr.write(e(sys.argv[0] + ': ' + message) + '\n') + +def extract_url(data): + result = re.findall("(https?://[^\s]+)", data) + if result: + for r in result: + message = '/say yeah, URL found: %s' % e(r) + logger('info', 'printing ' + message) + + if debug_enabled(): + print message + else: + try: + fd = open(fifo_path, 'wb') + fd.write(message) + fd.close() + except IOError: + logger('err', "couldn't print to fifo " + fifo_path) + +def parse_delete(filepath): + try: + fd = open(filepath, 'rb') + except: + logger('err', 'file has vanished: ' + filepath) + return -1 + + content = fd.read(BUFSIZ) # ignore more than BUFSIZ + + if content[1:1+len(ignore_user)] != ignore_user: + extract_url(content) + + fd.close() + + os.remove(filepath) # probably better crash here + +while 1: + try: + for f in os.listdir(event_files_dir): + if 'mcabber-' == f[:8]: + parse_delete(os.path.join(event_files_dir, f)) + + time.sleep(delay) + except KeyboardInterrupt: + exit(130)