diff --git a/asmodee.ini b/asmodee.ini index abcc429..4035ac0 100644 --- a/asmodee.ini +++ b/asmodee.ini @@ -4,3 +4,5 @@ password = "" server = "" admin = "" +[MOD] +liste = "roll,quote,biere,stats,liste,horloge,carte,card,cristal,welcome,salut,jdr,gens,va" diff --git a/asmodee.py b/asmodee.py index c7b039c..9c9fc09 100755 --- a/asmodee.py +++ b/asmodee.py @@ -36,6 +36,8 @@ bieres = {} # Boissons a offrir welcome = {} # Messages d'accueil des salons admins = [] # Admins du bot modos = {} # Moderateurs des salons +modules = {} # Modules activés par salon +liste_mod = [] # Modules disponibles # Chargement des données persistantes def horloge_read(): @@ -91,25 +93,43 @@ def modos_read(): modos = loader.load() except: modos = {} -def save_obj(): - with open("horloge", "wb") as fichier: - saver = pickle.Pickler(fichier) - saver.dump(clock) - with open("stats", "wb") as fichier: - saver = pickle.Pickler(fichier) - saver.dump(stats) - 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) - with open("welcome", "wb") as fichier: - saver = pickle.Pickler(fichier) - saver.dump(welcome) + +def modules_read(): + global modules + try: + with open("modules", "rb") as fichier: + loader = pickle.Unpickler(fichier) + modules = loader.load() + except: + modules = {} + +def save_obj(): + if ('horloge' in liste_mod): + with open("horloge", "wb") as fichier: + saver = pickle.Pickler(fichier) + saver.dump(clock) + if ('stats' in liste_mod): + with open("stats", "wb") as fichier: + saver = pickle.Pickler(fichier) + saver.dump(stats) + if ('quote' in liste_mod): + with open("quotes", "wb") as fichier: + saver = pickle.Pickler(fichier) + saver.dump(quotes) + if ('biere' in liste_mod): + with open("bieres", "wb") as fichier: + saver = pickle.Pickler(fichier) + saver.dump(bieres) + if ('welcome' in liste_mod): + with open("welcome", "wb") as fichier: + saver = pickle.Pickler(fichier) + saver.dump(welcome) with open("moderateurs", "wb") as fichier: saver = pickle.Pickler(fichier) saver.dump(modos) + with open("modules", "wb") as fichier: + saver = pickle.Pickler(fichier) + saver.dump(modules) def signal_handler(signal, frame): # Sauvegarder les données persistantes avant sortie save_obj() @@ -285,21 +305,23 @@ def getNick(room, event): # Obtenir le DisplayName à partir du mxid return(nick) def card(room, event): # Tirer une carte du paquet sans la retirer - room.send_text(cartes_base[random.randrange(0,len(cartes_base))]) + if (modules[room.room_id, 'card']): + room.send_text(cartes_base[random.randrange(0,len(cartes_base))]) def carte(room, event): # Tirer une carte du paquet en la retirant ensuite - global cartes - args = event['content']['body'].split() - if (len(args) > 1): - cartes=list(cartes_base) - room.send_text("Le paquet est melange") - else: - if (len(cartes) < 1): + if (modules[room.room_id, 'carte']): + global cartes + args = event['content']['body'].split() + if (len(args) > 1): cartes=list(cartes_base) room.send_text("Le paquet est melange") - i = random.randrange(0,len(cartes)) - room.send_text(cartes[i]) - cartes.pop(i) + else: + if (len(cartes) < 1): + cartes=list(cartes_base) + room.send_text("Le paquet est melange") + i = random.randrange(0,len(cartes)) + room.send_text(cartes[i]) + cartes.pop(i) def help(room, event): # Aide en message privé help_center(room,event,"help",True) @@ -443,42 +465,43 @@ def rolls(result,jet,type,nb,explosif,noadd,wild,f,g,ars,relance,mitige,z): # La return (result,total,jet) def entryPoint(room, event): # Analyse des commandes ":", point d'entrée pour les jets de dés - global parser - text = event['content']['body'] - nick = getNick(room,event) - parser = Parser(text,nick,room) - - print(text) - if (parser.eat(":roll",1)): - parser.option = [False,False,False,0,0,0,0,0,False,0,0,False] - rollXPoint() - elif (parser.eat(":dom",1)): - parser.option = [True,False,True,0,0,0,4,4,False,0,0,False] - rollXPoint() - elif (parser.eat(":sw",1)): - parser.option = [True,True,True,0,0,0,4,4,False,0,0,False] - rollXPoint() - elif (parser.eat(":ars",1)): - parser.option = [False,True,True,0,0,0,0,0,True,0,0,False] - rollXPoint() - elif (parser.eat(":des",1)): - parser.option = [False,True,True,0,10,0,0,0,False,0,0,False] - rollXPoint() - elif (parser.eat(":wod",1)): - parser.option = [False,True,True,0,8,0,0,0,False,10,0,False] - rollXPoint() - elif (parser.eat(":owod",1)): - parser.option = [False,True,True,0,6,0,0,0,False,10,1,False] - rollXPoint() - elif (parser.eat(":star",1)): - parser.option = [False,False,True,0,0,0,0,0,False,0,0,True] - rollXPoint() - else: - parser.arg["error"] = True + if (modules[room.room_id, 'roll']): + global parser + text = event['content']['body'] + nick = getNick(room,event) + parser = Parser(text,nick,room) + + print(text) + if (parser.eat(":roll",1)): + parser.option = [False,False,False,0,0,0,0,0,False,0,0,False] + rollXPoint() + elif (parser.eat(":dom",1)): + parser.option = [True,False,True,0,0,0,4,4,False,0,0,False] + rollXPoint() + elif (parser.eat(":sw",1)): + parser.option = [True,True,True,0,0,0,4,4,False,0,0,False] + rollXPoint() + elif (parser.eat(":ars",1)): + parser.option = [False,True,True,0,0,0,0,0,True,0,0,False] + rollXPoint() + elif (parser.eat(":des",1)): + parser.option = [False,True,True,0,10,0,0,0,False,0,0,False] + rollXPoint() + elif (parser.eat(":wod",1)): + parser.option = [False,True,True,0,8,0,0,0,False,10,0,False] + rollXPoint() + elif (parser.eat(":owod",1)): + parser.option = [False,True,True,0,6,0,0,0,False,10,1,False] + rollXPoint() + elif (parser.eat(":star",1)): + parser.option = [False,False,True,0,0,0,0,0,False,0,0,True] + rollXPoint() + else: + parser.arg["error"] = True - if (not parser.arg.get("error",None) and not parser.eat("$",0)): - parser.arg["noerror"] = True - room.send_text("Je n'ai pas compris " + text) + if (not parser.arg.get("error",None) and not parser.eat("$",0)): + parser.arg["noerror"] = True + room.send_text("Je n'ai pas compris " + text) def rollOptionPoint(): # Parse des options @@ -716,573 +739,581 @@ def reponses(room, phrases): # Afficher une réponse aléatoire dans la liste room.send_text(phrases[i]) def jdr(room, event): - 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.") - phrases.append("Bon, c'est quand la prochaine partie " + nick + "?") - reponses(room, phrases) + if (modules[room.room_id, 'jdr']): + 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.") + phrases.append("Bon, c'est quand la prochaine partie " + nick + "?") + reponses(room, phrases) def gens(room, event): - 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.") - phrases.append("Franchement " + nick + ", les gens c'est comme les films X. Plus il y'en a, plus ca part en couilles...") - reponses(room, phrases) + if (modules[room.room_id, 'gens']): + 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.") + phrases.append("Franchement " + nick + ", les gens c'est comme les films X. Plus il y'en a, plus ca part en couilles...") + reponses(room, phrases) def va(room, event): - 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 +"!") - phrases.append("Attention a " + nick + ", la suite est 'not safe for depression'") - reponses(room, phrases) - -def maman(room, event): - nick = getNick(room,event) - phrases = [] - phrases.append("On avait dit 'Pas les mamans'!") - phrases.append("Oh, c'est pas la mere a boire " + nick + "}!") - phrases.append("C'est pas l'homme qui prend la mere, c'est la mere qui prend l'homme...") - reponses(room, phrases) + if (modules[room.room_id, 'va']): + 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 +"!") + phrases.append("Attention a " + nick + ", la suite est 'not safe for depression'") + reponses(room, phrases) def hi_callback(room, event): - # Somebody said hi, let's say Hi back - nick = getNick(room,event) - phrases = [] - phrases.append("Salutations " + nick + "!") - phrases.append("Chalut " + nick + " :)") - phrases.append("Hello " + nick +"!") - phrases.append("Oh non, et voilà de nouveau " + nick + "...") - reponses(room, phrases) + if (modules[room.room_id, 'salut']): + # Somebody said hi, let's say Hi back + nick = getNick(room,event) + phrases = [] + phrases.append("Salutations " + nick + "!") + phrases.append("Chalut " + nick + " :)") + phrases.append("Hello " + nick +"!") + phrases.append("Oh non, et voilà de nouveau " + nick + "...") + reponses(room, phrases) def liste(room, event): # Afficher un élement aléatoire d'une liste fournie - res = [] - nick = getNick(room,event) + if (modules[room.room_id, 'liste']): + res = [] + nick = getNick(room,event) - args = event['content']['body'].split() - args.pop(0) - try: - nb = int(args[len(args)-1]) - args.pop(len(args)-1) - except: - nb = 1 - args = ' '.join(args) - list = args.split('/') - if (nb <= len(list)): - for i in range(nb): - id = random.randrange(0,len(list)) - res.append(list.pop(id)) - room.send_text(nick + " obtient :\n" + '\n'.join(res)) - else: - room.send_text("Utilisation : !liste [nombre d elements]") + args = event['content']['body'].split() + args.pop(0) + try: + nb = int(args[len(args)-1]) + args.pop(len(args)-1) + except: + nb = 1 + args = ' '.join(args) + list = args.split('/') + if (nb <= len(list)): + for i in range(nb): + id = random.randrange(0,len(list)) + res.append(list.pop(id)) + room.send_text(nick + " obtient :\n" + '\n'.join(res)) + else: + room.send_text("Utilisation : !liste [nombre d elements]") -def cristal(room, event): - nick = getNick(room,event) +def cristal(room, event): # Affiche une réponse à une question posée + 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] != '?'): - room.send_text("Utilisation : !cristal ") - else: - args[len(args)-1] = args[len(args)-1][0:-1] - conj = args[0] + args = event['content']['body'].split() args.pop(0) - 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", "à"]))) - cle = max(args, key=len) - print(cle) - if (conj == "Est-ce" or 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" or 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" or 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" or conj == "comment"): - # traitement methode - phrases = [] - phrases.append("Discrètement, sournoisement, vicieusement " + nick + "!") - phrases.append("Avec panache! :) " + cle + " pfff...") - 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" or conj == "quand"): - # traitement temps - phrases = [] - phrases.append("Plus vite que tu ne l'imagines, retourne toi " + nick + "!") - phrases.append("Dans vraiment longtemps, mais n'est pas mort ce qui à jamais dort...") - phrases.append("Pile poil la durée que tu imaginais pour " + cle) - 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ù" or 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 pour " + cle) - phrases.append("Là où les ennuis se concentrent, comme d'habitude pour " + nick) - reponses(room, phrases) + if (len(args) < 2 or args[len(args)-1][-1] != '?'): + room.send_text("Utilisation : !cristal ") 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) + args[len(args)-1] = args[len(args)-1][0:-1] + conj = args[0] + args.pop(0) + 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", "à"]))) + cle = max(args, key=len) + print(cle) + if (conj == "Est-ce" or 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" or 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" or 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" or conj == "comment"): + # traitement methode + phrases = [] + phrases.append("Discrètement, sournoisement, vicieusement " + nick + "!") + phrases.append("Avec panache! :) " + cle + " pfff...") + 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" or conj == "quand"): + # traitement temps + phrases = [] + phrases.append("Plus vite que tu ne l'imagines, retourne toi " + nick + "!") + phrases.append("Dans vraiment longtemps, mais n'est pas mort ce qui à jamais dort...") + phrases.append("Pile poil la durée que tu imaginais pour " + cle) + 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ù" or 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 pour " + cle) + phrases.append("Là où les ennuis se concentrent, comme d'habitude pour " + nick) + 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): # Gestion des horloges PBTA - global clock - nick = getNick(room,event) + if (modules[room.room_id, 'horloge']): + 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): - if (int(valeur) == 0): - room.send_text(cle[1] + " : " + chr(128320) + "\n") - elif (int(valeur) == 1): - room.send_text(cle[1] + " : " + chr(128338) + "\n") - elif (int(valeur) == 2): - room.send_text(cle[1] + " : " + chr(128341) + "\n") - elif (int(valeur) == 3): - room.send_text(cle[1] + " : " + chr(128344) + "\n") - elif (int(valeur) == 4): - room.send_text(cle[1] + " : " + chr(128345) + "\n") - elif (int(valeur) == 5): - room.send_text(cle[1] + " : " + chr(128346) + "\n") - elif (int(valeur) == 6): - room.send_text(cle[1] + " : " + chr(128347) + "\n") - else: - room.send_text(cle[1] + " : " + str(valeur) + " \n") - elif (len(args) >= 2 and 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, ' '.join(args[0:-1])] = nv - elif (len(args) >= 2 and args[0] == "del"): - # Supprime une horloge + args = event['content']['body'].split() args.pop(0) - del clock[room.room_id, ' '.join(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.") + if (len(args) == 0): + # Liste des horloges du salon + for cle,valeur in clock.items(): + if (cle[0] == room.room_id): + if (int(valeur) == 0): + room.send_text(cle[1] + " : " + chr(128320) + "\n") + elif (int(valeur) == 1): + room.send_text(cle[1] + " : " + chr(128338) + "\n") + elif (int(valeur) == 2): + room.send_text(cle[1] + " : " + chr(128341) + "\n") + elif (int(valeur) == 3): + room.send_text(cle[1] + " : " + chr(128344) + "\n") + elif (int(valeur) == 4): + room.send_text(cle[1] + " : " + chr(128345) + "\n") + elif (int(valeur) == 5): + room.send_text(cle[1] + " : " + chr(128346) + "\n") + elif (int(valeur) == 6): + room.send_text(cle[1] + " : " + chr(128347) + "\n") + else: + room.send_text(cle[1] + " : " + str(valeur) + " \n") + elif (len(args) >= 2 and 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, ' '.join(args[0:-1])] = nv + elif (len(args) >= 2 and args[0] == "del"): + # Supprime une horloge + args.pop(0) + del clock[room.room_id, ' '.join(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 statistiques(room,event): # Enregistrement des statistiques - global stats - nick = getNick(room,event) - user = event['sender'] - usrstats1 = 0 - usrstats2 = 0 + if (modules[room.room_id, 'stats']): + global stats + nick = getNick(room,event) + user = event['sender'] + usrstats1 = 0 + usrstats2 = 0 - if ('body' in event['content']): - try: - usrstats1 = stats[room.room_id,user] - except: - usrstats1 = Userstats(room.room_id,user,nick) - try: - usrstats2 = stats[room.room_id,nick] - except: - usrstats2 = Userstats(room.room_id,user,nick) + if ('body' in event['content']): + try: + usrstats1 = stats[room.room_id,user] + except: + usrstats1 = Userstats(room.room_id,user,nick) + try: + 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 + # 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 - usrstats1.mess = usrstats2.mess - else: - usrstats1.mess = usrstats2.mess + 1 - usrstats2.mess = usrstats1.mess + # recup nb phrases +1, 1 sinon + if (usrstats1.mess >= usrstats2.mess): + usrstats2.mess = usrstats1.mess + 1 + usrstats1.mess = usrstats2.mess + 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']) - usrstats1.char = usrstats2.char - 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): - usrstats2.kapoue = usrstats1.kapoue + 1 - usrstats1.kapoue = usrstats2.kapoue + # recup nb lettres +lettres phrase, lettres phrases sinon + if (usrstats1.char >= usrstats2.char): + usrstats2.char = usrstats1.char + len(event['content']['body']) + usrstats1.char = usrstats2.char else: - usrstats1.kapoue = usrstats2.kapoue + 1 - usrstats2.kapoue = usrstats1.kapoue + 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): + usrstats2.kapoue = usrstats1.kapoue + 1 + usrstats1.kapoue = usrstats2.kapoue + 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 + # insertion des objets + stats[room.room_id,user] = usrstats1 + stats[room.room_id,nick] = usrstats2 def last(room,event): # Regarde la dernière fois que quelqu'un a écrit un message - global stats - args = event['content']['body'].split() - args.pop(0) - pers = "" - if (len(args) == 0): - pers = getNick(room,event) - else: - pers=" ".join(args) - try: - usrstats = stats[room.room_id,pers] - room.send_text("J'ai vu " + usrstats.nick + " poster pour la derniere fois le " + usrstats.date.strftime("%Y-%m-%d %H:%M:%S")) - except: - room.send_text(pers + " : Personne non reconnue") - #for cle,valeur in stats.items(): - # if (cle[0] == room.room_id): - # room.send_text(cle[1] + "\n") + if (modules[room.room_id, 'stats']): + global stats + args = event['content']['body'].split() + args.pop(0) + pers = "" + if (len(args) == 0): + pers = getNick(room,event) + else: + pers=" ".join(args) + try: + usrstats = stats[room.room_id,pers] + room.send_text("J'ai vu " + usrstats.nick + " poster pour la derniere fois le " + usrstats.date.strftime("%Y-%m-%d %H:%M:%S")) + except: + room.send_text(pers + " : Personne non reconnue") + #for cle,valeur in stats.items(): + # if (cle[0] == room.room_id): + # room.send_text(cle[1] + "\n") def actif(room,event): # Stats d'activité d'une personne - global stats - args = event['content']['body'].split() - args.pop(0) - pers = "" - if (len(args) == 0): - pers = getNick(room,event) - else: - pers=" ".join(args) - try: - usrstats = stats[room.room_id,pers] - moy = "{:10.2f}".format(usrstats.char / usrstats.mess) - room.send_text(usrstats.nick + " a poste " + str(usrstats.mess) + " messages avec une moyenne de " + moy + " caracteres par message") - except: - room.send_text(pers + " : Personne non reconnue\n") + if (modules[room.room_id, 'stats']): + global stats + args = event['content']['body'].split() + args.pop(0) + pers = "" + if (len(args) == 0): + pers = getNick(room,event) + else: + pers=" ".join(args) + try: + usrstats = stats[room.room_id,pers] + moy = "{:10.2f}".format(usrstats.char / usrstats.mess) + room.send_text(usrstats.nick + " a poste " + str(usrstats.mess) + " messages avec une moyenne de " + moy + " caracteres par message") + except: + room.send_text(pers + " : Personne non reconnue\n") def nb_kap(room,event): - global stats - args = event['content']['body'].split() - args.pop(0) - pers = "" - if (len(args) == 0): - pers = getNick(room,event) - else: - pers=" ".join(args) - try: - usrstats = stats[room.room_id,pers] - if (usrstats.kapoue < 10): - room.send_text(usrstats.nick + " a crié " + str(usrstats.kapoue) + " KAPOUE!") - elif (usrstats.kapoue < 50): - room.send_text(usrstats.nick + " a crié " + str(usrstats.kapoue) + " KAPOUE! Pendez le!") - elif (usrstats.kapoue < 150): - room.send_text(usrstats.nick + " a crié " + str(usrstats.kapoue) + " KAPOUE! Brûlez le vif!") + if (modules[room.room_id, 'stats']): + global stats + args = event['content']['body'].split() + args.pop(0) + pers = "" + if (len(args) == 0): + pers = getNick(room,event) else: - room.send_text(usrstats.nick + " a crié " + str(usrstats.kapoue) + " KAPOUE! Faites le manger par des fourmis! Pauvres bêtes...") - except: - room.send_text(pers + " : Personne non reconnue\n") + pers=" ".join(args) + try: + usrstats = stats[room.room_id,pers] + if (usrstats.kapoue < 10): + room.send_text(usrstats.nick + " a crié " + str(usrstats.kapoue) + " KAPOUE!") + elif (usrstats.kapoue < 50): + room.send_text(usrstats.nick + " a crié " + str(usrstats.kapoue) + " KAPOUE! Pendez le!") + elif (usrstats.kapoue < 150): + room.send_text(usrstats.nick + " a crié " + str(usrstats.kapoue) + " KAPOUE! Brûlez le vif!") + else: + room.send_text(usrstats.nick + " a crié " + str(usrstats.kapoue) + " KAPOUE! Faites le manger par des fourmis! Pauvres bêtes...") + except: + room.send_text(pers + " : Personne non reconnue\n") def quote(room,event): # Gestion des citations - global quotes - args = event['content']['body'].split() - args.pop(0) - famous = {} - try: - famous = quotes[room.room_id] - except: + if (modules[room.room_id, 'quote']): + global quotes + args = event['content']['body'].split() + args.pop(0) famous = {} + try: + famous = quotes[room.room_id] + except: + famous = {} - if (len(args) > 3 and args[0] == "add"): - #ajoute une quote - 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 - famous[nick,tps] = citation - quotes[room.room_id] = famous - room.send_text("Ajout de la citation de " + nick + ":" + citation) - else: - # message d'aide - room.send_text("!quote 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 quotes 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 famous.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"): - # toutes les quotes de tous les salons - reponse = "Les citations de tous les salons : " + "\n" - salon.send_text(reponse) - for rid,fame in quotes.items(): - reponse = "Voici les reponses du salon " + rid + "\n" - for cle,valeur in fame.items(): + if (len(args) > 3 and args[0] == "add"): + #ajoute une quote + 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 + famous[nick,tps] = citation + quotes[room.room_id] = famous + room.send_text("Ajout de la citation de " + nick + ":" + citation) + else: + # message d'aide + room.send_text("!quote 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 quotes 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 famous.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 quotes du pseudo spécifié - nick = " ".join(args) - reponse = "Voici les citations enregistrées de " + nick + "\n" - for cle,valeur in famous.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) - lmod = modos[room.room_id] - if (event['sender'] in admins): - id = args[1] - reponse = "Voici la citation supprimée : \n" - for rid,fame in quotes.items(): + elif (args[0] == "all"): + # toutes les quotes de tous les salons + reponse = "Les citations de tous les salons : " + "\n" + salon.send_text(reponse) + for rid,fame in quotes.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 quotes du pseudo spécifié + nick = " ".join(args) + reponse = "Voici les citations enregistrées de " + nick + "\n" + for cle,valeur in famous.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) + lmod = modos[room.room_id] + if (event['sender'] in admins): + id = args[1] + reponse = "Voici la citation supprimée : \n" + for rid,fame in quotes.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) + elif (event['sender'] in lmod): + id = args[1] + reponse = "Voici la citation supprimée : \n" + rid = room.room_id + fame = bieres[rid] 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) - elif (event['sender'] in lmod): - id = args[1] - reponse = "Voici la citation supprimée : \n" - rid = room.room_id - fame = bieres[rid] - 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) + salon.send_text(reponse) + else: + salon.send_text("Vous n'êtes pas autorisés à supprimer des citations.") + elif (len(args) > 0): + # cite une quote d'une personne precise + nick = " ".join(args) + phrases = [] + for cle,valeur in famous.items(): + if (cle[0] == nick): + phrases.append(cle[0] + " : " + valeur) + if (len(phrases) > 0 ): + reponses(room,phrases) + else: + room.send_text("Je n'ai pas de citations pour " + nick) else: - salon.send_text("Vous n'êtes pas autorisés à supprimer des citations.") - elif (len(args) > 0): - # cite une quote d'une personne precise - nick = " ".join(args) - phrases = [] - for cle,valeur in famous.items(): - if (cle[0] == nick): + # cite une quote aleatoire + phrases = [] + for cle,valeur in famous.items(): phrases.append(cle[0] + " : " + valeur) - if (len(phrases) > 0 ): - reponses(room,phrases) - else: - room.send_text("Je n'ai pas de citations pour " + nick) - else: - # cite une quote aleatoire - phrases = [] - for cle,valeur in famous.items(): - phrases.append(cle[0] + " : " + valeur) - if (len(phrases) > 0 ): - reponses(room,phrases) - else: - room.send_text("Je n'ai pas de citations pour ce salon") + if (len(phrases) > 0 ): + reponses(room,phrases) + else: + room.send_text("Je n'ai pas de citations pour ce salon") def biere(room,event): # Gestion des boissons - 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 + if (modules[room.room_id, 'biere']): + global bieres + args = event['content']['body'].split() args.pop(0) - submit = " ".join(args).split(":") - elu = submit[0] + brevages = {} + give = False + elu = "" + envoyeur = getNick(room,event) + try: - args = submit[1].split() + breuvages = bieres[room.room_id] except: - args = "" - if (len(args) > 2 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 bieres.items(): - reponse = "Voici les reponses du salon " + rid + "\n" - for cle,valeur in fame.items(): + 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) > 2 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) - 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) - lmod = modos[room.room_id] - if (event['sender'] in admins): - id = args[1] - reponse = "Voici le breuvage supprimé : \n" - for rid,fame in bieres.items(): + 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 bieres.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) + lmod = modos[room.room_id] + 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) + elif (event['sender'] in lmod): + id = args[1] + reponse = "Voici le breuvage supprimé : \n" + rid = room.room_id + fame = bieres[rid] 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) - elif (event['sender'] in lmod): - id = args[1] - reponse = "Voici le breuvage supprimé : \n" - rid = room.room_id - fame = bieres[rid] - 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) + 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: - 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): + # 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 " + 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) + if (len(phrases) > 0 ): + reponses(room,phrases) 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") + room.send_text("Je n'ai pas de breuvages pour ce salon") def boissons(room,event): # Gestion des alias de boissons - boisson = "" - elu = "" - - args = event['content']['body'].split() - try: - boisson = args[0][1:] - except: + if (modules[room.room_id, 'biere']): boisson = "" - args.pop(0) + elu = "" + + args = event['content']['body'].split() + try: + boisson = args[0][1:] + except: + boisson = "" + args.pop(0) - if (len(args) > 0): - elu = " ".join(args) + 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): - event['content']['body'] = "!biere give " + elu - elif (len(boisson) > 0): - event['content']['body'] = "!biere " + boisson - else: - event['content']['body'] = "!biere" + if (len(elu) > 0 and len(boisson) > 0): + event['content']['body'] = "!biere give " + elu + ":" + boisson + elif (len(elu) > 0): + event['content']['body'] = "!biere give " + elu + elif (len(boisson) > 0): + event['content']['body'] = "!biere " + boisson + else: + event['content']['body'] = "!biere" - biere(room,event) + biere(room,event) def accueil(room,event): # Mettre un message d'accueil - lmod = modos[room.room_id] - if (event['sender'] in admins or event['sender'] in lmod): - global welcome - args = event['content']['body'].split() - args.pop(0) - reponse = " ".join(args) - if (len(args) > 0): - welcome[room.room_id] = reponse - room.send_text("Le message d'accueil est désormais : " + reponse) + if (modules[room.room_id, 'welcome']): + lmod = modos[room.room_id] + if (event['sender'] in admins or event['sender'] in lmod): + global welcome + args = event['content']['body'].split() + args.pop(0) + reponse = " ".join(args) + if (len(args) > 0): + welcome[room.room_id] = reponse + room.send_text("Le message d'accueil est désormais : " + reponse) - else: - salon.send_text("Vous n'êtes pas autorisés à modifier le message d'accueil.") + else: + salon.send_text("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] - membership = event['content']['membership'] - nick = getNick(room,event) - alias = "" - if (len(room.aliases) > 0): - alias = room.aliases[0] - msg = "" - try: - #if (len(welcome[room.room_id]) > 0): - msg = welcome[room.room_id] - except: + if (modules[room.room_id, 'welcome']): + room_id = event['room_id'] + room = bot.client.rooms[room_id] + membership = event['content']['membership'] + nick = getNick(room,event) + alias = "" + if (len(room.aliases) > 0): + alias = room.aliases[0] msg = "" - if (membership == "join"): - room.send_text("Bienvenue sur " + alias + ", " + nick + ". " + msg) + try: + #if (len(welcome[room.room_id]) > 0): + msg = welcome[room.room_id] + except: + msg = "" + if (membership == "join"): + room.send_text("Bienvenue sur " + alias + ", " + nick + ". " + msg) def modo(room,event): # Definition d'un moderateur if (event['sender'] in admins): @@ -1318,11 +1349,65 @@ def modo(room,event): # Definition d'un moderateur else: salon.send_text("Vous n'êtes pas autorisés à définir les modérateurs.") +def module(room,event): # Definition des modules d'un salon + lmod = [] + try: + lmod = modos[room.room_id] + except: + lmod = [] + if (event['sender'] in admins or event['sender'] in lmod): + global modules + args = event['content']['body'].split() + args.pop(0) + if (len(args) == 2 and args[0] == "add"): + args.pop(0) + rmod = args[0] + if (rmod in liste_mod): + modules[room.room_id, rmod] = True + room.send_text(candidat + "Module : " + rmod + " activé.") + else: + room.send_text(candidat + "Module : " + rmod + " inconnu.") + elif (len(args) == 2 and args[0] == "del"): + args.pop(0) + rmod = args[0] + if (rmod in liste_mod): + modules[room.room_id, rmod] = False + room.send_text(candidat + "Module : " + rmod + " désactivé.") + else: + room.send_text(candidat + "Module : " + rmod + " inconnu.") + else: + # Lister les modules actifs du salon + rmod = "" + for cle,valeur in modules.items(): + if (cle[0] == room.room_id and valeur == True): + rmod = rmod + cle[1] + ", " + if (len(rmod) > 1): + rmod = rmod[:-2] + room.send_text("Modules actuels : " + rmod) + # Lister les modules disponibles + dmod = "" + for val in liste_mod: + dmod = dmod + val + ", " + if (len(dmod) > 1): + dmod = dmod[:-2] + room.send_text("Modules disponibles : " + dmod) + else: + salon.send_text("Vous n'êtes pas autorisés à définir les modules du salon.") + + def invitations(room_id, state): # Reponse aux invitations global bot try: global bot bot.client.join_room(room_id) + if ('welcome' in liste_mod): + modules[room.room_id, 'welcome'] = True + if ('roll' in liste_mod): + modules[room.room_id, 'roll'] = True + if ('quote' in liste_mod): + modules[room.room_id, 'quote'] = True + if ('liste' in liste_mod): + modules[room.room_id, 'liste'] = True time.sleep(2) del bot save() @@ -1336,8 +1421,8 @@ def main(): USERNAME = "" # Bot's username PASSWORD = "" # Bot's password SERVER = "" # Matrix server URL + mods = ["roll", "quote", "biere", "stats", "liste", "horloge", "carte", "card", "cristal", "welcome", "salut", "jdr", "gens", "va"] global admins - if ('AUTH' in config): USERNAME = config['AUTH']['username'] # Bot's username PASSWORD = config['AUTH']['password'] # Bot's password @@ -1345,11 +1430,16 @@ def main(): admins = config['AUTH']['admin'].split(",") # Admins du bot @admin1:host.tld,@admin2:host.tld,... else: print("Probleme de lecture de configuration asmodee.ini") - - #print("admins") - #for admin in admins: - # print(admin) + global liste_mod + if ('MOD' in config): + try: + liste_mod = config['MOD']['liste'].split(',') # Liste des modules + except: + liste_mod = mods + else + liste_mod = mods + # Create an instance of the MatrixBotAPI global bot bot = MatrixBotAPI(USERNAME, PASSWORD, SERVER) @@ -1361,76 +1451,92 @@ def main(): bot.add_handler(aide_handler) # Add a regex handler waiting for keywords and answers - #hi_handler = MRegexHandler("[Ss]alut|[Cc]halut|'lut|[Cc]oucou|[Bb]onjour|[Hh]ello", hi_callback) - #bot.add_handler(hi_handler) - #jdr_handler = MRegexHandler("[Jj]dr|[Rr]pg", jdr) - #bot.add_handler(jdr_handler) - #gens_handler = MRegexHandler("[Gg]ens", gens) - #bot.add_handler(gens_handler) - #maman_handler = MRegexHandler("[Mm]aman|[Mm]ere", maman) - #bot.add_handler(maman_handler) - #va_handler = MRegexHandler("ca va|vas]", va) - #bot.add_handler(va_handler) + if ('salut' in liste_mod): + hi_handler = MRegexHandler("[Ss]alut|[Cc]halut|'lut|[Cc]oucou|[Bb]onjour|[Hh]ello", hi_callback) + bot.add_handler(hi_handler) + if ('jdr' in liste_mod): + jdr_handler = MRegexHandler("[Jj]dr|[Rr]pg", jdr) + bot.add_handler(jdr_handler) + if ('gens' in liste_mod): + gens_handler = MRegexHandler("[Gg]ens", gens) + bot.add_handler(gens_handler) + if ('va' in liste_mod): + va_handler = MRegexHandler("ca va|vas]", va) + bot.add_handler(va_handler) # Add a regex handler waiting for the dice commands and aliases - entry_handler = MCommandHandler("", entryPoint, ':') - bot.add_handler(entry_handler) + if ('roll' in liste_mod): + entry_handler = MCommandHandler("", entryPoint, ':') + bot.add_handler(entry_handler) # Cartes !card tire une carte d'un paquet plein !carte tire une carte qui disparait du paquet - card_handler = MCommandHandler("card", card) - bot.add_handler(card_handler) - - carte_handler = MCommandHandler("carte", carte) - bot.add_handler(carte_handler) + if ('card' in liste_mod): + card_handler = MCommandHandler("card", card) + bot.add_handler(card_handler) + if ('carte' in liste_mod): + carte_handler = MCommandHandler("carte", carte) + bot.add_handler(carte_handler) # Un élément d'une liste - liste_handler = MCommandHandler("liste", liste) - bot.add_handler(liste_handler) + if ('liste' in liste_mod): + liste_handler = MCommandHandler("liste", liste) + bot.add_handler(liste_handler) # Boule de cristal - cristal_handler = MCommandHandler("cristal", cristal) - bot.add_handler(cristal_handler) + if ('cristal' in liste_mod): + 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) + # horloges + if ('horloge' in liste_mod): + horloge_read() + horloge_handler = MCommandHandler("horloge", horloge) + bot.add_handler(horloge_handler) # stats - stats_read() - stats_handler = MAllHandler(statistiques) - bot.add_handler(stats_handler) - last_handler = MCommandHandler("last", last) - bot.add_handler(last_handler) - actif_handler = MCommandHandler("actif", actif) - bot.add_handler(actif_handler) - nb_kap_handler = MCommandHandler("nb_kap", nb_kap) - bot.add_handler(nb_kap_handler) + if ('stats' in liste_mod): + stats_read() + stats_handler = MAllHandler(statistiques) + bot.add_handler(stats_handler) + last_handler = MCommandHandler("last", last) + bot.add_handler(last_handler) + actif_handler = MCommandHandler("actif", actif) + bot.add_handler(actif_handler) + nb_kap_handler = MCommandHandler("nb_kap", nb_kap) + bot.add_handler(nb_kap_handler) # quotes - quotes_read() - quote_handler = MCommandHandler("quote", quote) - bot.add_handler(quote_handler) + if ('quote' in liste_mod): + quotes_read() + quote_handler = MCommandHandler("quote", quote) + bot.add_handler(quote_handler) # bieres - bieres_read() - biere_handler = MCommandHandler("biere", biere) - bot.add_handler(biere_handler) - boisson_handler = MCommandHandler("", boissons, '%') - bot.add_handler(boisson_handler) + if ('biere' in liste_mod): + bieres_read() + biere_handler = MCommandHandler("biere", biere) + bot.add_handler(biere_handler) + boisson_handler = MCommandHandler("", boissons, '%') + bot.add_handler(boisson_handler) # Accueil - welcome_read() - welcome_handler = MCommandHandler("accueil", accueil) - bot.add_handler(welcome_handler) - bot.client.add_listener(bienvenue, event_type="m.room.member") + if ('welcome' in liste_mod): + welcome_read() + welcome_handler = MCommandHandler("accueil", accueil) + bot.add_handler(welcome_handler) + bot.client.add_listener(bienvenue, event_type="m.room.member") # Definition des moderateurs modos_read() modos_handler = MCommandHandler("modo", modo) bot.add_handler(modos_handler) + # Definition des modules + modules_read() + modules_handler = MCommandHandler("module", module) + bot.add_handler(modules_handler) + # Invitations bot.client.add_invite_listener(invitations)