diff --git a/asmodee.py b/asmodee.py index 0dfe8fc..26e16e0 100755 --- a/asmodee.py +++ b/asmodee.py @@ -3,6 +3,9 @@ import re import copy import configparser import io +import signal +import sys +import pickle from matrix_bot_api.matrix_bot_api import MatrixBotAPI from matrix_bot_api.mregex_handler import MRegexHandler @@ -21,6 +24,26 @@ cartes_base = ["As de carreau", "2 de carreau", "3 de carreau", "4 de carreau", "10 de trefle", "Valet de trefle", "Dame de trefle", "Roi de trefle", "Joker rouge", "Joker noir"] cartes=list(cartes_base) bot = None +clock = {} + +def horloge_read(): + global clock + try: + with open("horloge", "rb") as fichier: + loader = pickle.Unpickler(fichier) + clock = loader.load() + except: + if (!fichier.closed): + fichier.close() + fichier = open("horloge.txt", "w") + fichier.close() + +def signal_handler(signal, frame): + with open("horloge", "wb") as fichier: + saver = pickle.Pickler(fichier) + saver.dump(clock) + sys.exit(0) + class Parser: #Pour parser la ligne de commande def __init__(self, str, nick, room): @@ -108,6 +131,16 @@ class Parser: #Pour parser la ligne de commande return True return False +def getNick(room, event): + members = room.get_joined_members() + nick = "" + try: + #nick = members[event['sender']]['displayname'] + nick = [user.get_friendly_name() for user in members if user.user_id == event['sender']][0] + except: + nick = "Voisin du dessus" + return(nick) + def card(room, event): room.send_text(cartes_base[random.randrange(0,len(cartes_base))]) @@ -229,13 +262,7 @@ def rolls(result,jet,type,nb,explosif,noadd,wild,f,g,ars,relance,mitige): def entryPoint(room, event): global parser text = event['content']['body'] - members = room.get_joined_members() - nick = "" - try: - #nick = members[event['sender']]['displayname'] - nick = [user.get_friendly_name() for user in members if user.user_id == event['sender']][0] - except: - nick = "Voisin du dessus" + nick = getNick(room,event) parser = Parser(text,nick,room) print(text) @@ -499,13 +526,7 @@ def reponses(room, phrases): room.send_text(phrases[i]) def jdr(room, event): - members = room.get_joined_members() - nick = "" - try: - #nick = members[event['sender']]['displayname'] - nick = [user.get_friendly_name() for user in members if user.user_id == event['sender']][0] - except: - nick = "Voisin du dessus" + nick = getNick(room,event) phrases = [] phrases.append("Rock & Role baby!") phrases.append("De toute maniere " + nick + ", les gens ont perdu la foi dans le rolisme.") @@ -513,13 +534,7 @@ def jdr(room, event): reponses(room, phrases) def gens(room, event): - members = room.get_joined_members() - nick = "" - try: - #nick = members[event['sender']]['displayname'] - nick = [user.get_friendly_name() for user in members if user.user_id == event['sender']][0] - except: - nick = "Voisin du dessus" + nick = getNick(room,event) phrases = [] phrases.append("L'enfer c'est les autres.") phrases.append("Bah " + nick + ", les gens c'est pratique pour jouer aux osselets. Bon faut juste trouver ou mettre la chair ensuite.") @@ -527,13 +542,7 @@ def gens(room, event): reponses(room, phrases) def va(room, event): - members = room.get_joined_members() - nick = "" - try: - #nick = members[event['sender']]['displayname'] - nick = [user.get_friendly_name() for user in members if user.user_id == event['sender']][0] - except: - nick = "Voisin du dessus" + nick = getNick(room,event) phrases = [] phrases.append("Moi ca va si jamais quelqu'un se pose la question...") phrases.append("Quand l'appetit va, tout va " + nick +"!") @@ -541,13 +550,7 @@ def va(room, event): reponses(room, phrases) def maman(room, event): - members = room.get_joined_members() - nick = "" - try: - #nick = members[event['sender']]['displayname'] - nick = [user.get_friendly_name() for user in members if user.user_id == event['sender']][0] - except: - nick = "Voisin du dessus" + nick = getNick(room,event) phrases = [] phrases.append("On avait dit 'Pas les mamans'!") phrases.append("Oh, c'est pas la mere a boire " + nick + "}!") @@ -556,13 +559,7 @@ def maman(room, event): def hi_callback(room, event): # Somebody said hi, let's say Hi back - members = room.get_joined_members() - nick = "" - try: - #nick = members[event['sender']]['displayname'] - nick = [user.get_friendly_name() for user in members if user.user_id == event['sender']][0] - except: - nick = "Voisin du dessus" + nick = getNick(room,event) phrases = [] phrases.append("Salutations " + nick + "!") phrases.append("Chalut " + nick + " :)") @@ -579,14 +576,7 @@ def echo_callback(room, event): def liste(room, event): res = [] - - members = room.get_joined_members() - nick = "" - try: - #nick = members[event['sender']]['displayname'] - nick = [user.get_friendly_name() for user in members if user.user_id == event['sender']][0] - except: - nick = "Voisin du dessus" + nick = getNick(room,event) args = event['content']['body'].split() args.pop(0) @@ -605,7 +595,105 @@ def liste(room, event): else: room.send_text("Utilisation : !liste [nombre d elements]") - +def cristal(room, event): + nick = getNick(room,event) + + args = event['content']['body'].split() + args.pop(0) + if (len(args) < 2 || args[len(args)-1][-1] != '?'): + room.send_text("Utilisation : !cristal ") + else: + args[len(args)-1] = args[len(args)-1][0:-1] + args = list(set(args).difference(set(["Dans", "Jusque", "le", "la", "les", "de", "des", "un", "une", "est", "sont", "serait", "seraient", "était", "étaient", "sera", "seront", "ont", "aurait", "auraient", "aura", "auront", "a", "à"]))) + conj = args[0] + args.pop(0) + cle = max(args, key=len) + if (conj == "Est-ce" || conj == "est-ce"): + # traitement Oui/non + phrases = [] + phrases.append("Evidemment " + nick + ", qu'est ce que tu croyais?") + phrases.append("Non " + nick + ", malheurement non.") + phrases.append("Oui " + nick +", et quelque chose d'encore pire ensuite pour " + cle + "!") + phrases.append("Je ne sais pas si je dois te le dire au risque de te faire de la peine, " + nick + "...") + reponses(room, phrases) + elif (conj == "Combien" || conj == "combien"): + # traitement quantité + phrases = [] + phrases.append("Enormement " + nick + "!") + phrases.append("Quasiment aucun " + nick + " :)") + phrases.append("Peu comparé à l'immensité, mais au niveau de " + nick +", forcément...") + phrases.append("J'en vois des dizaines, des centaines et par un prompt renfort ils furent 500 en arrivant au port!") + reponses(room, phrases) + elif (conj == "Pourquoi" || conj == "pourquoi"): + # traitement raison + phrases = [] + phrases.append("Parce que la vie est injuste " + nick + "!") + phrases.append("A cause del'orgueil, " + nick + ", la mère de tous les vices.") + phrases.append("Pour la richesse, pour le pouvoir, pour le pouvoir qu'apporte la richesse.") + phrases.append("A cause d'une démence aussi soudaine que passagère.") + reponses(room, phrases) + elif (conj == "Comment" || conj == "comment"): + # traitement methode + phrases = [] + phrases.append("Discrètement, sournoisement, vicieusement " + nick + "!") + phrases.append("Avec panache! :)") + phrases.append("Avec un trombone et un élastique, comme McGuy" + nick +"!") + phrases.append("Avec une aide des plus innattendues.") + reponses(room, phrases) + elif (conj == "Quand" || conj == "quand"): + # traitement temps + phrases = [] + phrases.append("Plus vite que tu ne l'imagine, retourne toi " + nick + "!") + phrases.append("Dans vraiment de temps, mais n'est pas mort ce qui à jamais dort...") + phrases.append("Pile poil la durée que tu imaginais.") + phrases.append("Dans plus lontemps que tu ne le pensais, mais tous les intervenants ont une bonne excuse. Leur collègue de droite a merdé.") + reponses(room, phrases) + elif (conj == "Où" || conj == "où"): + # traitement lieu + phrases = [] + phrases.append("Dans la ville voisine") + phrases.append("A l'extérieur") + phrases.append("Au dernier endroit où on y penserait") + phrases.append("Là où les ennuis se concentrent, comme d'habitude") + reponses(room, phrases) + else: + # reponse generique + phrases = [] + phrases.append("Toujours en mouvement le futur est. Toujours sans lunettes flou je vois.") + phrases.append("La boule de cristal est momentanément indisponible, veuillez réitérer votre divination ultérieurement.") + phrases.append("Une ombre plane sur ton âme, ses crocs approchent.") + phrases.append("Tu portes quelque chose de sombre, je refuse de me laisser souiller.") + reponses(room, phrases) + +def horloge(room, event): + global clock + nick = getNick(room,event) + + args = event['content']['body'].split() + args.pop(0) + if (len(args) == 0): + # Liste des horloges du salon + for cle,valeur in clock.items(): + if (cle[0] == room.room_id): + room.send_text(cle[1] + " : \u1F540 \n") if (valeur == 0) + room.send_text(cle[1] + " : \u1F552 \n") if (valeur == 1) + room.send_text(cle[1] + " : \u1F555 \n") if (valeur == 2) + room.send_text(cle[1] + " : \u1F558 \n") if (valeur == 3) + room.send_text(cle[1] + " : \u1F559 \n") if (valeur == 4) + room.send_text(cle[1] + " : \u1F55A \n") if (valeur == 5) + room.send_text(cle[1] + " : \u1F55B \n") if (valeur == 6) + room.send_text(cle[1] + " : " + valeur + " \n") if (valeur > 6) + elif (len(args) >= 2 && args[len(args)-1].isnumeric()): + # Place le niveau de l'horloge entre 0 et 6 + nv = int(args[len(args)-1]) + clock[room.room_id, args[0:-1]] = nv + elif (len(args) >= 2 && args[0] == "del"): + # Supprime une horloge + args.pop(0) + clock.pop(room.room_id, args) + else: + room.send_text("Utilisation : \n- !horloge : Affiche les horloges. \n- !horloge : Place ou crée l'horloge au niveau spécifié.\n- !horloge del : Supprime l'horloge.") + def invitations(room_id, state): global bot try: @@ -661,7 +749,17 @@ def main(): # Un élément d'une liste liste_handler = MCommandHandler("liste", liste) bot.add_handler(liste_handler) - + + # Boule de cristal + cristal_handler = MCommandHandler("cristal", cristal) + bot.add_handler(cristal_handler) + + # horloges + horloge_read() + signal.signal(signal.SIGINT, signal_handler) + horloge_handler = MCommandHandler("horloge", horloge) + bot.add_handler(horloge_handler) + # Invitations bot.client.add_invite_listener(invitations)