X-Git-Url: http://gitweb.pimeys.fr/?a=blobdiff_plain;f=basile.py;h=123a94c35f7eeb06885cae6f1414340929f9aa4e;hb=834767b238b2b7389e4e233745e173fa481f2d0f;hp=68c2bb35f3b47824de9806b570f8b813afc148f2;hpb=3f529d31ca1b5a73f9aee2603e41f74b48d3c0b3;p=bots%2Fbasile.git diff --git a/basile.py b/basile.py index 68c2bb3..123a94c 100755 --- a/basile.py +++ b/basile.py @@ -27,10 +27,11 @@ import config import nk #: Module de réponse aux questions de base import isit +#: Module définissant les erreurs +import errors # la partie qui réfère au fichier lui-même est mieux ici # sinon on réfère la config et pas le fichier lui-même -import os config.thisfile = os.path.realpath(__file__) def get_config_logfile(serveur): @@ -69,24 +70,13 @@ def ignore_event(serv, ev): return True - - -class UnicodeBotError(Exception): - """Erreur levée si quelqu'un fait du caca avec son encodage.""" - pass - -class CrashError(Exception): - """Pour pouvoir faire crasher Basile, parce que ça a l'air drôle.""" - def __init__(self, msg=""): - Exception.__init__(self, msg) - def bot_unicode(chain): """Essaye de décoder ``chain`` en UTF-8. - Lève une py:class:`UnicodeBotError` en cas d'échec.""" + Lève une py:class:`errors.UnicodeBotError` en cas d'échec.""" try: return chain.decode("utf8") except UnicodeDecodeError as exc: - raise UnicodeBotError + raise errors.UnicodeBotError class Basile(ircbot.SingleServerIRCBot): @@ -197,10 +187,10 @@ class Basile(ircbot.SingleServerIRCBot): else: return True, u"Config reloaded" - def crash(self, chan="nowhere", who="nobody"): + def crash(self, who="nobody", chan="nowhere"): """Fait crasher le bot.""" where = "en privé" if chan == "priv" else "sur le chan %s" % chan - raise CrashError((u"Crash demandé par %s %s" % (who, where)).encode("utf-8")) + raise errors.CrashError((u"Crash demandé par %s %s" % (who, where)).encode("utf-8")) ACTIONS = { "reload" : execute_reload, @@ -243,7 +233,7 @@ class Basile(ircbot.SingleServerIRCBot): auteur = irclib.nm_to_n(ev.source()) try: message = bot_unicode(message) - except UnicodeBotError: + except errors.UnicodeBotError: if config.utf8_trigger: serv.privmsg(auteur, random.choice(config.utf8_fail_answers).encode("utf8")) return @@ -314,7 +304,7 @@ class Basile(ircbot.SingleServerIRCBot): if auteur in self.ops: if len(message) > 1: if message[1] in self.chanlist: - serv.privmsg(auteur, "Je suis déjà sur %s" % (message[1])) + serv.privmsg(auteur, (u"Je suis déjà sur %s" % (message[1])).encode("utf-8")) else: serv.join(message[1]) self.chanlist.append(message[1]) @@ -373,7 +363,7 @@ class Basile(ircbot.SingleServerIRCBot): elif cmd == u"crash": if auteur in self.overops: log(self.serveur, "priv", auteur, " ".join(message) + "[successful]") - self.crash("priv", auteur) + self.crash(auteur, "priv") else: notunderstood = True elif cmd == u"reload": @@ -490,7 +480,7 @@ class Basile(ircbot.SingleServerIRCBot): message = ev.arguments()[0] try: message = bot_unicode(message) - except UnicodeBotError: + except errors.UnicodeBotError: if config.utf8_trigger and not canal in self.quiet_channels: serv.privmsg(canal, (u"%s: %s"% ( auteur, random.choice(config.utf8_fail_answers))).encode("utf8")) return @@ -513,7 +503,7 @@ class Basile(ircbot.SingleServerIRCBot): self.execute_something("reload", {"auteur" : auteur}, place=canal, auteur=auteur) elif cmd == u"crash": if auteur in self.overops: - self.crash(auteur, message) + self.crash(auteur, canal) elif cmd in [u"part", u"leave", u"dégage", u"va-t-en", u"tut'tiresailleurs,c'estmesgalets"]: if auteur in self.ops and (not (canal in self.stay_channels) or auteur in self.overops): @@ -675,7 +665,7 @@ class Basile(ircbot.SingleServerIRCBot): serv.action(canal, "sert un grand verre de jus de pomme à %s : tout le monde sait qu'il ne boit pas." % (auteur)) else: serv.action(canal, "sert un verre de manzana à %s" % (auteur)) - if re.match(u'^ *(.|§|!|/|/|:|)(w|b) [0-9]+$', message) and not canal in self.quiet_channels: + if re.match(config.buffer_fail_regexp, message, flags=re.UNICODE) and not canal in self.quiet_channels: failanswers = config.buffer_fail_answers answer = random.choice(failanswers) serv.privmsg(canal, ("%s: %s"%(auteur,answer)).encode("utf8")) @@ -705,7 +695,7 @@ class Basile(ircbot.SingleServerIRCBot): channel = ev.target() try: action = bot_unicode(action) - except UnicodeBotError: + except errors.UnicodeBotError: if config.utf8_trigger and not channel in self.quiet_channels: serv.privmsg(channel, (u"%s: %s"%(auteur,random.choice(config.utf8_fail_answers))).encode("utf8")) return