]> gitweb.pimeys.fr Git - bots/deconnaisseur.git/blobdiff - deconnaisseur.py
Scores pickle-mémorisés
[bots/deconnaisseur.git] / deconnaisseur.py
index 047ea8108385a8b8278d04c3a4b9e58cf99818b0..666f60a61fb88b17a683b7a6ee9cead20c286206 100755 (executable)
@@ -30,6 +30,7 @@ Ttrig=600 #between two enigms
 config_time_incompressible=60 #on peut pas retrigger en dessous de ce temps (60)
 config_time_incompressible_clue=60 #on peut pas forcer la demande d'indice en dessous
 
+config_score_file="scores.pickle"
 
 class UnicodeBotError(Exception):
     pass
@@ -79,6 +80,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))
@@ -181,7 +183,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 +299,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.get_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:
@@ -370,10 +385,28 @@ class Deconnaisseur(ircbot.SingleServerIRCBot):
                 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 get_scores(self):
+        f=open(config_score_file)
+        scores=pickle.load(f)
+        f.close()
+        return scores
+
+    def scoreplus(self,pseudo):
+        scores=self.get_scores()
+        if scores.has_key(pseudo):
+            scores[pseudo]+=1
+        else:
+            scores[pseudo]=1
+        self.save_scores(scores)
 
+    def save_scores(self,scores):
+        f=open(config_score_file,"w")
+        pickle.dump(scores,f)
+        f.close()
 
 if __name__=="__main__":
     import sys