]> gitweb.pimeys.fr Git - bots/basile.git/blobdiff - basile.py
Renommages de variables
[bots/basile.git] / basile.py
index 58b7173a72abf04b8a4295ecdceaf1c3fd2bd56c..6f306509a0d77cea48229c016d59be130ddec6af 100755 (executable)
--- a/basile.py
+++ b/basile.py
@@ -82,7 +82,7 @@ config_time_between_perdu_trigger=3600*3 #temps moyen pour perdre en l'absence d
 config_time_between_perdu_trigger_delta = 30*60 #marge autorisée autour de ^^^
 config_time_between_perdu=30*60 #temps pendant lequel on ne peut pas perdre
 
-config_tag=[u"t(|a)g",u"ta gueule",u"la ferme",u"ferme( |-)la",u"tais-toi",u"chut"]
+config_tag_triggers=[u"t(|a)g",u"ta gueule",u"la ferme",u"ferme( |-)la",u"tais-toi",u"chut"]
 config_tag_actions=[u"se tait",u"ferme sa gueule",u"se la ferme",u"la ferme"]
 config_tag_answers=[u"J'me tais si j'veux !",
 u"Je t'entends pas :°",
@@ -90,36 +90,42 @@ u"Héhé, try again",
 u"Non, j'ai pas envie",
 u"Peut-être quand toi tu la fermeras, et encore…"]
 
-config_tesla=[u"t('|u )es là \?",u"\?",u"plop \?",u"plouf \?"]
+config_tesla_triggers=[u"t('|u )es là \?",u"\?",u"plop \?",u"plouf \?"]
 config_tesla_answers=[u"Oui, je suis là",u"Oui ?",u"En quoi puis-je me rendre utile ?"]
 config_tesla_actions=[u"est là",u"attend des instructions",u"is alive"]
 
-config_compliment=[u"gentil",u"cool",u"sympa"]
+config_compliment_triggers=[u"gentil",u"cool",u"sympa"]
 config_compliment_answers=[u"Merci, c'est gentil :)",u"Je te retourne le compliment",u"C'est gentil ça."]
 
-config_merci=[u"merci",u"remercie",u"thx",u"thank(|s)"]
+config_merci_triggers=[u"merci",u"remercie",u"thx",u"thank(|s)"]
 config_merci_answers=[u"Mais de rien.",u"À ton service ;)",u"Quand tu veux ^^",
 u"Tout le plaisir est pour moi."]
 
-config_tamere=[u"ta mère"]
+config_tamere_triggers=[u"ta mère"]
 config_tamere_answers=[u"Laisse ma mère en dehors de ça !",
 u"Tu veux qu'on parle de ta soœur ?",
 u"Et la tienne ?",
 u"Ce que fait ma mère c'est comme ce que tu fais avec ta bite, ça nous regarde pas…",
-u"♩ J'ai vu ta mère sur chat rouleeeeeeette ♫"
+u"♩ J'ai vu ta mère sur chat rouleeeeeeette ♫",
 u"On avait dit \"pas les mamans\""]
 
