]> gitweb.pimeys.fr Git - bots/basile.git/blobdiff - basile.py
"dégage" n'updatait pas la chanlist
[bots/basile.git] / basile.py
index f92fe673855077abf151c54ddf6bc5c1f30c9c54..10433ccfe39a2abe54db1dd83863c27c85becc73 100755 (executable)
--- a/basile.py
+++ b/basile.py
@@ -106,17 +106,18 @@ 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",u"vomit sur",u"slap(|s)"]
+config_action_trigger=[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 ?",
 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"]
+config_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_bonjour=[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"]
 
 
@@ -229,9 +230,10 @@ def is_merci(chain):
 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"^",apres=" %s($|\.| |,|;).*"%(pseudo))
+    return is_something(chain,config_action_trigger,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())
 
 
       
@@ -432,15 +434,18 @@ class Basile(ircbot.SingleServerIRCBot):
  HELP       Affiche de l'aide sur une commande.
  CONNECT    Ouvre une connection au serveur Note Kfet.
  IDENTIFY   Me permet de savoir qui tu es sur la note kfet.
- DROP       Me fait oublier ton identité."""
+ DROP       Me fait oublier ton identité.
+ SOLDE      Obtenir ton solde"""
             helpmsg_ops="""
  JOIN       Faire rejoindre un chan
  LEAVE      Faire quitter un chan
  QUIET      Se taire sur un chan
  NOQUIET    Opposé de QUIET
- LOST       Perdre sur un chan"""
+ LOST       Perdre sur un chan
+ SOLDE <pseudo>  Donner le solde de quelqu'un"""
             helpmsg_overops="""
- SAY        Fais envoyer un message sur un chan ou à une personne
+ SAY        Fait envoyer un message sur un chan ou à une personne
+ DO         Fait faire une action sur un chan
  STAY       Ignorera les prochains LEAVE pour un chan
  NOSTAY     Opposé de STAY
  DIE        Mourir"""
@@ -586,6 +591,22 @@ class Basile(ircbot.SingleServerIRCBot):
                 serv.privmsg(auteur,"Syntaxe : SAY <channel> <message>")
             else:
                 notunderstood=True
+        elif cmd=="do":
+            if auteur in self.overops and len(message)>2:
+                serv.action(message[1]," ".join(message[2:]))
+                log(self.serveur,"priv",auteur," ".join(message))
+            elif len(message)<=2:
+                serv.privmsg(auteur,"Syntaxe : DO <channel> <action>")
+            else:
+                notunderstood=True
+        elif cmd=="kick":
+            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)<=2:
+                serv.privmsg(auteur,"Syntaxe : KICK <channel> <pseudo>")
+            else:
+                notunderstood=True
         elif cmd=="lost":
             if auteur in self.ops and len(message)>1:
                 serv.privmsg(message[1],"J'ai perdu !")
@@ -594,6 +615,33 @@ class Basile(ircbot.SingleServerIRCBot):
                 serv.privmsg(auteur,"Syntaxe : LOST <channel>")
             else:
                 notunderstood=True
+        elif cmd=="solde":
+            if len(message)==1:
+                if self.identities.has_key(auteur):
+                    try:
+                        self.nk.write('search ["x",["pseudo"],%s]'%(json.dumps(self.identities[auteur])))
+                        ret=json.loads(self.nk.read())
+                        solde=ret["msg"][0]["solde"]
+                        pseudo=ret["msg"][0]["pseudo"]
+                    except Exception as exc:
+                        print exc
+                        serv.privmsg(auteur,"failed")
+                        log(self.serveur,"priv",auteur," ".join(message)+"[failed]")
+                        return
+                    serv.privmsg(auteur,"%s (%s)"%(float(solde)/100,pseudo.encode("utf8")))
+                else:
+                    serv.privmsg(canal,"Je ne connais pas ton pseudo note.")
+            elif auteur in self.ops:
+                try:
+                    self.nk.write('search ["x",["pseudo"],%s]'%(json.dumps(message[1])))
+                    ret=json.loads(self.nk.read())
+                    solde=ret["msg"][0]["solde"]
+                    pseudo=ret["msg"][0]["pseudo"]
+                except Exception as exc:
+                    serv.privmsg(auteur,"failed")
+                    log(self.serveur,"priv",auteur," ".join(message)+"[failed]")
+                    return
+                serv.privmsg(auteur,"%s (%s)"%(float(solde)/100,pseudo.encode("utf8")))
         else:
             notunderstood=True
         if notunderstood:
@@ -630,6 +678,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]")
@@ -660,8 +710,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))
 
@@ -728,7 +778,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]
@@ -749,7 +799,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]
@@ -760,7 +810,7 @@ class Basile(ircbot.SingleServerIRCBot):
                 and re.match((u"^("+"|".join(config_bonjour)+").*").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:
@@ -796,13 +846,20 @@ class Basile(ircbot.SingleServerIRCBot):
         action = ev.arguments()[0]
         auteur = irclib.nm_to_n(ev.source())
         channel = ev.target()
+        try:
+            test=bot_unicode(action)
+        except UnicodeBotError:
+            serv.privmsg(channel,
+              "%s : Euh, tu fais de la merde avec ton encodage là, j'ai failli crasher…"%(auteur))
+            return
         mypseudo=serv.get_nickname()
-        if is_action_trigger(action,mypseudo):
+        
+        if is_action_trigger(action,mypseudo) and not channel in self.quiet_channels:
             l1,l2=config_action_answers,config_action_actions
             n1,n2=len(l1),len(l2)
             i=random.randrange(n1+n2)
             if i>=n1:
-                serv.action(channel,l2[i-n1])
+                serv.action(channel,l2[i-n1].encode("utf8"))
             else:
                 serv.privmsg(channel,"%s: %s"%(auteur,l1[i].encode("utf8")))