]> gitweb.pimeys.fr Git - bots/basile.git/blobdiff - basile.py
on place la buffer_fail_regexp dans la config
[bots/basile.git] / basile.py
index 68c2bb35f3b47824de9806b570f8b813afc148f2..123a94c35f7eeb06885cae6f1414340929f9aa4e 100755 (executable)
--- 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