X-Git-Url: http://gitweb.pimeys.fr/?a=blobdiff_plain;f=basile.py;h=b6dd64a59376baf7f5583cd71245f4a2d602ab5a;hb=be09c7f701ee488f5aee86bff402f4f7b4b673ed;hp=38f806b83ba257a75964f882a282128eb9cd76c9;hpb=212f1adace99104057523942af3ed0ef07110c4e;p=bots%2Fbasile.git diff --git a/basile.py b/basile.py index 38f806b..b6dd64a 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): @@ -200,7 +190,7 @@ class Basile(ircbot.SingleServerIRCBot): 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]) @@ -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 @@ -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 @@ -735,7 +725,7 @@ class Basile(ircbot.SingleServerIRCBot): victime = ev.arguments()[0] raison = ev.arguments()[1] if victime == self.nick: - log(self.serveur, u"%s kické de %s par %s (raison : %s)" % (victime, channel.decode("utf-8"), auteur, raison)) + log(self.serveur, ("%s kické de %s par %s (raison : %s)" % (victime, channel, auteur, raison)).decode("utf-8")) time.sleep(2) serv.join(channel) l1, l2 = config.kick_answers, config.kick_actions