# -*- coding: utf-8 -*- ## EarwigBot's Core ## Basically, this creates threads for our IRC watcher component and Wikipedia component, and then runs the main IRC bot on the main thread. ## The IRC bot component of EarwigBot has two parts: a front-end and a watcher. ## The front-end runs on a normal IRC server and expects users to interact with it/give it commands. ## The watcher runs on a wiki recent-changes server and listens for edits. Users cannot interact with this part of the bot. import threading import time import traceback import sys import os parent_dir = os.path.split(sys.path[0])[0] sys.path.append(parent_dir) # make sure we look in the parent directory for modules from irc import frontend, watcher f_conn = None w_conn = None def irc_watcher(f_conn): global w_conn while 1: # restart the watcher component if (just) it breaks w_conn = watcher.get_connection() try: watcher.main(w_conn, f_conn) except: traceback.print_exc() time.sleep(5) # sleep a bit before restarting watcher print "watcher has stopped; restarting component..." def run(): global f_conn f_conn = frontend.get_connection() frontend.startup(f_conn) t_watcher = threading.Thread(target=irc_watcher, args=(f_conn,)) t_watcher.daemon = True t_watcher.start() frontend.main() w_conn.close() f_conn.close() if __name__ == "__main__": run()