X-Git-Url: http://gitweb.pimeys.fr/?a=blobdiff_plain;f=deconnaisseur.py;h=f2e405c50e7669604b297f03b5e56895bc843268;hb=6a778527b32b182c8b8d8984fd71dce45e914296;hp=d2da16a3e437d46d403487574c26bfd781eb1fbf;hpb=f97e98371d21f660a68a0c37a47fe9354ef5d4e8;p=bots%2Fdeconnaisseur.git diff --git a/deconnaisseur.py b/deconnaisseur.py index d2da16a..f2e405c 100755 --- a/deconnaisseur.py +++ b/deconnaisseur.py @@ -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,7 +80,6 @@ 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)) @@ -183,6 +183,7 @@ class Deconnaisseur(ircbot.SingleServerIRCBot): if cmd=="help": helpmsg_default="""Liste des commandes : HELP Affiche ce message d'aide + SCORE Affiche ton score (SCORE TRANSFERT [] pour transférer des points) SCORES Affiche les scores""" helpmsg_ops=""" JOIN Faire rejoindre un channel (sans paramètres, donne la liste des chans actuels) @@ -190,6 +191,7 @@ class Deconnaisseur(ircbot.SingleServerIRCBot): PLAY Passe un channel en mode "jouer" NOPLAY Passe un channel en mode "ne pas jouer" """ helpmsg_overops=""" + SCORES {DEL|ADD|SUB} Tu veux un dessin ? SAY Fais envoyer un message sur un chan ou à une personne STAY Ignorera les prochains LEAVE pour un chan NOSTAY Opposé de STAY @@ -299,17 +301,79 @@ class Deconnaisseur(ircbot.SingleServerIRCBot): if auteur in self.overops: self.die() elif cmd=="score": - serv.privmsg(auteur,"Votre score : %s"%(self.scores.get(auteur,0)) ) + if len(message)>1: + if len(message) in [3,4] and message[1].lower()=="transfert": + scores=self.get_scores() + de,to=auteur,message[2] + value=scores.get(de,0) + if len(message)==4: + try: + asked=int(message[3]) + except ValueError: + serv.privmsg(auteur,"Syntaxe : SCORE TRANSFERT []") + return + else: + asked=value + if value==0: + serv.privmsg(auteur,"Vous n'avez pas de points") + return + elif asked<=0: + serv.privmsg(auteur,"Bien tenté…") + return + elif asked>value: + serv.privmsg(auteur,"Vous n'avez que %s points"%(value)) + return + else: + self.add_score(de,-asked) + self.add_score(to,asked) + serv.privmsg(auteur,"Transfert de %s points de %s à %s"%(asked,de,to)) + else: + serv.privmsg(auteur,"Syntaxe : SCORE TRANSFERT []") + else: + serv.privmsg(auteur,"Votre score : %s"%(self.get_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])) + if len(message)==1: + scores=self.get_scores().items() + # trie par score + scores.sort(lambda x,y:cmp(x[1],y[1])) + 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].lower(),y[0].lower())) + scores.reverse() + serv.privmsg(auteur,"Scores by pseudo : "+" ; ".join(["%s %s"%(i[0],i[1]) for i in scores])) + elif auteur in self.overops: + souscmd=message[1].lower() + if souscmd=="del": + if len(message)==3: + todelete=message[2] + scores=self.get_scores() + if scores.has_key(todelete): + del scores[todelete] + self.save_scores(scores) + serv.privmsg(auteur,"Score de %s supprimé"%(todelete)) + else: + serv.privmsg(auteur,"Ce score n'existe pas : %s"%(todelete)) + else: + serv.privmsg(auteur,"Syntaxe : SCORES DEL ") + elif souscmd in ["add","sub"]: + if len(message)==4: + toadd,val=message[2],message[3] + try: + val=int(val) + except ValueError: + serv.privmsg(auteur,"Syntaxe : SCORES {ADD|SUB} ") + return + if souscmd=="sub": + val=-val + self.add_score(toadd,val) + serv.privmsg(auteur,"Done") + else: + serv.privmsg(auteur,"Syntaxe : SCORES {ADD|SUB} ") + else: + serv.privmsg(auteur,"Syntaxe : SCORES {DEL|ADD|SUB} []") + else: + notunderstood=True else: notunderstood=True if notunderstood: @@ -384,16 +448,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) + self.add_score(auteur,1) 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): - if self.scores.has_key(pseudo): - self.scores[pseudo]+=1 + def add_score(self,pseudo,value): + scores=self.get_scores() + if scores.has_key(pseudo): + scores[pseudo]+=value else: - self.scores[pseudo]=1 + scores[pseudo]=value + 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