Browse Source

generaliser la substitution du @room à l'envoi

master
nemesis 4 years ago
parent
commit
d973b8e146
  1. 1
      asmodee.ini
  2. 266
      asmodee.py

1
asmodee.ini

@ -9,6 +9,7 @@ admin = ""
liste = roll,quote,biere,stats,liste,horloge,carte,card,cristal,welcome,salut,jdr,gens,va,salon,kick
[MAIL]
malt = 0
msender = "user@domain.tld"
mpass = "password"
msmtp = "smtp"

266
asmodee.py

@ -12,6 +12,7 @@ import threading
import json
from datetime import datetime,timedelta
import smtplib
import os
from matrix_bot_api.matrix_bot_api import MatrixBotAPI
from matrix_bot_api.mregex_handler import MRegexHandler
@ -47,6 +48,7 @@ mails = {} # Liste de gens abonnés par mail au salon
liste_mod = [] # Modules disponibles
USERNAME = ""
malt = 0
msender = ""
mpass = ""
msmtp = ""
@ -292,8 +294,11 @@ class Parser: #Pour parser la ligne de commande
return True
return False
def msg(room,msg,content=False):
def msg(room,msg,sender,content=False):
try:
lmod = modos[room.room_id]
if (sender not in admins and sender not in lmod):
msg = msg.replace('@room', 'tout le monde')
if content:
bot.client.api.send_message_event(room.room_id, 'm.room.message', msg, None, None)
else:
@ -327,7 +332,7 @@ def verifPMRoom(room, event): # Pour obtenir ou créer un salon pour les message
# if alias in salon.aliases:
# print("trouvé : " + cle)
# print(salon.aliases)
# msg(salon,"gagné")
# msg(salon,"gagné",event['sender'])
# return salon
# else:
# print(salon.aliases)
@ -349,7 +354,7 @@ def verifPMRoom(room, event): # Pour obtenir ou créer un salon pour les message
except:
print("Impossible de creer ou joindre " + alias)
return None
#msg(salon,"nouvelle conversation")
#msg(salon,"nouvelle conversation",event['sender'])
# TODO vérifier la présence du sender dans la liste des membres de ce salon et réinviter si besoin
try:
salon.invite_user(event['sender'])
@ -383,7 +388,7 @@ def card(room, event): # Tirer une carte du paquet sans la retirer
modules[room.room_id, 'card'] = False
if (modules[room.room_id, 'card']):
reponse = cartes_base[random.randrange(0,len(cartes_base))]
msg(room,reponse)
msg(room,reponse,event['sender'])
@not_myself
def carte(room, event): # Tirer une carte du paquet en la retirant ensuite
@ -397,13 +402,13 @@ def carte(room, event): # Tirer une carte du paquet en la retirant ensuite
args = event['content']['body'].split()
if (len(args) > 1):
cartes=list(cartes_base)
msg(room,"Le paquet est melange")
msg(room,"Le paquet est melange",event['sender'])
else:
if (len(cartes) < 1):
cartes=list(cartes_base)
msg(room,"Le paquet est melange")
msg(room,"Le paquet est melange",event['sender'])
i = random.randrange(0,len(cartes))
msg(room,cartes[i])
msg(room,cartes[i],event['sender'])
cartes.pop(i)
@not_myself
@ -420,51 +425,51 @@ def help_center(room,event,name,private): # Aide sur les commandes disponibles
salon = verifPMRoom(room,event)
if (len(args) > 0):
if (re.search("roll", args[0])):
msg(salon,":roll <options> <des> (+-modifs ou des)\n\n- exemple :roll vr4g3 6d6 - \#g\#r3d6 +2 x3 : lance avec les details 6d6 en relancant les des avec un resultat de 4+ et en gardant les trois meilleurs, puis en retranchant 3d6 sans relancer les 4+ et en gardant tout, enfin ajouter 2. L'operation sera executee trois fois.\n\n- v : details (verbose) du jet\n- n : no add, chaque de est traite separement\n- e : explosif, si un de fait le maximum, on le relance et on additionne\n- z : Star Zars, le premier de est explosif. Mais s'il sort un 1, on retire ce 1 et la plus grande valeur des autres des\n- f<nb> : difficulte a atteindre par de avec option n\n- g<nb> : nombre de des conserves\n- r<nb> : relance si le de a obtenu au moins ce nombre\n- m<nb> : Enleve un succes si ce nombre ou moins est atteint\n- s<nb/nb> : seuil a atteindre et niveaux de reussites\n- w<nb> : lance un wild die avec les autres.")
msg(salon,":roll <options> <des> (+-modifs ou des)\n\n- exemple :roll vr4g3 6d6 - \#g\#r3d6 +2 x3 : lance avec les details 6d6 en relancant les des avec un resultat de 4+ et en gardant les trois meilleurs, puis en retranchant 3d6 sans relancer les 4+ et en gardant tout, enfin ajouter 2. L'operation sera executee trois fois.\n\n- v : details (verbose) du jet\n- n : no add, chaque de est traite separement\n- e : explosif, si un de fait le maximum, on le relance et on additionne\n- z : Star Zars, le premier de est explosif. Mais s'il sort un 1, on retire ce 1 et la plus grande valeur des autres des\n- f<nb> : difficulte a atteindre par de avec option n\n- g<nb> : nombre de des conserves\n- r<nb> : relance si le de a obtenu au moins ce nombre\n- m<nb> : Enleve un succes si ce nombre ou moins est atteint\n- s<nb/nb> : seuil a atteindre et niveaux de reussites\n- w<nb> : lance un wild die avec les autres.",event['sender'])
elif (re.search("sw", args[0])):
msg(salon,"- :sw <options> <des> : Lance les des en mode Savage Worlds\nVerbose/Noadd/Explosif/Seuil 4/Niveau de reussite 4/Wild Die d6.")
msg(salon,"- :sw <options> <des> : Lance les des en mode Savage Worlds\nVerbose/Noadd/Explosif/Seuil 4/Niveau de reussite 4/Wild Die d6.",event['sender'])
elif (re.search("dom", args[0])):
msg(salon,"- :dom <options> <des> : Lance les dommages en mode Savage Worlds\nVerbose/Explosif/seuil 4/Niveau de reussite 4.")
msg(salon,"- :dom <options> <des> : Lance les dommages en mode Savage Worlds\nVerbose/Explosif/seuil 4/Niveau de reussite 4.",event['sender'])
elif (re.search("owod", args[0])):
msg(salon,"- :owod <options> <des> : Lance les des en mode Ancien Monde des Tenebres\nVerbose/Noadd/Difficulte 6/Relance les 10/Les 1 enleve un succes.")
msg(salon,"- :owod <options> <des> : Lance les des en mode Ancien Monde des Tenebres\nVerbose/Noadd/Difficulte 6/Relance les 10/Les 1 enleve un succes.",event['sender'])
elif (re.search("wod", args[0])):
msg(salon,"- :wod <options> <des> : Lance les des en mode Nouveau Monde des Tenebres\nVerbose/Noadd/Difficulte 8/Relance les 10.")
msg(salon,"- :wod <options> <des> : Lance les des en mode Nouveau Monde des Tenebres\nVerbose/Noadd/Difficulte 8/Relance les 10.",event['sender'])
elif (re.search("ars", args[0])):
msg(salon,"- :ars <options> <des> : Lance les des en mode Ars Magicka : de de tension\nVerbose/Noadd/Sur un 1, on relance et on double.")
msg(salon,"- :ars <options> <des> : Lance les des en mode Ars Magicka : de de tension\nVerbose/Noadd/Sur un 1, on relance et on double.",event['sender'])
elif (re.search("des", args[0])):
msg(salon,"- :des <options> <des> : Lance des des de desastre\nVerbose/Noadd/Difficulte 10.")
msg(salon,"- :des <options> <des> : Lance des des de desastre\nVerbose/Noadd/Difficulte 10.",event['sender'])
elif (re.search("star", args[0])):
msg(salon,"- :star <options> <des> : Lance des des en mode star wars. Le premier de est explosif. Mais s'il sort un 1, on retire ce 1 et la plus grande valeur des autres des.")
msg(salon,"- :star <options> <des> : Lance des des en mode star wars. Le premier de est explosif. Mais s'il sort un 1, on retire ce 1 et la plus grande valeur des autres des.",event['sender'])
elif (re.search("carte", args[0])):
msg(salon,"- !carte : Tire une carte et la retire du paquet\n- !carte m : remelange le paquet.")
msg(salon,"- !carte : Tire une carte et la retire du paquet\n- !carte m : remelange le paquet.",event['sender'])
elif (re.search("card", args[0])):
msg(salon,"- !card : tire une carte sans la retirer du paquet.")
msg(salon,"- !card : tire une carte sans la retirer du paquet.",event['sender'])
elif (re.search("liste", args[0])):
msg(salon,"- !liste <options/de/la/liste> [Nombre d'elements souhaites] : retourne ce nombre d'elements de la liste.")
msg(salon,"- !liste <options/de/la/liste> [Nombre d'elements souhaites] : retourne ce nombre d'elements de la liste.",event['sender'])
elif (re.search("horloge", args[0])):
msg(salon,"- !horloge : Affiche les horloges\n- !horloge <Nom de l'horloge> <niveau> : Crée ou modifie une horloge en lui mettant un niveau (normalement de 0 à 6)\n- !horloge del <Nom de l'horloge> : Supprime cette horloge.")
msg(salon,"- !horloge : Affiche les horloges\n- !horloge <Nom de l'horloge> <niveau> : Crée ou modifie une horloge en lui mettant un niveau (normalement de 0 à 6)\n- !horloge del <Nom de l'horloge> : Supprime cette horloge.",event['sender'])
elif (re.search("last", args[0])):
msg(salon,"- !last : Date de son dernier post\n- !last <Personne> : Date du dernier post de la personne\n")
msg(salon,"- !last : Date de son dernier post\n- !last <Personne> : Date du dernier post de la personne\n",event['sender'])
elif (re.search("actif", args[0])):
msg(salon,"- !actif : Nombre de ses messages et taille moyenne de ceux ci\n- !actif <Personne> : Nombre des messages de cette personne et taille moyenne de ceux ci\n")
msg(salon,"- !actif : Nombre de ses messages et taille moyenne de ceux ci\n- !actif <Personne> : Nombre des messages de cette personne et taille moyenne de ceux ci\n",event['sender'])
elif (re.search("quote", args[0])):
msg(salon,"- !quote : Affiche une citation du salon au hasard\n- !quote <Personne> : Affiche une citation d'une personne du salon au hasard\n- !quote add <Personne>:<citation> : Enregistre une citation\n- !quote list [Personne] : Affiche les citation du salon ou d'une personne du salon en message privé\n- !quote list all : Affiche toutes les citations de tous les salons en message privé\n- !quote del <id> : Supprime la citation avec l'id spécifié")
msg(salon,"- !quote : Affiche une citation du salon au hasard\n- !quote <Personne> : Affiche une citation d'une personne du salon au hasard\n- !quote add <Personne>:<citation> : Enregistre une citation\n- !quote list [Personne] : Affiche les citation du salon ou d'une personne du salon en message privé\n- !quote list all : Affiche toutes les citations de tous les salons en message privé\n- !quote del <id> : Supprime la citation avec l'id spécifié",event['sender'])
elif (re.search("biere", args[0])):
msg(salon,"- !biere : Fournit une boisson du salon au hasard\n- !biere <Nom de breuvage> : Fournit une boisson spécifique du salon\n- !biere give <Personne>[:Nom du Breuvage] : Offre une boisson (spécifique en option) à la personne spécifiée\n- !biere add <Nom du breuvage>:<Phrase> : Enregistre une phrase pour ce breuvage\n- !biere list [Nom de Breuvage] : Affiche les phrases des breuvages du salon ou celles d'un breuvage spécifique du salon en message privé\n- !biere list all : Affiche toutes les citations de tous breuvages de tous les salons en message privé\n- !biere del <id> : Supprime la phrase avec l'id spécifié")
msg(salon,"- !biere : Fournit une boisson du salon au hasard\n- !biere <Nom de breuvage> : Fournit une boisson spécifique du salon\n- !biere give <Personne>[:Nom du Breuvage] : Offre une boisson (spécifique en option) à la personne spécifiée\n- !biere add <Nom du breuvage>:<Phrase> : Enregistre une phrase pour ce breuvage\n- !biere list [Nom de Breuvage] : Affiche les phrases des breuvages du salon ou celles d'un breuvage spécifique du salon en message privé\n- !biere list all : Affiche toutes les citations de tous breuvages de tous les salons en message privé\n- !biere del <id> : Supprime la phrase avec l'id spécifié",event['sender'])
elif (re.search("accueil", args[0])):
msg(salon,"- !accueil <message> : Modifie le message d'accueil avec message. Il sera affiché à tout nouvel arrivant précédé de la mention 'Bienvenue sur le salon XXX, YYY.'")
msg(salon,"- !accueil <message> : Modifie le message d'accueil avec message. Il sera affiché à tout nouvel arrivant précédé de la mention 'Bienvenue sur le salon XXX, YYY.'",event['sender'])
elif (re.search("kick", args[0])):
msg(salon,"- !kick <@mxid> [@mxid] ... : kick les users listés")
msg(salon,"- !kick <@mxid> [@mxid] ... : kick les users listés",event['sender'])
elif (re.search("mails", args[0]) or re.search("mail", args[0])):
msg(salon,"- !mail add <email> : s'abonner aux messages du salon par mail.\n -!mail del <email> : se désabonner aux messages du salon par mail.")
msg(salon,"- !mail add <email> : s'abonner aux messages du salon par mail.\n -!mail del <email> : se désabonner aux messages du salon par mail.",event['sender'])
elif (re.search("modo", args[0])):
msg(salon,"- !modo : Affiche la liste des modérateurs (ils peuvent gérer le message d'accueil, supprimer des citations ou des boissons, ajouter/retirer des modules, ajouter/retirer des modérateurs)\n- !modo add <mxid> : Ajoute une personne comme modérateur du salon\n- !modo del <mxid> : Retire une personne des modérateurs.")
msg(salon,"- !modo : Affiche la liste des modérateurs (ils peuvent gérer le message d'accueil, supprimer des citations ou des boissons, ajouter/retirer des modules, ajouter/retirer des modérateurs)\n- !modo add <mxid> : Ajoute une personne comme modérateur du salon\n- !modo del <mxid> : Retire une personne des modérateurs.",event['sender'])
elif (re.search("module", args[0])):
msg(salon,"- !module : Affiche la liste des modules actifs sur le salon ainsi que celle des modules disponibles\n- !module add <module> : Active un module sur le salon\n- !modo del <module> : Désactive un module sur le salon.")
msg(salon,"- !module : Affiche la liste des modules actifs sur le salon ainsi que celle des modules disponibles\n- !module add <module> : Active un module sur le salon\n- !modo del <module> : Désactive un module sur le salon.",event['sender'])
elif (re.search("cristal", args[0])):
msg(salon,"- !cristal : Réponds à une question posée commençant par Est-ce, Combien, Pourquoi, Quand, Comment, Où et se terminant par un point d'interrogation.")
msg(salon,"- !cristal : Réponds à une question posée commençant par Est-ce, Combien, Pourquoi, Quand, Comment, Où et se terminant par un point d'interrogation.",event['sender'])
else:
msg(salon,"A venir")
msg(salon,"A venir",event['sender'])
else:
rid = room.room_id
message = "Commandes disponibles:"
@ -494,7 +499,7 @@ def help_center(room,event,name,private): # Aide sur les commandes disponibles
if (cle[0] == rid and cle[1] == "roll" and valeur):
message += "\n- :roll <options> <des>\n- :sw <options> <des>\n- :dom <options> <des>\n- :wod <options> <des>\n- :owod <options> <des>\n- :ars <options> <des>\n- :des <options> <des>\n- :star <options> <des>"
message += "\n- !modo : Gère les modérateurs du salon\n- !module : Gère les modules actifs sur le salon\n\n- Pour plus de details, tapez !" + name + " <commande>\n\nRetrouvez Asmodee sur https://git.ombreport.info/nemesis/asmodee_matrix"
msg(salon,message)
msg(salon,message,event['sender'])
def roll(result,type,explosif,nb,f,noadd,ars,relance,mitige): # Lancement d'un dé
# verif type et contenu params?
@ -631,7 +636,7 @@ def entryPoint(room, event): # Analyse des commandes ":", point d'entrée pour l
if (not parser.arg.get("error",None) and not parser.eat("$",0)):
parser.arg["noerror"] = True
msg(room,"Je n'ai pas compris " + text)
msg(room,"Je n'ai pas compris " + text,event['sender'])
def rollOptionPoint(): # Parse des options
@ -812,10 +817,10 @@ def rollPlusMoinsPoint(): # Gérer les bloc du jet séparés par les + et -, aff
tmp = (res1 - s) // d + 1
result += ("/" + ("0" if (tmp < 0) else str(tmp))) if (s != 0) else ""
parser.arg["jet"] = jet
msg(parser.room,parser.nick + " rolls " + ("e" if exp else "") + ("n" if noa else "") + ("v" if ver else "") + ("a" if ars else "") + ("s"+str(s)+"/"+str(d) if (s != 0) else "") + (" " if (exp or noa or ver or s != 0) else "") + result)
msg(parser.room,parser.nick + " rolls " + ("e" if exp else "") + ("n" if noa else "") + ("v" if ver else "") + ("a" if ars else "") + ("s"+str(s)+"/"+str(d) if (s != 0) else "") + (" " if (exp or noa or ver or s != 0) else "") + result, "dice")
elif (not parser.arg.get("noerror",False)):
msg(parser.room,"match = " + parser.mtch + "\nstr = " + parser.str)
msg(parser.room,"Rien compris. Essayez '!help' pour obtenir de l'aide.")
msg(parser.room,"match = " + parser.mtch + "\nstr = " + parser.str, "dice")
msg(parser.room,"Rien compris. Essayez '!help' pour obtenir de l'aide.", "dice")
def rollEntityPoint(): # Parser les séparateurs de bloc + et -
@ -866,7 +871,7 @@ 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)
msg(room,phrases[i],content, "reponses")
@not_myself
def jdr(room, event):
@ -954,9 +959,9 @@ def liste(room, event): # Afficher un élement aléatoire d'une liste fournie
for i in range(nb):
id = random.randrange(0,len(list))
res.append(list.pop(id))
msg(room,nick + " obtient :\n" + '\n'.join(res))
msg(room,nick + " obtient :\n" + '\n'.join(res),event['sender'])
else:
msg(room,"Utilisation : !liste <options/de/la/liste> [nombre d elements]")
msg(room,"Utilisation : !liste <options/de/la/liste> [nombre d elements]",event['sender'])
@not_myself
def cristal(room, event): # Affiche une réponse à une question posée
@ -971,7 +976,7 @@ def cristal(room, event): # Affiche une réponse à une question posée
args = event['content']['body'].split()
args.pop(0)
if (len(args) < 2 or args[len(args)-1][-1] != '?'):
msg(room,"Utilisation : !cristal <Quelle est votre question?>")
msg(room,"Utilisation : !cristal <Quelle est votre question?>",event['sender'])
else:
args[len(args)-1] = args[len(args)-1][0:-1]
conj = args[0]
@ -1038,21 +1043,21 @@ def cristal(room, event): # Affiche une réponse à une question posée
def aff_hor(room, hor, valeur): # affichage des horloges
if (int(valeur) == 0):
msg(room,hor + " : " + chr(128320) + "\n")
msg(room,hor + " : " + chr(128320) + "\n", "horloge")
elif (int(valeur) == 1):
msg(room,hor + " : " + chr(128338) + "\n")
msg(room,hor + " : " + chr(128338) + "\n", "horloge")
elif (int(valeur) == 2):
msg(room,hor + " : " + chr(128341) + "\n")
msg(room,hor + " : " + chr(128341) + "\n", "horloge")
elif (int(valeur) == 3):
msg(room,hor + " : " + chr(128344) + "\n")
msg(room,hor + " : " + chr(128344) + "\n", "horloge")
elif (int(valeur) == 4):
msg(room,hor + " : " + chr(128345) + "\n")
msg(room,hor + " : " + chr(128345) + "\n", "horloge")
elif (int(valeur) == 5):
msg(room,hor + " : " + chr(128346) + "\n")
msg(room,hor + " : " + chr(128346) + "\n", "horloge")
elif (int(valeur) == 6):
msg(room,hor + " : " + chr(128347) + "\n")
msg(room,hor + " : " + chr(128347) + "\n", "horloge")
else:
msg(room,hor + " : " + str(valeur) + " \n")
msg(room,hor + " : " + str(valeur) + " \n", "horloge")
@not_myself
def horloge(room, event): # Gestion des horloges PBTA
@ -1099,7 +1104,7 @@ def horloge(room, event): # Gestion des horloges PBTA
args.pop(0)
del clock[room.room_id, ' '.join(args)]
else:
msg(room,"Utilisation : \n- !horloge : Affiche les horloges. \n- !horloge <nom> <niveau> : Place ou crée l'horloge au niveau spécifié.\n- !horloge del <nom> : Supprime l'horloge.")
msg(room,"Utilisation : \n- !horloge : Affiche les horloges. \n- !horloge <nom> <niveau> : Place ou crée l'horloge au niveau spécifié.\n- !horloge del <nom> : Supprime l'horloge.",event['sender'])
@not_myself
def statistiques(room,event): # Enregistrement des statistiques
@ -1190,7 +1195,7 @@ def last(room,event): # Regarde la dernière fois que quelqu'un a écrit un mess
for user,usrstats in all_usr.items():
if ((max_sign == "+" and usrstats.date < ref_duree) or ((max_sign == "-" and usrstats.date > ref_duree))):
reponse += "- " + usrstats.nick + "(" + user + ")" + " le " + usrstats.date.strftime("%Y-%m-%d %H:%M:%S") + "\n"
msg(salon, reponse)
msg(salon, reponse,event['sender'])
elif (len(args) >= 1 and args[0] == "inactifs"):
max_sign = "+"
max_duree = 0
@ -1211,7 +1216,7 @@ def last(room,event): # Regarde la dernière fois que quelqu'un a écrit un mess
for user,usrstats in all_usr.items():
if (((max_sign == "+" and usrstats.date < ref_duree) or ((max_sign == "-" and usrstats.date > ref_duree))) and usrstats.mess <= max_mess):
reponse += "- " + usrstats.nick + "(" + user + ")" + " le " + usrstats.date.strftime("%Y-%m-%d %H:%M:%S") + "\n"
msg(salon, reponse)
msg(salon, reponse,event['sender'])
else:
if (len(args) == 0):
pers = getNick(room,event)
@ -1219,12 +1224,12 @@ def last(room,event): # Regarde la dernière fois que quelqu'un a écrit un mess
pers=" ".join(args)
try:
usrstats = stats[room.room_id,pers]
msg(room,"J'ai vu " + usrstats.nick + " poster pour la derniere fois le " + usrstats.date.strftime("%Y-%m-%d %H:%M:%S"))
msg(room,"J'ai vu " + usrstats.nick + " poster pour la derniere fois le " + usrstats.date.strftime("%Y-%m-%d %H:%M:%S"),event['sender'])
except:
msg(room,pers + " : Personne non reconnue")
msg(room,pers + " : Personne non reconnue",event['sender'])
#for cle,valeur in stats.items():
# if (cle[0] == room.room_id):
# msg(room,cle[1] + "\n")
# msg(room,cle[1] + "\n",event['sender'])
@not_myself
@ -1251,7 +1256,7 @@ def actif(room,event): # Stats d'activité d'une personne
if us.user not in dupli_check:
dupli_check.append(us.user)
reponse = reponse + us.nick + " : " + str(us.mess) + "\n"
msg(salon,reponse)
msg(salon,reponse,event['sender'])
else:
pers = ""
if (len(args) == 0):
@ -1261,9 +1266,9 @@ def actif(room,event): # Stats d'activité d'une personne
try:
usrstats = stats[room.room_id,pers]
moy = "{:10.2f}".format(usrstats.char / usrstats.mess)
msg(room,usrstats.nick + " a poste " + str(usrstats.mess) + " messages avec une moyenne de " + moy + " caracteres par message")
msg(room,usrstats.nick + " a poste " + str(usrstats.mess) + " messages avec une moyenne de " + moy + " caracteres par message",event['sender'])
except:
msg(room,pers + " : Personne non reconnue\n")
msg(room,pers + " : Personne non reconnue\n",event['sender'])
@not_myself
def nb_kap(room,event):
@ -1284,15 +1289,15 @@ def nb_kap(room,event):
try:
usrstats = stats[room.room_id,pers]
if (usrstats.kapoue < 10):
msg(room,usrstats.nick + " a crié " + str(usrstats.kapoue) + " KAPOUE!")
msg(room,usrstats.nick + " a crié " + str(usrstats.kapoue) + " KAPOUE!",event['sender'])
elif (usrstats.kapoue < 50):
msg(room,usrstats.nick + " a crié " + str(usrstats.kapoue) + " KAPOUE! Pendez le!")
msg(room,usrstats.nick + " a crié " + str(usrstats.kapoue) + " KAPOUE! Pendez le!",event['sender'])
elif (usrstats.kapoue < 150):
msg(room,usrstats.nick + " a crié " + str(usrstats.kapoue) + " KAPOUE! Brûlez le vif!")
msg(room,usrstats.nick + " a crié " + str(usrstats.kapoue) + " KAPOUE! Brûlez le vif!",event['sender'])
else:
msg(room,usrstats.nick + " a crié " + str(usrstats.kapoue) + " KAPOUE! Faites le manger par des fourmis! Pauvres bêtes...")
msg(room,usrstats.nick + " a crié " + str(usrstats.kapoue) + " KAPOUE! Faites le manger par des fourmis! Pauvres bêtes...",event['sender'])
except:
msg(room,pers + " : Personne non reconnue\n")
msg(room,pers + " : Personne non reconnue\n",event['sender'])
@not_myself
def quote(room,event): # Gestion des citations
@ -1323,10 +1328,10 @@ def quote(room,event): # Gestion des citations
tps = datetime.now().microsecond
famous[nick,tps] = citation
quotes[room.room_id] = famous
msg(room,"Ajout de la citation de " + nick + ":" + citation)
msg(room,"Ajout de la citation de " + nick + ":" + citation,event['sender'])
else:
# message d'aide
msg(room,"!quote add <nick>:<citation>")
msg(room,"!quote add <nick>:<citation>",event['sender'])
elif (len(args) > 0 and args[0] == "list"):
# liste les quotes
args.pop(0)
@ -1339,21 +1344,21 @@ def quote(room,event): # Gestion des citations
for cle,valeur in famous.items():
reponse = reponse + cle[0] + " / " + str(cle[1]) + " : " + valeur + "\n"
if (len(reponse) > 500):
msg(salon,reponse)
msg(salon,reponse,event['sender'])
reponse = ""
msg(salon,reponse)
msg(salon,reponse,event['sender'])
elif (args[0] == "all"):
# toutes les quotes de tous les salons
reponse = "Les citations de tous les salons : " + "\n"
msg(salon,reponse)
msg(salon,reponse,event['sender'])
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):
msg(salon,reponse)
msg(salon,reponse,event['sender'])
reponse = ""
msg(salon,reponse)
msg(salon,reponse,event['sender'])
else:
# les quotes du pseudo spécifié
nick = " ".join(args)
@ -1361,7 +1366,7 @@ def quote(room,event): # Gestion des citations
for cle,valeur in famous.items():
if (cle[0] == nick):
reponse = reponse + cle[0] + " / " + str(cle[1]) + " : " + valeur + "\n"
msg(salon,reponse)
msg(salon,reponse,event['sender'])
elif (len(args) > 1 and args[0] == "del"):
salon = verifPMRoom(room,event)
lmod = modos[room.room_id]
@ -1374,7 +1379,7 @@ def quote(room,event): # Gestion des citations
del fame[cle[0],cle[1]]
reponse = reponse + rid + " / " + cle[0] + " / " + str(cle[1]) + " : " + valeur + "\n"
break
msg(salon,reponse)
msg(salon,reponse,event['sender'])
elif (event['sender'] in lmod):
id = args[1]
reponse = "Voici la citation supprimée : \n"
@ -1385,9 +1390,9 @@ def quote(room,event): # Gestion des citations
del fame[cle[0],cle[1]]
reponse = reponse + rid + " / " + cle[0] + " / " + str(cle[1]) + " : " + valeur + "\n"
break
msg(salon,reponse)
msg(salon,reponse,event['sender'])
else:
msg(salon,"Vous n'êtes pas autorisés à supprimer des citations.")
msg(salon,"Vous n'êtes pas autorisés à supprimer des citations.",event['sender'])
elif (len(args) > 0):
# cite une quote d'une personne precise
nick = " ".join(args)
@ -1398,7 +1403,7 @@ def quote(room,event): # Gestion des citations
if (len(phrases) > 0 ):
reponses(room,phrases)
else:
msg(room,"Je n'ai pas de citations pour " + nick)
msg(room,"Je n'ai pas de citations pour " + nick,event['sender'])
else:
# cite une quote aleatoire
phrases = []
@ -1407,7 +1412,7 @@ def quote(room,event): # Gestion des citations
if (len(phrases) > 0 ):
reponses(room,phrases)
else:
msg(room,"Je n'ai pas de citations pour ce salon")
msg(room,"Je n'ai pas de citations pour ce salon",event['sender'])
@not_myself
def salon(room,event): # Gestion des listes de salons recommandes
@ -1441,7 +1446,7 @@ def salon(room,event): # Gestion des listes de salons recommandes
desc = " ".join(args)
famous[ref] = desc
salons[room.room_id] = famous
msg(room,"Ajout du salon " + ref + " : " + desc)
msg(room,"Ajout du salon " + ref + " : " + desc,event['sender'])
elif (len(args) > 1 and args[0] == "del"):
salon = verifPMRoom(room,event)
lmod = modos[room.room_id]
@ -1455,7 +1460,7 @@ def salon(room,event): # Gestion des listes de salons recommandes
del fame[cle]
reponse = reponse + rid + " / " + cle + " : " + valeur + "\n"
break
msg(room,reponse)
msg(room,reponse,event['sender'])
elif (event['sender'] in lmod):
id = args[1]
reponse = "Voici le salon supprimé : \n"
@ -1466,20 +1471,20 @@ def salon(room,event): # Gestion des listes de salons recommandes
del fame[cle]
reponse = reponse + rid + " / " + cle + " : " + valeur + "\n"
break
msg(room,reponse)
msg(room,reponse,event['sender'])
else:
msg(salon,"Vous n'êtes pas autorisés à supprimer des salons.")
msg(salon,"Vous n'êtes pas autorisés à supprimer des salons.",event['sender'])
elif (len(args) > 0):
# cite un salon precis
ref = args[0]
trouve = 0
for cle,valeur in famous.items():
if (cle == ref):
msg(salon,cle + " : " + valeur)
msg(salon,cle + " : " + valeur,event['sender'])
trouve = 1
break
if (trouve == 0):
msg(room,"Je n'ai pas de salons nomme " + ref)
msg(room,"Je n'ai pas de salons nomme " + ref,event['sender'])
else:
# cite tous les salons
reponse = ""
@ -1491,9 +1496,9 @@ def salon(room,event): # Gestion des listes de salons recommandes
reponse = reponse + cle + " : " + valeur + "\n"
trouve = 1
if (trouve == 0):
msg(room,"Je n'ai pas de salons recommandes pour ce salon")
msg(room,"Je n'ai pas de salons recommandes pour ce salon",event['sender'])
else:
msg(room,reponse)
msg(room,reponse,event['sender'])
@not_myself
def addquote(room,event): # enregistrer les citations mode reponses matrix
@ -1539,7 +1544,7 @@ def addquote(room,event): # enregistrer les citations mode reponses matrix
# enregistrement de la citation
famous[auteur,tps] = content
citations[room.room_id] = famous
msg(room,"Ajout de la citation de " + auteur + ":")
msg(room,"Ajout de la citation de " + auteur + ":",event['sender'])
bot.client.api.send_message_event(room.room_id, 'm.room.message', content, None, None)
@not_myself
@ -1568,7 +1573,7 @@ def showquote(room, event): # afficher les citations mode reponse matrix
if (len(phrases) > 0 ):
reponses(room,phrases,True)
else:
msg(room,"Je n'ai pas de citations pour " + nick)
msg(room,"Je n'ai pas de citations pour " + nick,event['sender'])
else:
# cite une quote aleatoire
phrases = []
@ -1577,7 +1582,7 @@ def showquote(room, event): # afficher les citations mode reponse matrix
if (len(phrases) > 0 ):
reponses(room,phrases,True)
else:
msg(room,"Je n'ai pas de citations pour ce salon")
msg(room,"Je n'ai pas de citations pour ce salon",event['sender'])
@not_myself
def biere(room,event): # Gestion des boissons
@ -1629,10 +1634,10 @@ def biere(room,event): # Gestion des boissons
tps = datetime.now().microsecond
breuvages[nick,tps] = citation
bieres[room.room_id] = breuvages
msg(room,"Ajout du breuvage " + nick + ":" + citation)
msg(room,"Ajout du breuvage " + nick + ":" + citation,event['sender'])
else:
# message d'aide
msg(room,"!biere add <nick>:<citation>")
msg(room,"!biere add <nick>:<citation>",event['sender'])
elif (len(args) > 0 and args[0] == "list"):
# liste les quotes
args.pop(0)
@ -1645,21 +1650,21 @@ def biere(room,event): # Gestion des boissons
for cle,valeur in breuvages.items():
reponse = reponse + cle[0] + " / " + str(cle[1]) + " : " + valeur + "\n"
if (len(reponse) > 500):
msg(salon,reponse)
msg(salon,reponse,event['sender'])
reponse = ""
msg(salon,reponse)
msg(salon,reponse,event['sender'])
elif (args[0] == "all"):
# tous les breuvages de tous les salons
reponse = "Les breuvages de tous les salons : " + "\n"
msg(salon,reponse)
msg(salon,reponse,event['sender'])
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):
msg(salon,reponse)
msg(salon,reponse,event['sender'])
reponse = ""
msg(salon,reponse)
msg(salon,reponse,event['sender'])
else:
# les breuvages du pseudo spécifié
nick = " ".join(args)
@ -1667,7 +1672,7 @@ def biere(room,event): # Gestion des boissons
for cle,valeur in breuvages.items():
if (cle[0] == nick):
reponse = reponse + cle[0] + " / " + str(cle[1]) + " : " + valeur + "\n"
msg(salon,reponse)
msg(salon,reponse,event['sender'])
elif (len(args) > 1 and args[0] == "del"):
salon = verifPMRoom(room,event)
lmod = modos[room.room_id]
@ -1680,7 +1685,7 @@ def biere(room,event): # Gestion des boissons
del fame[cle[0],cle[1]]
reponse = reponse + rid + " / " + cle[0] + " / " + str(cle[1]) + " : " + valeur + "\n"
break
msg(salon,reponse)
msg(salon,reponse,event['sender'])
elif (event['sender'] in lmod):
id = args[1]
reponse = "Voici le breuvage supprimé : \n"
@ -1691,9 +1696,9 @@ def biere(room,event): # Gestion des boissons
del fame[cle[0],cle[1]]
reponse = reponse + rid + " / " + cle[0] + " / " + str(cle[1]) + " : " + valeur + "\n"
break
msg(salon,reponse)
msg(salon,reponse,event['sender'])
else:
msg(salon,"Vous n'êtes pas autorisés à supprimer des breuvages.")
msg(salon,"Vous n'êtes pas autorisés à supprimer des breuvages.",event['sender'])
elif (len(args) > 0):
# cite une reponse d'un breuvage precis
nick = " ".join(args)
@ -1707,7 +1712,7 @@ def biere(room,event): # Gestion des boissons
if (len(phrases) > 0 ):
reponses(room,phrases)
else:
msg(room,"Je n'ai pas de " + nick + " en stock!")
msg(room,"Je n'ai pas de " + nick + " en stock!",event['sender'])
else:
# cite une réponse d'un breuvage aleatoire
phrases = []
@ -1719,7 +1724,7 @@ def biere(room,event): # Gestion des boissons
if (len(phrases) > 0 ):
reponses(room,phrases)
else:
msg(room,"Je n'ai pas de breuvages pour ce salon")
msg(room,"Je n'ai pas de breuvages pour ce salon",event['sender'])
@not_myself
def boissons(room,event): # Gestion des alias de boissons
@ -1769,10 +1774,10 @@ def accueil(room,event): # Mettre un message d'accueil
reponse = " ".join(args)
if (len(args) > 0):
welcome[room.room_id] = reponse
msg(room,"Le message d'accueil est désormais : " + reponse)
msg(room,"Le message d'accueil est désormais : " + reponse,event['sender'])
else:
msg(salon,"Vous n'êtes pas autorisés à modifier le message d'accueil.")
msg(salon,"Vous n'êtes pas autorisés à modifier le message d'accueil.",event['sender'])
def bienvenue(event): # Affichage d'un message d'accueil aux nouveaux venus
room_id = event['room_id']
@ -1801,7 +1806,7 @@ def bienvenue(event): # Affichage d'un message d'accueil aux nouveaux venus
except:
reponse = ""
if (membership == "join" and prev_member != "join"):
msg(room,"Bienvenue sur " + alias + ", " + nick + ". " + reponse)
msg(room,"Bienvenue sur " + alias + ", " + nick + ". " + reponse,event['sender'])
@not_myself
def addmails(room,event): # Abonnements mail aux messages
@ -1826,9 +1831,9 @@ def addmails(room,event): # Abonnements mail aux messages
if (not mail in lmails):
lmails.append(mail)
mails[room.room_id] = lmails
msg(room,mail + " recevra des mails.")
msg(room,mail + " recevra des mails.",event['sender'])
else:
msg(room,mail + " reçoit déjà des mails.")
msg(room,mail + " reçoit déjà des mails.",event['sender'])
elif (len(args) > 1 and args[0] == "del"):
args.pop(0)
mail = args[0]
@ -1836,13 +1841,13 @@ def addmails(room,event): # Abonnements mail aux messages
place = lmails.index(mail)
del lmails[place]
mails[room.room_id] = lmails
msg(room,mail + " ne recevra plus de mails.")
msg(room,mail + " ne recevra plus de mails.",event['sender'])
else:
msg(room,mail + " ne reçoit pas de mails.")
msg(room,mail + " ne reçoit pas de mails.",event['sender'])
else:
msg(room,"\n".join(lmails))
msg(room,"\n".join(lmails),event['sender'])
else:
msg(salon,"Vous n'êtes pas autorisés à définir les réceptions de mails pour ce salon.")
msg(salon,"Vous n'êtes pas autorisés à définir les réceptions de mails pour ce salon.",event['sender'])
@not_myself
def envoi_mail(room,event): # envoi des messages aux abonnés par mail
@ -1858,12 +1863,15 @@ def envoi_mail(room,event): # envoi des messages aux abonnés par mail
except:
lmails = []
for mail in lmails:
serveur = smtplib.SMTP(msmtp, mport)
serveur.starttls()
serveur.login(msender, mpass)
message = event['sender'] + " : " + event['content']['body']
serveur.sendmail(msender, mail, message)
serveur.quit()
if (malt == 1):
os.system('echo "' + event['content']['body'] + '" | mailx -s "' + event['sender'] + '" -r ' + msender + ' ' + mail)
else:
serveur = smtplib.SMTP(msmtp, mport)
serveur.starttls()
serveur.login(msender, mpass)
message = event['sender'] + " : " + event['content']['body']
serveur.sendmail(msender, mail, message)
serveur.quit()
@not_myself
def modo(room,event): # Definition d'un moderateur
@ -1882,9 +1890,9 @@ def modo(room,event): # Definition d'un moderateur
if (not candidat in lmod):
lmod.append(candidat)
modos[room.room_id] = lmod
msg(room,candidat + " devient moderateur.")
msg(room,candidat + " devient moderateur.",event['sender'])
else:
msg(room,candidat + " est déjà moderateur.")
msg(room,candidat + " est déjà moderateur.",event['sender'])
elif (len(args) > 1 and args[0] == "del"):
args.pop(0)
candidat = " ".join(args)
@ -1892,13 +1900,13 @@ def modo(room,event): # Definition d'un moderateur
place = lmod.index(candidat)
del lmod[place]
modos[room.room_id] = lmod
msg(room,candidat + " n'est plus moderateur.")
msg(room,candidat + " n'est plus moderateur.",event['sender'])
else:
msg(room,candidat + " n'est pas moderateur.")
msg(room,candidat + " n'est pas moderateur.",event['sender'])
else:
msg(room,"\n".join(lmod))
msg(room,"\n".join(lmod),event['sender'])
else:
msg(salon,"Vous n'êtes pas autorisés à définir les modérateurs.")
msg(salon,"Vous n'êtes pas autorisés à définir les modérateurs.",event['sender'])
@not_myself
def module(room,event): # Definition des modules d'un salon
@ -1916,18 +1924,18 @@ def module(room,event): # Definition des modules d'un salon
rmod = args[0]
if (rmod in liste_mod):
modules[room.room_id, rmod] = True
msg(room,"Module : " + rmod + " activé.")
msg(room,"Module : " + rmod + " activé.",event['sender'])
else:
msg(room,"Module : " + rmod + " inconnu.")
msg(room,"Module : " + rmod + " inconnu.",event['sender'])
#print(liste_mod)
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
msg(room,"Module : " + rmod + " désactivé.")
msg(room,"Module : " + rmod + " désactivé.",event['sender'])
else:
msg(room,"Module : " + rmod + " inconnu.")
msg(room,"Module : " + rmod + " inconnu.",event['sender'])
else:
# Lister les modules actifs du salon
rmod = ""
@ -1936,16 +1944,16 @@ def module(room,event): # Definition des modules d'un salon
rmod = rmod + cle[1] + ", "
if (len(rmod) > 1):
rmod = rmod[:-2]
msg(room,"Modules actuels : " + rmod)
msg(room,"Modules actuels : " + rmod,event['sender'])
# Lister les modules disponibles
dmod = ""
for val in liste_mod:
dmod = dmod + val + ", "
if (len(dmod) > 1):
dmod = dmod[:-2]
msg(room,"Modules disponibles : " + dmod)
msg(room,"Modules disponibles : " + dmod,event['sender'])
else:
msg(room,"Vous n'êtes pas autorisés à définir les modules du salon.")
msg(room,"Vous n'êtes pas autorisés à définir les modules du salon.",event['sender'])
def invitations(room_id, state): # Reponse aux invitations
@ -1991,10 +1999,10 @@ def kick(room, event): # kick une liste de membres
try:
bot.client.api.kick_user(room.room_id, args[0], reason="")
except:
msg(room, "Vous ne pouvez pas expulser args[0]")
msg(room, "Vous ne pouvez pas expulser args[0]",event['sender'])
args.pop(0)
else:
msg(room,"Vous n'êtes pas autorisés à kicker des membres de ce salon.")
msg(room,"Vous n'êtes pas autorisés à kicker des membres de ce salon.",event['sender'])
def main():
@ -2025,11 +2033,13 @@ def main():
if ('MAIL' in config):
try:
malt = config['MAIL']['malt']
msender = config['MAIL']['msender']
mpass = config['MAIL']['mpass']
msmtp = config['MAIL']['msmtp']
mport = config['MAIL']['mport']
except:
malt = 0
msender = ""
mpass = ""
msmtp = ""

Loading…
Cancel
Save