-config_action_trigger=[u"(frappe|cogne|tape)(| sur)",u"(démolit|dégomme|fouette|agresse)",
+config_bad_action_triggers=[u"(frappe|cogne|tape)(| sur)",u"(démolit|dégomme|fouette|agresse)",
 u"vomit sur",u"slap(|s)"]
-config_action_answers=[u"Hey ! Mais qu'est-ce que j'ai fait ?",
+config_bad_action_answers=[u"Hey ! Mais qu'est-ce que j'ai fait ?",
 u"Pourquoi moi ?",
 u"Mais euh…",
 u"Mais j'ai rien demandé moi !"]
-config_action_actions=[u"prend de la distance, par précaution…",u"part en courant",u"esquive"]
+config_bad_action_actions=[u"prend de la distance, par précaution…",u"part en courant",u"esquive"]
 
-config_bonjour=[u"(s|)(a|'|)lu(t|)",u"hello",u"plop",u"plip",u"pr(ou|ü)t",u"bonjour",u"bonsoir"]
+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_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_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 {}"]
 
 config_thisfile= os.path.realpath( __file__ )
 def get_filesize():
@@ -220,20 +226,23 @@ def is_not_insult(chain):
 def is_perdu(chain):
     return is_something(chain,config_perdu)
 def is_tag(chain):
-    return is_something(chain,config_tag)
+    return is_something(chain,config_tag_triggers)
 def is_gros(chain):
     return is_something(chain,config_gros)
 def is_tesla(chain):
-    return is_something(chain,config_tesla,avant=u"^",apres=u"$",debug=True)
+    return is_something(chain,config_tesla_triggers,avant=u"^",apres=u"$",debug=True)
 def is_merci(chain):
-    return is_something(chain,config_merci)
+    return is_something(chain,config_merci_triggers)
 def is_tamere(chain):
-    return is_something(chain,config_tamere)
-def is_action_trigger(chain,pseudo):
-    return is_something(chain,config_action_trigger,avant=u"^",
+    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))
+def is_good_action_trigger(chain,pseudo):
+    return is_something(chain,config_good_action_triggers,avant=u"^",
                             apres="( [a-z]*ment)? %s($|\.| |,|;).*"%(pseudo))
 def is_pan(chain):
-    return re.match(u"^(pan|bim|bang)$",unicode(chain,"utf8").lower().strip())
+    return re.match(u"^(pan|bim|bang) .*$",unicode(chain,"utf8").lower().strip())
 
 
       
@@ -299,6 +308,7 @@ class Basile(ircbot.SingleServerIRCBot):
         serv.nick(config_irc_pseudo)
     
     def on_welcome(self, serv, ev):
+        self.serv=serv # ça serv ira :)
         self.give_me_my_pseudo(serv)
         serv.privmsg("NickServ","identify %s"%(config_irc_password))
         log(self.serveur,"Connected")
@@ -383,7 +393,7 @@ class Basile(ircbot.SingleServerIRCBot):
                                                (auteur,fille,verbe)).encode("utf8"))
     def pourmoi(self, serv, message):
         """renvoie (False,lemessage) ou (True, le message amputé de "pseudo: ")"""
-        pseudo=serv.get_nickname()
+        pseudo=self.nick
         size=len(pseudo)
         if message[:size]==pseudo and len(message)>size and message[size]==":":
             return (True,message[size+1:].lstrip(" "))
@@ -600,10 +610,10 @@ class Basile(ircbot.SingleServerIRCBot):
             else:
                 notunderstood=True
         elif cmd=="kick":
-            if auteur in self.overops and len(message)>3:
-                serv.kick(message[1],message[2],raison=" ".join(message[3:]))
+            if auteur in self.overops and len(message)>2:
+                serv.kick(message[1],message[2]," ".join(message[3:]))
                 log(self.serveur,"priv",auteur," ".join(message))
-            elif len(message)<=3:
+            elif len(message)<=2:
                 serv.privmsg(auteur,"Syntaxe : KICK <channel> <pseudo>")
             else:
                 notunderstood=True
@@ -678,6 +688,8 @@ class Basile(ircbot.SingleServerIRCBot):
                                            or auteur in self.overops):
                     serv.part(canal,message="Éjecté par %s"%(auteur))
                     log(self.serveur,canal,auteur,message+"[successful]")
+                    if canal in self.chanlist:
+                        self.chanlist.remove(canal)
                 else:
                     serv.privmsg(canal,"%s: Non, je reste !"%(auteur))
                     log(self.serveur,canal,auteur,message+"[failed]")
@@ -708,8 +720,8 @@ class Basile(ircbot.SingleServerIRCBot):
                     serv.nick(become)
                     log(self.serveur,canal,auteur,message+"[successful]")
     
-            elif cmd in ["coucou"] and not canal in self.quiet_channels:
-                serv.privmsg(canal,"%s: coucou"%(auteur))
+            if cmd in ["meur", "meurt","meurre","meurres"] and not canal in self.quiet_channels:
+                serv.privmsg(canal,'%s: Mourir, impératif, 2ème personne du singulier : "meurs" (de rien)'%(auteur))
             elif cmd in ["ping"] and not canal in self.quiet_channels:
                 serv.privmsg(canal,"%s: pong"%(auteur))
 
@@ -756,7 +768,7 @@ class Basile(ircbot.SingleServerIRCBot):
                 n1,n2=len(l1),len(l2)
                 i=random.randrange(n1+n2)
                 if i>=n1:
