diff --git a/asmodee.py b/asmodee.py index 7c3aacf..8a41ff3 100755 --- a/asmodee.py +++ b/asmodee.py @@ -32,6 +32,7 @@ bot = None clock = {} stats = {} quotes = {} +bieres = {} admins = [] # Admins du bot def horloge_read(): @@ -60,6 +61,15 @@ def quotes_read(): quotes = loader.load() except: quotes = {} + +def bieres_read(): + global bieres + try: + with open("bieres", "rb") as fichier: + loader = pickle.Unpickler(fichier) + bieres = loader.load() + except: + bieres = {} def signal_handler(signal, frame): with open("horloge", "wb") as fichier: @@ -71,6 +81,9 @@ def signal_handler(signal, frame): with open("quotes", "wb") as fichier: saver = pickle.Pickler(fichier) saver.dump(quotes) + with open("bieres", "wb") as fichier: + saver = pickle.Pickler(fichier) + saver.dump(bieres) sys.exit(0) class Userstats: #Pour garder des stats sur les users @@ -1030,6 +1043,122 @@ def quote(room,event): reponses(room,phrases) else: room.send_text("Je n'ai pas de citations pour ce salon") + +def biere(room,event): + global bieres + args = event['content']['body'].split() + args.pop(0) + brevages = {} + give = False + elu = "" + envoyeur = getNick(room,event) + + try: + breuvages = bieres[room.room_id] + except: + breuvages = {} + + if (len(args) > 1 and args[0] == "give"): + give = True + args.pop(0) + submit = " ".join(args).split(":") + elu = submit[0] + try: + args = submit[1].split() + except: + args = "" + if (len(args) > 3 and args[0] == "add"): + #ajoute une biere + args.pop(0) + submit = " ".join(args).split(":") + if (len(submit) > 1): + # Ajout de la citation + nick = submit[0].strip() + submit.pop(0) + citation = ":".join(submit) + tps = datetime.now().microsecond + breuvages[nick,tps] = citation + bieres[room.room_id] = breuvages + room.send_text("Ajout du breuvage " + nick + ":" + citation) + else: + # message d'aide + room.send_text("!biere add :") + elif (len(args) > 0 and args[0] == "list"): + # liste les quotes + args.pop(0) + salon = verifPMRoom(room,event) + if (len(args) == 0): + # Liste les breuvages du salon + reponse = "Voici les reponses du salon " + room.room_id + "\n" + if (len(room.aliases) > 0): + reponse = reponse + "(alias : " + room.aliases[0] + "\n" + for cle,valeur in breuvages.items(): + reponse = reponse + cle[0] + " / " + str(cle[1]) + " : " + valeur + "\n" + if (len(reponse) > 500): + salon.send_text(reponse) + reponse = "" + salon.send_text(reponse) + elif (args[0] == "all"): + # tous les breuvages de tous les salons + reponse = "Les breuvages de tous les salons : " + "\n" + salon.send_text(reponse) + for rid,fame in biere.items(): + reponse = "Voici les reponses du salon " + rid + "\n" + for cle,valeur in fame.items(): + reponse = reponse + cle[0] + " / " + str(cle[1]) + " : " + valeur + "\n" + if (len(reponse) > 500): + salon.send_text(reponse) + reponse = "" + salon.send_text(reponse) + else: + # les breuvages du pseudo spécifié + nick = " ".join(args) + reponse = "Voici les reponses du breuvage " + nick + "\n" + for cle,valeur in breuvages.items(): + if (cle[0] == nick): + reponse = reponse + cle[0] + " / " + str(cle[1]) + " : " + valeur + "\n" + salon.send_text(reponse) + elif (len(args) > 1 and args[0] == "del"): + salon = verifPMRoom(room,event) + if (event['sender'] in admins): + id = args[1] + reponse = "Voici le breuvage supprimé : \n" + for rid,fame in bieres.items(): + for cle,valeur in fame.items(): + if (str(cle[1]) == id): + del fame[cle[0],cle[1]] + reponse = reponse + rid + " / " + cle[0] + " / " + str(cle[1]) + " : " + valeur + "\n" + break + salon.send_text(reponse) + else: + salon.send_text("Vous n'êtes pas autorisés à supprimer des breuvages.") + elif (len(args) > 0): + # cite une reponse d'un breuvage precis + nick = " ".join(args) + phrases = [] + for cle,valeur in breuvages.items(): + if (cle[0] == nick): + if (give): + phrases.append(valeur + " pour " + elu + " de la part de " + envoyeur) + else: + phrases.append(valeur + " pour " + envoyeur) + if (len(phrases) > 0 ): + reponses(room,phrases) + else: + room.send_text("Je n'ai pas de " + nick + " en stock!") + else: + # cite une réponse d'un breuvage aleatoire + phrases = [] + for cle,valeur in breuvages.items(): + if (give): + phrases.append(valeur + " pour " + elu + " de la part de " + envoyeur) + else: + phrases.append(valeur + " pour " + envoyeur) + if (len(phrases) > 0 ): + reponses(room,phrases) + else: + room.send_text("Je n'ai pas de breuvages pour ce salon") + def invitations(room_id, state): global bot @@ -1122,9 +1251,14 @@ def main(): quotes_read() quote_handler = MCommandHandler("quote", quote) bot.add_handler(quote_handler) + + # bieres + bieres_read() + biere_handler = MCommandHandler("biere", quote) + bot.add_handler(biere_handler) - test_handler = MCommandHandler("test", verifPMRoom) - bot.add_handler(test_handler) + #test_handler = MCommandHandler("test", verifPMRoom) + #bot.add_handler(test_handler) # Invitations bot.client.add_invite_listener(invitations)