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
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))
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)
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
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:
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()!=[]:
tryother=True
if tryother:
if self.play_status.get(canal,[-1])[0] in [1,2]:
- answer=self.play_status[canal][4]
- 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 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