-                    serv.action(canal,l2[i-n1])
+                    serv.action(canal,l2[i-n1].encode("utf8"))
                 else:
                     serv.privmsg(canal,"%s: %s"%(auteur,l1[i].encode("utf8")))
             if is_tamere(message) and not canal in self.quiet_channels:
@@ -776,7 +788,7 @@ class Basile(ircbot.SingleServerIRCBot):
                 answer=random.choice(config_merci_answers)
                 for ligne in answer.split("\n"):
                     serv.privmsg(canal,"%s: %s"%(auteur,ligne.encode("utf8")))
-            out=re.match(u"^([A-Z[]|\\|[0-9]+|(¹|²|³|⁴|⁵|⁶|⁷|⁸|⁹|⁰)+)(?:| \?| !)$",
+            out=re.match(ur"^([A-Z[]|\\|[0-9]+|(¹|²|³|⁴|⁵|⁶|⁷|⁸|⁹|⁰)+)(?:| \?| !)$",
                          unicode(message.upper(),"utf8"))
             if out and not canal in self.quiet_channels:
                 out=out.groups()[0]
@@ -797,7 +809,7 @@ class Basile(ircbot.SingleServerIRCBot):
                     serv.privmsg(canal,"%s: pfff, j'ai l'air malin maintenant… [ ?"%(auteur))
                 elif out in "[\\":
                     serv.privmsg(canal,"%s: nan mais il faut qu'on arrête, ça va finir par poser des problèmes…"%(auteur))
-                elif re.match(r"(¹|²|³|⁴|⁵|⁶|⁷|⁸|⁹|⁰)+",out):
+                elif re.match(ur"(¹|²|³|⁴|⁵|⁶|⁷|⁸|⁹|⁰)+",out):
                     def translate(mess):
                         return "".join([{u"⁰¹²³⁴⁵⁶⁷⁸⁹0123456789"[i]:u"0123456789⁰¹²³⁴⁵⁶⁷⁸⁹"[i]
                                         for i in range(20)}[j]
@@ -805,10 +817,10 @@ class Basile(ircbot.SingleServerIRCBot):
                     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)+").*").lower(),message.lower()) ):
+                and re.match((u"^("+"|".join(config_bonjour_triggers)+").*").lower(),message.lower()) ):
                 answer=random.choice(config_bonjour_answers)
                 serv.privmsg(canal,answer.format(auteur).encode("utf8"))
-            if is_pan(message):
+            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:
             if message in ["!pain au chocolat","!chocolatine"] and not canal in self.quiet_channels:
@@ -824,8 +836,8 @@ class Basile(ircbot.SingleServerIRCBot):
                 serv.privmsg(canal,"%s: %s"%(auteur,answer))
             if not canal in self.quiet_channels:
                 self.try_tamere(serv,canal,auteur,message)
-                mypseudo=serv.get_nickname()
-                if re.match((u"^("+u"|".join(config_bonjour)
+                mypseudo=self.nick
+                if re.match((u"^("+u"|".join(config_bonjour_triggers)
                                   +u")( {}| all| tout le monde|(|à) tous)(\.|( |)!|)$"
                              ).format(mypseudo).lower(), message.strip().lower()):
                     answer=random.choice(config_bonjour_answers)
@@ -850,10 +862,10 @@ class Basile(ircbot.SingleServerIRCBot):
             serv.privmsg(channel,
               "%s : Euh, tu fais de la merde avec ton encodage là, j'ai failli crasher…"%(auteur))
             return
-        mypseudo=serv.get_nickname()
+        mypseudo=self.nick
         
-        if is_action_trigger(action,mypseudo) and not channel in self.quiet_channels:
-            l1,l2=config_action_answers,config_action_actions
+        if is_bad_action_trigger(action,mypseudo) and not channel in self.quiet_channels:
+            l1,l2=config_bad_action_answers,config_bad_action_actions
             n1,n2=len(l1),len(l2)
             i=random.randrange(n1+n2)
             if i>=n1:
@@ -861,6 +873,28 @@ class Basile(ircbot.SingleServerIRCBot):
             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()
+        victime = ev.arguments()[0]
+        raison = ev.arguments()[1]
+        if victime==self.nick:
+            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
+            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 _getnick(self):
+        return self.serv.get_nickname()
+    nick=property(_getnick)
+
+
 if __name__=="__main__":
     import sys
     if len(sys.argv)==1: