diff --git a/asmodee.py b/asmodee.py index 7216401..4da8ee1 100755 --- a/asmodee.py +++ b/asmodee.py @@ -42,6 +42,7 @@ admins = [] # Admins du bot modos = {} # Moderateurs des salons modules = {} # Modules activés par salon liste_mod = [] # Modules disponibles +USERNAME = "" # Chargement des données persistantes def horloge_read(): @@ -52,7 +53,7 @@ def horloge_read(): clock = loader.load() except: clock = {} - + def stats_read(): global stats try: @@ -61,7 +62,7 @@ def stats_read(): stats = loader.load() except: stats = {} - + def quotes_read(): global quotes try: @@ -80,7 +81,7 @@ def citations_read(): except: citations = {} - + def bieres_read(): global bieres try: @@ -152,6 +153,15 @@ def signal_handler(signal, frame): # Sauvegarder les données persistantes avant save_obj() sys.exit(0) +def not_myself(f): + def handler(room, event): + if event['sender'] == USERNAME: + return + + f(room, event) + + return handler + class Userstats: #Pour garder des stats sur les users def __init__(self,room,user,nick): self.room = room @@ -313,7 +323,6 @@ def verifPMRoom(room, event): # Pour obtenir ou créer un salon pour les message print("il etait deja dedans, c'est sale") return salon - def getNick(room, event): # Obtenir le DisplayName à partir du mxid members = room.get_joined_members() nick = "" @@ -330,7 +339,8 @@ def getNick(room, event): # Obtenir le DisplayName à partir du mxid except: nick = event['sender'] return(nick) - + +@not_myself def card(room, event): # Tirer une carte du paquet sans la retirer global modules try: @@ -341,6 +351,7 @@ def card(room, event): # Tirer une carte du paquet sans la retirer reponse = cartes_base[random.randrange(0,len(cartes_base))] msg(room,reponse) +@not_myself def carte(room, event): # Tirer une carte du paquet en la retirant ensuite global modules try: @@ -361,8 +372,10 @@ def carte(room, event): # Tirer une carte du paquet en la retirant ensuite msg(room,cartes[i]) cartes.pop(i) +@not_myself def help(room, event): # Aide en message privé help_center(room,event,"help",True) +@not_myself def aide(room, event): # Aide dans le salon help_center(room,event,"aide",False) def help_center(room,event,name,private): # Aide sur les commandes disponibles @@ -530,6 +543,7 @@ def rolls(result,jet,type,nb,explosif,noadd,wild,f,g,ars,relance,mitige,z): # La #print("fin rolls : " + str(result) + "|" + str(total) + "|" + str(jet)) return (result,total,jet) +@not_myself def entryPoint(room, event): # Analyse des commandes ":", point d'entrée pour les jets de dés global modules try: @@ -811,7 +825,8 @@ def rollTypePoint(): # Parser le nombre de faces du dé def reponses(room, phrases, content=False): # Afficher une réponse aléatoire dans la liste i = random.randrange(0,len(phrases)) msg(room,phrases[i],content) - + +@not_myself def jdr(room, event): global modules try: @@ -826,6 +841,7 @@ def jdr(room, event): phrases.append("Bon, c'est quand la prochaine partie " + nick + "?") reponses(room, phrases) +@not_myself def gens(room, event): global modules try: @@ -854,6 +870,7 @@ def va(room, event): phrases.append("Attention a " + nick + ", la suite est 'not safe for depression'") reponses(room, phrases) +@not_myself def hi_callback(room, event): global modules try: @@ -870,6 +887,7 @@ def hi_callback(room, event): phrases.append("Oh non, et voilà de nouveau " + nick + "...") reponses(room, phrases) +@not_myself def liste(room, event): # Afficher un élement aléatoire d'une liste fournie global modules try: @@ -879,7 +897,7 @@ def liste(room, event): # Afficher un élement aléatoire d'une liste fournie if (modules[room.room_id, 'liste']): res = [] nick = getNick(room,event) - + args = event['content']['body'].split() args.pop(0) try: @@ -897,6 +915,7 @@ def liste(room, event): # Afficher un élement aléatoire d'une liste fournie else: msg(room,"Utilisation : !liste [nombre d elements]") +@not_myself def cristal(room, event): # Affiche une réponse à une question posée global modules try: @@ -905,7 +924,7 @@ def cristal(room, event): # Affiche une réponse à une question posée modules[room.room_id, 'cristal'] = False if (modules[room.room_id, 'cristal']): nick = getNick(room,event) - + args = event['content']['body'].split() args.pop(0) if (len(args) < 2 or args[len(args)-1][-1] != '?'): @@ -974,6 +993,7 @@ def cristal(room, event): # Affiche une réponse à une question posée phrases.append("Tu portes quelque chose de sombre, je refuse de me laisser souiller.") reponses(room, phrases) +@not_myself def horloge(room, event): # Gestion des horloges PBTA global modules try: @@ -983,7 +1003,7 @@ def horloge(room, event): # Gestion des horloges PBTA if (modules[room.room_id, 'horloge']): global clock nick = getNick(room,event) - + args = event['content']['body'].split() args.pop(0) if (len(args) == 0): @@ -1016,7 +1036,8 @@ def horloge(room, event): # Gestion des horloges PBTA del clock[room.room_id, ' '.join(args)] else: msg(room,"Utilisation : \n- !horloge : Affiche les horloges. \n- !horloge : Place ou crée l'horloge au niveau spécifié.\n- !horloge del : Supprime l'horloge.") - + +@not_myself def statistiques(room,event): # Enregistrement des statistiques global modules try: @@ -1029,7 +1050,7 @@ def statistiques(room,event): # Enregistrement des statistiques user = event['sender'] usrstats1 = 0 usrstats2 = 0 - + if ('body' in event['content']): try: usrstats1 = stats[room.room_id,user] @@ -1039,12 +1060,12 @@ def statistiques(room,event): # Enregistrement des statistiques usrstats2 = stats[room.room_id,nick] except: usrstats2 = Userstats(room.room_id,user,nick) - + # date de la phrase date = datetime.now() usrstats1.date = date usrstats2.date = date - + # recup nb phrases +1, 1 sinon if (usrstats1.mess >= usrstats2.mess): usrstats2.mess = usrstats1.mess + 1 @@ -1052,7 +1073,7 @@ def statistiques(room,event): # Enregistrement des statistiques else: usrstats1.mess = usrstats2.mess + 1 usrstats2.mess = usrstats1.mess - + # recup nb lettres +lettres phrase, lettres phrases sinon if (usrstats1.char >= usrstats2.char): usrstats2.char = usrstats1.char + len(event['content']['body']) @@ -1060,7 +1081,7 @@ def statistiques(room,event): # Enregistrement des statistiques else: usrstats1.char = usrstats2.char + len(event['content']['body']) usrstats2.char = usrstats1.char - + # si kapoue, recup nb kapoue +1, 1 sinon if (re.match(".*KAPOUE|.*[Kk]apoue", event['content']['body'])): if (usrstats1.kapoue >= usrstats2.kapoue): @@ -1069,11 +1090,12 @@ def statistiques(room,event): # Enregistrement des statistiques else: usrstats1.kapoue = usrstats2.kapoue + 1 usrstats2.kapoue = usrstats1.kapoue - + # insertion des objets stats[room.room_id,user] = usrstats1 stats[room.room_id,nick] = usrstats2 - + +@not_myself def last(room,event): # Regarde la dernière fois que quelqu'un a écrit un message global modules try: @@ -1097,7 +1119,8 @@ def last(room,event): # Regarde la dernière fois que quelqu'un a écrit un mess #for cle,valeur in stats.items(): # if (cle[0] == room.room_id): # msg(room,cle[1] + "\n") - + +@not_myself def actif(room,event): # Stats d'activité d'une personne global modules try: @@ -1119,7 +1142,8 @@ def actif(room,event): # Stats d'activité d'une personne msg(room,usrstats.nick + " a poste " + str(usrstats.mess) + " messages avec une moyenne de " + moy + " caracteres par message") except: msg(room,pers + " : Personne non reconnue\n") - + +@not_myself def nb_kap(room,event): global modules try: @@ -1147,7 +1171,8 @@ def nb_kap(room,event): msg(room,usrstats.nick + " a crié " + str(usrstats.kapoue) + " KAPOUE! Faites le manger par des fourmis! Pauvres bêtes...") except: msg(room,pers + " : Personne non reconnue\n") - + +@not_myself def quote(room,event): # Gestion des citations global modules try: @@ -1163,7 +1188,7 @@ def quote(room,event): # Gestion des citations famous = quotes[room.room_id] except: famous = {} - + if (len(args) > 3 and args[0] == "add"): #ajoute une quote args.pop(0) @@ -1262,6 +1287,7 @@ def quote(room,event): # Gestion des citations else: msg(room,"Je n'ai pas de citations pour ce salon") +@not_myself def addquote(room,event): # enregistrer les citations mode reponses matrix global modules try: @@ -1275,12 +1301,14 @@ def addquote(room,event): # enregistrer les citations mode reponses matrix if len(json.dumps(content)) > 420: # Enlève la commande de la citation try: - content['body'] = content['body'].replace("\naddquote", " ") + content['body'] = content['body'].replace("\n!addquote", " ") + content['body'] = content['body'].replace("\n!", "\n") except: print("\n\nerreur body " + json.dumps(content)) try: - content['formatted_body'] = content['formatted_body'].replace("

