X-Git-Url: http://gitweb.pimeys.fr/?a=blobdiff_plain;f=deconnaisseur.py;h=9444519bc7ca3eb60f9c2931b55f3464cb306309;hb=35aaf028252abc0c87f200efd32ba36f25c10f00;hp=666f60a61fb88b17a683b7a6ee9cead20c286206;hpb=6e0a322ad3ba10ee7415808b91d21fa6ff1d1058;p=bots%2Fdeconnaisseur.git diff --git a/deconnaisseur.py b/deconnaisseur.py index 666f60a..9444519 100755 --- a/deconnaisseur.py +++ b/deconnaisseur.py @@ -80,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)) @@ -126,7 +125,7 @@ class Deconnaisseur(ircbot.SingleServerIRCBot): if self.play_status[channel][0]==1: if token==None: # c'est donc que l'indice a été demandé - if self.play_status[channe][-1]+config_time_incompressible_clue [] 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) @@ -191,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 @@ -300,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.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])) + 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: @@ -375,6 +438,8 @@ class Deconnaisseur(ircbot.SingleServerIRCBot): serv.privmsg(canal,"%s: Rappel : %s"%(auteur,self.play_status[canal][1])) else: serv.privmsg(canal,"%s: pas ici…"%(auteur)) + if cmd=="indice" and canal in self.play_channels: + self.give_indice(serv,canal,None) else: tryother=True else: @@ -385,7 +450,7 @@ 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)) @@ -395,12 +460,12 @@ class Deconnaisseur(ircbot.SingleServerIRCBot): f.close() return scores - def scoreplus(self,pseudo): + def add_score(self,pseudo,value): scores=self.get_scores() if scores.has_key(pseudo): - scores[pseudo]+=1 + scores[pseudo]+=value else: - scores[pseudo]=1 + scores[pseudo]=value self.save_scores(scores) def save_scores(self,scores):