]> gitweb.pimeys.fr Git - bots/basile.git/blobdiff - basile.py
PEB en overop
[bots/basile.git] / basile.py
index e456eb34ca01f6697f36b708c9aa033572097778..8d2015bf99d4af75223d277f47295fcb48f4933a 100755 (executable)
--- a/basile.py
+++ b/basile.py
@@ -32,8 +32,8 @@ config_logfile_template="basile.%s.log"
 def get_config_logfile(serveur):
     serveurs={"acoeur.crans.org":"acoeur","irc.crans.org":"crans"}
     return config_logfile_template%(serveurs[serveur])
-config_overops=["[20-100]","[20-100]_"]
-config_ops=["PEB","Nit"]
+config_overops=["[20-100]","[20-100]_", "PEB"]
+config_ops=["Nit"]
 config_report_bugs_to=["[20-100]"]
 
 config_insultes=[u"conna(rd|sse)",u"pute",u"con(|ne)",u"enf(oiré|lure)",
@@ -117,13 +117,16 @@ u"Mais euh…",
 u"Mais j'ai rien demandé moi !"]
 config_bad_action_actions=[u"prend de la distance, par précaution…",u"part en courant",u"esquive"]
 
-config_good_action_triggers=[u"fait (des bisous|un calin) à",u"embrasse",u"caline",u"caresse"]
-config_good_ction_answers=[u"owi \o/",u"{}: c'est gentil ! ♡"]
-config_good_action_acions=[u"ronronne",u"est content"]
+config_good_action_triggers=[u"fait (:?des bisous|un c(?:â|a)lin|des c(?:â|a)lins) à",u"embrasse",u"c(?:â|a)line",u"caresse"]
+config_good_action_answers=[u"owi \o/",u"c'est gentil ! ♡"]
+config_good_action_actions=[u"ronronne",u"est content"]
 
 config_bonjour_triggers=[u"(s|)(a|'|)lu(t|)",u"hello",u"pl(o|i)p",u"pr(ou|ü)t",u"bonjour",u"bonsoir",u"coucou"]
 config_bonjour_answers=[u"Salut {}",u"Hello {} :)",u"Bonjour {}",u"Hello {}",u"{}: hello",u"{}: bonjour"]
 
+config_bonne_nuit_triggers=[u"bonne nuit",u"'?nite",u"'?nuit",u"'?night",u"good night",u"'?nunuit"]
+config_bonne_nuit_answers=[u"{}: sweet dreams ;)",u"Bonne nuit {} !",u"À demain {}. :)","{}: dors bien ^^"]
+
 config_kick_answers=[u"Ben qu'est-ce que j'ai fait ? :(",u"Mais euh, j'ai rien fait de mal…","{} a le /kick facile :)"]
 config_kick_actions=[u"se tiendra à carreaux",u"essaiera de ne plus provoquer les foudres de {}"]
 
@@ -212,11 +215,11 @@ def is_something(chain,matches,avant=u".*(?:^| )",apres=u"(?:$|\.| |,|;).*",case
     return o
 
 def is_insult(chain,debug=True):
-    return is_something(chain,config_insultes,avant=".*(^| |')")
+    return is_something(chain,config_insultes,avant=".*(?:^| |')")
 def is_not_insult(chain):
     chain=unicode(chain,"utf8")
     insult_regexp=u"("+u"|".join(config_insultes)+u")"
-    middle_regexp=u"(un(|e) ((putain|enfoiré) d(e |'))*|)(| super )( (gros|petit|grand|énorme) |)"
+    middle_regexp=u"(une? (?:(?:putain|enfoiré) d(?:e |'))*|)(?:| super )(?: (?:gros|petit|grand|énorme) |)"
     reg=".*pas %s%s.*"%(middle_regexp,insult_regexp)
     if re.match(reg,chain):
         return True
@@ -236,10 +239,14 @@ def is_tamere(chain):
     return is_something(chain,config_tamere_triggers)
 def is_bad_action_trigger(chain,pseudo):
     return is_something(chain,config_bad_action_triggers,avant=u"^",
-                            apres="( [a-z]*ment)? %s($|\.| |,|;).*"%(pseudo))
+                            apres="(?: [a-z]*ment)? %s($|\.| |,|;).*"%(pseudo))
 def is_good_action_trigger(chain,pseudo):
     return is_something(chain,config_good_action_triggers,avant=u"^",
-                            apres="( [a-z]*ment)? %s($|\.| |,|;).*"%(pseudo))
+                            apres="(?: [a-z]*ment)? %s($|\.| |,|;).*"%(pseudo))
+def is_bonjour(chain):
+    return is_something(chain,config_bonjour_triggers,avant=u"^")
+def is_bonne_nuit(chain):
+    return is_something(chain,config_bonne_nuit_triggers,avant=u"^")
 def is_pan(chain):
     return re.match(u"^(pan|bim|bang) .*$",unicode(chain,"utf8").lower().strip())
 
