]> gitweb.pimeys.fr Git - bots/deconnaisseur.git/blobdiff - deconnaisseur.py
ne pas tenir compte des majuscules/minuscules sur l'ordre des pseudos pour l'affichag...
[bots/deconnaisseur.git] / deconnaisseur.py
index e0a50936dccfdb0fb43b7d686f6523dd7fd09834..d2da16a3e437d46d403487574c26bfd781eb1fbf 100755 (executable)
@@ -57,9 +57,9 @@ def tolere(regexp):
     reg=reg.replace(u"á",u"(á|a)").replace(u"à",u"(à|a)").replace(u"â",u"(â|a)").replace(u"ä",u"(ä|a)")
     reg=reg.replace(u"é",u"(é|e)").replace(u"è",u"(è|e)").replace(u"ê",u"(ê|e)").replace(u"ë",u"(ë|e)")
     reg=reg.replace(u"í",u"(í|i)").replace(u"ì",u"(ì|i)").replace(u"î",u"(î|i)").replace(u"ï",u"(ï|i)")
-    reg=reg.replace(u"ó",u"(ó|o)").replace(u"ò",u"(ò|o)").replace(u"ê",u"(ô|o)").replace(u"ö",u"(ö|o)")
-    reg=reg.replace(u"ú",u"(ú|u)").replace(u"ù",u"(ù|u)").replace(u"ê",u"(û|u)").replace(u"ü",u"(ü|u)")
-    reg=reg.replace(u"ý",u"(ý|y)").replace(u"ỳ",u"(ỳ|y)").replace(u"ê",u"(ŷ|y)").replace(u"ÿ",u"(ÿ|y)")
+    reg=reg.replace(u"ó",u"(ó|o)").replace(u"ò",u"(ò|o)").replace(u"ô",u"(ô|o)").replace(u"ö",u"(ö|o)")
+    reg=reg.replace(u"ú",u"(ú|u)").replace(u"ù",u"(ù|u)").replace(u"û",u"(û|u)").replace(u"ü",u"(ü|u)")
+    reg=reg.replace(u"ý",u"(ý|y)").replace(u"ỳ",u"(ỳ|y)").replace(u"ŷ",u"(ŷ|y)").replace(u"ÿ",u"(ÿ|y)")
     reg=reg.replace(u"œ",u"(œ|oe)").replace(u"æ",u"(æ|ae)")
     return reg
 
@@ -79,6 +79,7 @@ class Deconnaisseur(ircbot.SingleServerIRCBot):
         self.stay_channels=config_stay_channels
         self.play_channels=config_play_channels
         self.play_status={i:[0] for i in self.play_channels}
+        self.scores={}
 
     def give_me_my_pseudo(self,serv):
         serv.privmsg("NickServ","RECOVER %s %s"%(config_pseudo,config_password))
@@ -162,7 +163,7 @@ class Deconnaisseur(ircbot.SingleServerIRCBot):
     def pourmoi(self, serv, message):
         pseudo=serv.get_nickname()
         size=len(pseudo)
-        if message[:size]==pseudo and message[size]==":":
+        if message[:size]==pseudo and len(message)>size and message[size]==":":
             return (True,message[size+1:].strip(" "))
         else:
             return (False,message)
@@ -181,7 +182,8 @@ class Deconnaisseur(ircbot.SingleServerIRCBot):
         notunderstood=False
         if cmd=="help":
             helpmsg_default="""Liste des commandes :
- HELP       Affiche ce message d'aide"""
+ HELP       Affiche ce message d'aide
+ SCORES     Affiche les scores"""
             helpmsg_ops="""
  JOIN       Faire rejoindre un channel (sans paramètres, donne la liste des chans actuels)
  LEAVE      Faire quitter un channel
@@ -296,6 +298,18 @@ class Deconnaisseur(ircbot.SingleServerIRCBot):
         elif cmd=="die":
             if auteur in self.overops:
                 self.die()
+        elif cmd=="score":
+            serv.privmsg(auteur,"Votre score : %s"%(self.scores.get(auteur,0)) )
+        elif cmd=="scores":
+            scores=self.scores.items()
+            # trie par score
+            scores.sort(lambda x,y:cmp(x[1].lower(),y[1].lower()))
+            scores.reverse()
+            serv.privmsg(auteur,"Scores by score : "+" ; ".join(["%s %s"%(i[0],i[1]) for i in scores]))
+            # trie par pseudo
+            scores.sort(lambda x,y:cmp(x[0],y[0]))
+            scores.reverse()
+            serv.privmsg(auteur,"Scores by pseudo : "+" ; ".join(["%s %s"%(i[0],i[1]) for i in scores]))
         else:
             notunderstood=True
         if notunderstood:
@@ -308,9 +322,10 @@ class Deconnaisseur(ircbot.SingleServerIRCBot):
         try:
             test=bot_unicode(message)
         except UnicodeBotError:
-            serv.privmsg(canal,
-              "%s: Euh, tu fais de la merde avec ton encodage là, j'ai failli crasher…"%(auteur))
-            return
+            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
         tryother=False
         pour_moi,message=self.pourmoi(serv,message)
         if pour_moi and message.split()!=[]:
@@ -333,6 +348,7 @@ class Deconnaisseur(ircbot.SingleServerIRCBot):
                                            or auteur in self.overops):
                     serv.part(canal,message="Éjecté par %s"%(auteur))
                     log(canal,auteur,message+"[successful]")
+                    self.chanlist.remove(canal)
                 else:
                     serv.privmsg(canal,"%s: Non, je reste !"%(auteur))
                     log(canal,auteur,message+"[failed]")
@@ -364,13 +380,20 @@ class Deconnaisseur(ircbot.SingleServerIRCBot):
             tryother=True
         if tryother:
             if self.play_status.get(canal,[-1])[0] in [1,2]:
-                answer=self.play_status[canal][3]
-                if re.match(tolere(answer),unicode(message,"utf8").lower()):
+                answer_regexp=self.play_status[canal][3]
+                if re.match(tolere(answer_regexp),unicode(message,"utf8").lower()):
+                    answer=self.play_status[canal][4]
                     serv.privmsg(canal,"%s: bravo ! (C'était %s)"%(auteur,answer))
+                    self.scoreplus(auteur)
                     token=time.time()
                     self.play_status[canal]=[0,token]
                     serv.execute_delayed(random.randrange(Ttrig*5,Ttrig*10),self.start_enigme,(serv,canal,token))
 
+    def scoreplus(self,pseudo):
+        if self.scores.has_key(pseudo):
+            self.scores[pseudo]+=1
+        else:
+            self.scores[pseudo]=1
 
 if __name__=="__main__":
     import sys