snipe

bot for a simple IRC game to make people say words
git clone https://a3nm.net/git/snipe/
Log | Files | Refs

commit 0daa0254d05891d39c58b033310b05693719cefd
parent 9d035c1f0f39eb80f17a3dfc57761152946955fa
Author: Antoine Amarilli <ant.amarilli@free.fr>
Date:   Fri, 20 May 2011 01:46:14 -0400

corrections blah blah

Diffstat:
snipe.py | 49+++++++++++++++++++++++++++++++------------------
1 file changed, 31 insertions(+), 18 deletions(-)

diff --git a/snipe.py b/snipe.py @@ -17,16 +17,11 @@ name = "arbitre" dump_file = "game.dmp" help = [ - "Sur ce canal, le but est de faire dire des mots aux autres joueurs.", - "Faire dire un mot de ta liste à quelqu'un te fait gagner des points.", - "Dire un mot de la liste d'un autre joueur t'en fait perdre.", - "Bien entendu, les listes sont confidentielles.", - "Si tu es bloqué, tu peux payer "+ - fmt_score(abort_penalty)+ - " pour retirer un mot de ta liste", - "Il suffit de me dire le mot que tu veux retirer.", - "Pour relire ce message plus tard, il suffit de me dire \"help\"", - "Pour avoir le classement, dis \"rank\""] + "Chaque joueur a une liste secrète de mots qui lui rapportent des points.", + "Lorsque quelqu'un les dit, il perd des points et le joueur en gagne.", + "Si un mot est trop dur, dis-le moi et je t'en donne un autre contre "+ + fmt_score(abort_penalty), + "Commandes : \"help\", \"info\", \"rank\""] def parse(line): m = re.match("\[([^]]*?)\] <([^>]*?)> (.*)", line.rstrip()) @@ -149,10 +144,12 @@ if ok: game = pickle.load(f) f.close() -for line in sys.stdin.readlines(): - try: +try: + while True: + line = sys.stdin.readline() + if (not line): + break chan, speaker, message, to_us = parse(line) - #print(message) if speaker not in list(game.keys()): game[speaker] = Player(speaker) game[speaker].welcome() @@ -165,6 +162,8 @@ for line in sys.stdin.readlines(): game[speaker].report() elif message == "rank": say_to(chan, speaker, ranking(game)) + elif message == "info": + game[speaker].report() else: if game[speaker].abort(message): say_to(chan, speaker, @@ -173,22 +172,36 @@ for line in sys.stdin.readlines(): game[speaker].report() else: say_to(chan, speaker, - ["Ce mot ne fait pas partie de ta liste"]) + ["Ce mot n'est pas dans ta liste. Pour de l'aide, fais " + + "\"help\"."]) else: words = split(message) + todo = [] for word in words: for player in game.values(): if player.name != speaker: score = player.succeed(word) if score > 0: lose = int(score / 2) - say_to(chan, speaker, ["!!! *%s*! %s gagne %s et %s perd %s." % ( + msg = ["*** %s ! %s gagne %s et %s perd %s." % ( word, player.name, fmt_score(score), speaker, - fmt_score(lose))]) + fmt_score(lose))] + say_to(chan, speaker, msg) + todo.append((player.name, + "%s a dit \"%s\" et t'a fait gagner %s." % (speaker, + word, fmt_score(score)))) + todo.append((speaker, + "Tu as dit \"%s\", tu as fait gagner %s à %s et tu as " + "perdu %s." % (word, fmt_score(score), player.name, + fmt_score(lose)))) game[speaker].score -= lose + for (player, msg) in todo: + game[player].private_message([msg]) + for player in set([t[0] for t in todo]): + game[player].report() - except KeyboardInterrupt: - break +except KeyboardInterrupt: + pass f = open(dump_file, 'wb+') pickle.dump(game, f)