@@ -666,7 +673,7 @@ class Basile(ircbot.SingleServerIRCBot):
             if not canal in self.quiet_channels:
                 serv.privmsg(canal,
                   "%s: Euh, tu fais de la merde avec ton encodage là, j'ai failli crasher…"%(auteur))
-                return
+            return
         pour_moi,message=self.pourmoi(serv,message)
         if pour_moi and message.split()!=[]:
             cmd=message.split()[0].lower()
@@ -816,10 +823,12 @@ class Basile(ircbot.SingleServerIRCBot):
                                        for j in mess])
                     out=int(translate(out))
                     serv.privmsg(canal,"%s: %s !"%(auteur,translate(str(out+1)).encode("utf8")))
-            if (not canal in self.quiet_channels
-                and re.match((u"^("+"|".join(config_bonjour_triggers)+").*").lower(),message.lower()) ):
+            if is_bonjour(message) and not canal in self.quiet_channels:
                 answer=random.choice(config_bonjour_answers)
                 serv.privmsg(canal,answer.format(auteur).encode("utf8"))
+            if is_bonne_nuit(message) and not canal in self.quiet_channels:
+                answer=random.choice(config_bonne_nuit_answers)
+                serv.privmsg(canal,answer.format(auteur).encode("utf8"))
             if is_pan(message) and not canal in self.quiet_channels:
                 serv.privmsg(canal,"%s: c'est pas sur moi qu'il faut tirer !"%(auteur))
         else:
@@ -872,7 +881,15 @@ class Basile(ircbot.SingleServerIRCBot):
                 serv.action(channel,l2[i-n1].encode("utf8"))
             else:
                 serv.privmsg(channel,"%s: %s"%(auteur,l1[i].encode("utf8")))
-
+        if is_good_action_trigger(action,mypseudo) and not channel in self.quiet_channels:
+            l1,l2=config_good_action_answers,config_good_action_actions
+            n1,n2=len(l1),len(l2)
+            i=random.randrange(n1+n2)
+            if i>=n1:
+                serv.action(channel,l2[i-n1].encode("utf8"))
+            else:
+                serv.privmsg(channel,"%s: %s"%(auteur,l1[i].encode("utf8")))
+    
     def on_kick(self,serv,ev):
         auteur = irclib.nm_to_n(ev.source())
         channel = ev.target()
@@ -882,13 +899,13 @@ class Basile(ircbot.SingleServerIRCBot):
             log(self.serveur,"%s kické par %s (raison : %s)" %(victime,auteur,raison))
             time.sleep(2)
             serv.join(channel)
-            l1,l2=config_kick_actions,config_kick_answers
+            l1,l2=config_kick_answers,config_kick_actions
             n1,n2=len(l1),len(l2)
             i=random.randrange(n1+n2)
             if i>=n1:
-                serv.action(channel,l2[i-n1].encode("utf8"))
+                serv.action(channel,l2[i-n1].format(auteur).encode("utf8"))
             else:
-                serv.privmsg(channel,"%s: %s"%(auteur,l1[i].encode("utf8")))
+                serv.privmsg(channel,"%s: %s"%(auteur,l1[i].format(auteur).encode("utf8")))
 
     def _getnick(self):
         return self.serv.get_nickname()