def __init__(self, settings=None, ui_queues=None, wrapper=None, irc_wrapper=None, logger=None, wrap_irc=True): self.settings = settings self.wrapper = wrapper self.logger = logger self.ui_queues = ui_queues if irc_wrapper: iw = irc_wrapper(logger, self.wrapper, settings, settings.CHANNEL_LIST, settings.USER, settings.HOST, settings.OAUTH_TOKEN, settings.PORT, settings.COMMAND_PREFIX) if wrap_irc: self.ircWrapper = ThreadCallRelay() self.ircWrapper.set_call_object(iw) iw.set_call_relay(self.ircWrapper) else: self.ircWrapper = iw else: self.ircWrapper = None self.command_managers = {} self.blacklist_managers = {} self.channel_models = {} self.db = None
def main(): multiprocessing.freeze_support() ui_choices = get_ui_choices() default_ui = "Qt" if is_frozen() else "None" ap = argparse.ArgumentParser() ap.add_argument("--ui", default=default_ui, choices=ui_choices) options = ap.parse_args() ui, in_queue, out_queue = get_ui(options.ui) if not ui: raise RuntimeError("Couldn't instantiate UI {}".format(ui)) process = multiprocessing.Process( target=start_ui, args=(ui,) ) if options.ui != "None": process.start() if settings.LOG_FILE: set_log_file(settings.LOG_FILE) # Set LUA_PATH environment variable so our Lua code can find the libraries os.environ["LUA_PATH"] = settings.LUA_PATH ui_queues = { "in": in_queue, "out": out_queue } wrapper = ThreadCallRelay() bot = Bot(settings, ui_queues=ui_queues, wrapper=wrapper, irc_wrapper=IRCWrapper, logger=log) wrapper.set_call_object(bot) def run(): bot.run() thread = Thread(target=run) thread.daemon = True thread.start() try: if USING_EXAMPLE: msg = "It seems you haven't edited all the important " \ "settings in settings.py. Please edit at least USER, " \ "OAUTH_TOKEN, and CHANNEL_LIST." for channel in settings.CHANNEL_LIST: ui_queues["in"].put(ConsoleMsg(channel, msg)) if options.ui == "None": while True: time.sleep(1) else: running = True while running: msg = out_queue.get() if msg.__class__ == StopMsg: running = False wrapper.stop() else: msg.set_bot(bot) msg.process() finally: in_queue.put(StopMsg()) wrapper.stop() if options.ui != "None": process.join()