]> gitweb.pimeys.fr Git - bots/basile.git/blobdiff - basile.py
Meilleure gestion de la blacklist
[bots/basile.git] / basile.py
index c8518c46ebf394c1ef052f534ff50b4640a8c6e9..c71ec0e033f1a0f5c9d432470c7b7703f7ba9889 100755 (executable)
--- a/basile.py
+++ b/basile.py
@@ -56,14 +56,15 @@ def log(serveur, channel, auteur=None, message=None):
 
 def ignore_event(serv, ev):
     """Retourne ``True`` si il faut ignorer cet évènement."""
-    for (blackmask, exceptmask) in config.blacklisted_masks:
+    for (blackmask, exceptlist) in config.blacklisted_masks:
         usermask = ev.source()
-        if exceptmask is None:
-            exceptit = False
-        else:
-            exceptit = bool(irclib.mask_matches(usermask, exceptmask))
         blackit = bool(irclib.mask_matches(usermask, blackmask))
-        return blackit and not exceptit
+        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."""
@@ -347,6 +348,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:
@@ -591,6 +594,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]
@@ -804,6 +809,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()