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
notunderstood=False
if cmd=="help":
helpmsg_default="""Liste des commandes :
- HELP Affiche ce message d'aide"""
+ HELP Affiche ce message d'aide
+ SCORE Affiche ton score (SCORE TRANSFERT <pseudo> [<n>] 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)
LEAVE Faire quitter un channel
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
elif cmd=="die":
if auteur in self.overops:
self.die()
+ elif cmd=="score":
+ 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 <pseudo> [<n>]")
+ 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 <pseudo> [<n>]")
+ else:
+ serv.privmsg(auteur,"Votre score : %s"%(self.get_scores().get(auteur,0)) )
+ elif cmd=="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 <pseudo>")
+ 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} <pseudo> <n>")
+ return
+ if souscmd=="sub":
+ val=-val
+ self.add_score(toadd,val)
+ serv.privmsg(auteur,"Done")
+ else:
+ serv.privmsg(auteur,"Syntaxe : SCORES {ADD|SUB} <pseudo> <n>")
+ else:
+ serv.privmsg(auteur,"Syntaxe : SCORES {DEL|ADD|SUB} <pseudo> [<n>]")
+ else:
+ notunderstood=True
else:
notunderstood=True
if notunderstood:
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.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 add_score(self,pseudo,value):
+ scores=self.get_scores()
+ if scores.has_key(pseudo):
+ scores[pseudo]+=value
+ else:
+ 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