From 1384d1976fa984b6b254c93677363f67944c0c7a Mon Sep 17 00:00:00 2001 From: Matthias Schiffer Date: Sun, 9 May 2010 21:49:15 +0200 Subject: Made everything much more error resistant --- curunir.py | 68 +++++++++++++++++++++++++++++++++++++++++++++++++------------- 1 file changed, 54 insertions(+), 14 deletions(-) (limited to 'curunir.py') diff --git a/curunir.py b/curunir.py index 3c0d933..5383fe3 100644 --- a/curunir.py +++ b/curunir.py @@ -1,22 +1,57 @@ from connection.xmpp import XMPPConnection -import signal, sys +import signal, sys, traceback from config import config class ModuleManager: def __init__(self, config): self.config = config - self.modules = {} + self._modules = {} for mod in config['modules']: self.get(mod) def get(self, name): - if not name in self.modules: + if not name in self._modules: mod = __import__('modules.' + name, globals(), locals(), ['Module']) - self.modules[name] = mod.Module(self) + self._modules[name] = mod.Module(self) - return self.modules[name] + return self._modules[name] + + def commands(self): + return reduce(lambda l, mod: l + mod.commands(), self._modules.itervalues(), []) + + def helptexts(self): + return reduce(lambda l, mod: l + mod.helptexts(), self._modules.itervalues(), []) + + def groupchat(self, room, nick, text, handler): + for mod in self._modules.itervalues(): + try: + mod.groupchat(room, nick, text, handler) + except: + handler.reply(traceback.format_exc(5)) + + def join(self, room, nick, show, status, handler): + for mod in self._modules.itervalues(): + try: + mod.join(room, nick, show, status, handler) + except: + handler.reply(traceback.format_exc(5)) + + def leave(self, room, nick, show, status, handler): + for mod in self._modules.itervalues(): + try: + mod.leave(room, nick, show, status, handler) + except: + handler.reply(traceback.format_exc(5)) + + def topic(self, room, nick, text, handler): + for mod in self._modules.itervalues(): + try: + mod.leave(room, nick, text, handler) + except: + handler.reply(traceback.format_exc(5)) + run = True @@ -35,13 +70,18 @@ print 'Loading modules...' modman = ModuleManager(config) -connection = XMPPConnection(config, modman) -print 'Connecting...' -connection.connect() - while run: - act = connection.stream.loop_iter(1) - if not act: - connection.idle() - -connection.disconnect() + connection = XMPPConnection(config, modman) + print 'Connecting...' + connection.connect() + + try: + while run: + act = connection.stream.loop_iter(1) + if not act: + connection.idle() + + connection.disconnect() + except: + traceback.print_exc(file=sys.stdout) + connection.disconnect() -- cgit v1.2.3