]> gitweb.pimeys.fr Git - bots/basile.git/blobdiff - basile.py
[self_improvement] Using .lower() on avant and apres when case_insensitive
[bots/basile.git] / basile.py
index ecbef4ec39389afed5def41297096a77c7531098..2fedf6ed76a4a0aa8dc9dfb3a644b892edd0dcc9 100755 (executable)
--- a/basile.py
+++ b/basile.py
@@ -52,7 +52,19 @@ def log(serveur, channel, auteur=None, message=None):
     f.write((chain + u"\n").encode("utf-8"))
     f.close()
     if config.debug_stdout:
-        print chain
+        print chain.encode("utf-8")
+
+def ignore_event(serv, ev):
+    """Retourne ``True`` si il faut ignorer cet évènement."""
+    for (blackmask, exceptlist) in config.blacklisted_masks:
+        usermask = ev.source()
+        blackit = bool(irclib.mask_matches(usermask, blackmask))
+        exceptit = any([bool(irclib.mask_matches(usermask, exceptmask)) for exceptmask in exceptlist])
+        if exceptit: # Il est exempté
+            return False
+        else:
+            if blackit: # Il n'est pas exempté et matche la blacklist
+                return True
 
 def regex_join(liste, avant=u".*(?:^| )", apres=u"(?:$|\.| |,|;).*"):
     """Fabrique une regexp à partir d'une liste d'éléments à matcher."""
@@ -62,8 +74,10 @@ def is_something(chain, regexp=None, matches=[], avant=u".*(?:^| )", apres=u"(?:
                  case_sensitive=False):
     """Vérifie si chain contient un des éléments de ``matches``.
        Si ``regexp`` est fournie, c'est simplement elle qui est testée"""
-    if case_sensitive:
+    if not case_sensitive:
         chain = chain.lower()
+        apres = apres.lower()
+        avant = avant.lower()
     if regexp == None:
         regexp = regex_join(matches, avant, apres)
         regexp = re.compile(regexp)
@@ -299,7 +313,7 @@ class Basile(ircbot.SingleServerIRCBot):
     def crash(self, chan="nowhere", who="nobody"):
         """Fait crasher le bot."""
         where = "en privé" if chan == "priv" else "sur le chan %s" % chan
-        raise CrashError("Crash demandé par %s %s" % (who, where))
+        raise CrashError((u"Crash demandé par %s %s" % (who, where)).encode("utf-8"))
     
     ACTIONS = {
         "reload" : execute_reload,
@@ -336,6 +350,8 @@ class Basile(ircbot.SingleServerIRCBot):
 
     def on_privmsg(self, serv, ev):
         """À la réception d'un message en privé."""
+        if ignore_event(serv, ev):
+            return
         message = ev.arguments()[0]
         auteur = irclib.nm_to_n(ev.source())
         try:
@@ -425,7 +441,7 @@ class Basile(ircbot.SingleServerIRCBot):
             if auteur in self.ops and len(message) > 1:
                 if message[1] in self.chanlist:
                     if not (message[1] in self.stay_channels) or auteur in self.overops:
-                        self.quitter(message[1], " ".join(message[2:]))
+                        self.quitter(message[1].encode("utf-8"), " ".join(message[2:]))
                         self.chanlist.remove(message[1])
                         log(self.serveur, "priv", auteur, " ".join(message) + "[successful]")
                     else:
@@ -524,7 +540,7 @@ class Basile(ircbot.SingleServerIRCBot):
                 notunderstood = True
         elif cmd == u"say":
             if auteur in self.overops and len(message) > 2:
-                serv.privmsg(message[1], " ".join(message[2:]))
+                serv.privmsg(message[1].encode("utf-8"), (u" ".join(message[2:])).encode("utf-8"))
                 log(self.serveur, "priv", auteur, " ".join(message))
             elif len(message) <= 2:
                 serv.privmsg(auteur, "Syntaxe : SAY <channel> <message>")
@@ -540,7 +556,7 @@ class Basile(ircbot.SingleServerIRCBot):
                 notunderstood = True
         elif cmd == u"kick":
             if auteur in self.overops and len(message) > 2:
-                serv.kick(message[1], message[2], " ".join(message[3:]))
+                serv.kick(message[1].encode("utf-8"), message[2].encode("utf-8"), " ".join(message[3:]).encode("utf-8"))
                 log(self.serveur, "priv", auteur, " ".join(message))
             elif len(message) <= 2:
                 serv.privmsg(auteur, "Syntaxe : KICK <channel> <pseudo> [<raison>]")
@@ -580,6 +596,8 @@ class Basile(ircbot.SingleServerIRCBot):
     
     def on_pubmsg(self, serv, ev):
         """À la réception d'un message sur un channel."""
+        if ignore_event(serv, ev):
+            return
         auteur = irclib.nm_to_n(ev.source())
         canal = ev.target()
         message = ev.arguments()[0]
@@ -664,10 +682,10 @@ class Basile(ircbot.SingleServerIRCBot):
                 else:
                     serv.privmsg(canal, "%s: Je ne connais pas votre pseudo note." % (auteur))
                     log(self.serveur, canal, auteur, message + "[unknown]")
-            elif (re.match("!?(pain au chocolat|chocolatine)", message.lower())
+            elif (re.match("(pain au chocolat|chocolatine)", message.lower())
                  and not canal in self.quiet_channels):
                 serv.action(canal, "sert un pain au chocolat à %s" % (auteur))
-            elif re.match("!?manzana",message.lower()) and not canal in self.quiet_channels:
+            elif re.match("manzana",message.lower()) and not canal in self.quiet_channels:
                 if auteur in config.manzana:
                     serv.action(canal, "sert une bouteille de manzana à %s" % (auteur))
                 elif auteur in config.manzana_bis:
@@ -793,6 +811,8 @@ class Basile(ircbot.SingleServerIRCBot):
 
     def on_action(self, serv, ev):
         """À la réception d'une action."""
+        if ignore_event(serv, ev):
+            return
         action = ev.arguments()[0]
         auteur = irclib.nm_to_n(ev.source())
         channel = ev.target()
@@ -828,7 +848,7 @@ class Basile(ircbot.SingleServerIRCBot):
         victime = ev.arguments()[0]
         raison = ev.arguments()[1]
         if victime == self.nick:
-            log(self.serveur, "%s kické de %s par %s (raison : %s)" % (victime, channel, auteur, raison))
+            log(self.serveur, u"%s kické de %s par %s (raison : %s)" % (victime, channel.decode("utf-8"), auteur, raison))
             time.sleep(2)
             serv.join(channel)
             l1, l2 = config.kick_answers, config.kick_actions