addquote

\n", "") - content['formatted_body'] = content['formatted_body'].replace("addquote", "") + content['formatted_body'] = content['formatted_body'].replace("

!addquote

\n", "") + content['formatted_body'] = content['formatted_body'].replace("!addquote", "") + content['formatted_body'] = content['formatted_body'].replace("

!", "

") except: print("\n\nerreur formatted_body " + json.dumps(content)) @@ -1306,6 +1334,7 @@ def addquote(room,event): # enregistrer les citations mode reponses matrix msg(room,"Ajout de la citation de " + auteur + ":") bot.client.api.send_message_event(room.room_id, 'm.room.message', content, None, None) +@not_myself def showquote(room, event): # afficher les citations mode reponse matrix global modules try: @@ -1341,8 +1370,8 @@ def showquote(room, event): # afficher les citations mode reponse matrix reponses(room,phrases,True) else: msg(room,"Je n'ai pas de citations pour ce salon") - - + +@not_myself def biere(room,event): # Gestion des boissons global modules try: @@ -1476,6 +1505,7 @@ def biere(room,event): # Gestion des boissons else: msg(room,"Je n'ai pas de breuvages pour ce salon") +@not_myself def boissons(room,event): # Gestion des alias de boissons global modules try: @@ -1485,7 +1515,7 @@ def boissons(room,event): # Gestion des alias de boissons if (modules[room.room_id, 'biere']): boisson = "" elu = "" - + args = event['content']['body'].split() try: boisson = args[0][1:] @@ -1495,7 +1525,7 @@ def boissons(room,event): # Gestion des alias de boissons if (len(args) > 0): elu = " ".join(args) - + if (len(elu) > 0 and len(boisson) > 0): event['content']['body'] = "!biere give " + elu + ":" + boisson elif (len(elu) > 0): @@ -1507,6 +1537,7 @@ def boissons(room,event): # Gestion des alias de boissons biere(room,event) +@not_myself def accueil(room,event): # Mettre un message d'accueil global modules try: @@ -1523,10 +1554,10 @@ def accueil(room,event): # Mettre un message d'accueil if (len(args) > 0): welcome[room.room_id] = reponse msg(room,"Le message d'accueil est désormais : " + reponse) - + else: msg(salon,"Vous n'êtes pas autorisés à modifier le message d'accueil.") - + def bienvenue(event): # Affichage d'un message d'accueil aux nouveaux venus room_id = event['room_id'] room = bot.client.rooms[room_id] @@ -1556,6 +1587,7 @@ def bienvenue(event): # Affichage d'un message d'accueil aux nouveaux venus if (membership == "join" and prev_member != "join"): msg(room,"Bienvenue sur " + alias + ", " + nick + ". " + reponse) +@not_myself def modo(room,event): # Definition d'un moderateur global modos lmod = [] @@ -1590,6 +1622,7 @@ def modo(room,event): # Definition d'un moderateur else: msg(salon,"Vous n'êtes pas autorisés à définir les modérateurs.") +@not_myself def module(room,event): # Definition des modules d'un salon lmod = [] try: @@ -1662,6 +1695,7 @@ def invitations(room_id, state): # Reponse aux invitations main() def main(): + global USERNAME config = configparser.ConfigParser() config.read('asmodee.ini') USERNAME = "" # Bot's username @@ -1761,7 +1795,7 @@ def main(): quote_handler = MCommandHandler("quote", quote) bot.add_handler(quote_handler) citations_read() - addquote_handler = MEndHandler("addquote", addquote) + addquote_handler = MEndHandler("!addquote", addquote) bot.add_handler(addquote_handler) showquote_handler = MCommandHandler("showquote", showquote) bot.add_handler(showquote_handler)