Browse Source

mails

master
nemesis 4 years ago
parent
commit
fce865ee3d
  1. 6
      asmodee.ini
  2. 112
      asmodee.py

6
asmodee.ini

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

112
asmodee.py

@ -11,6 +11,7 @@ import time
import threading
import json
from datetime import datetime,timedelta
import smtplib
from matrix_bot_api.matrix_bot_api import MatrixBotAPI
from matrix_bot_api.mregex_handler import MRegexHandler
@ -42,9 +43,15 @@ welcome = {} # Messages d'accueil des salons
admins = [] # Admins du bot
modos = {} # Moderateurs des salons
modules = {} # Modules activés par salon
mails = {} # Liste de gens abonnés par mail au salon
liste_mod = [] # Modules disponibles
USERNAME = ""
msender = ""
mpass = ""
msmtp = ""
mport = ""
# Chargement des données persistantes
def horloge_read():
global clock
@ -128,6 +135,16 @@ def modules_read():
except:
modules = {}
def mails_read():
global mails
try:
with open("mails", "rb") as fichier:
loader = pickle.Unpickler(fichier)
mails = loader.load()
except:
mails = {}
def save_obj():
if ('horloge' in liste_mod):
with open("horloge", "wb") as fichier:
@ -156,6 +173,10 @@ def save_obj():
with open("welcome", "wb") as fichier:
saver = pickle.Pickler(fichier)
saver.dump(welcome)
if ('mails' in liste_mod):
with open("mails", "wb") as fichier:
saver = pickle.Pickler(fichier)
saver.dump(mails)
with open("moderateurs", "wb") as fichier:
saver = pickle.Pickler(fichier)
saver.dump(modos)
@ -169,10 +190,10 @@ def signal_handler(signal, frame): # Sauvegarder les données persistantes avant
def not_myself(f):
def handler(room, event):
if event['sender'] == USERNAME:
return
if event['sender'] == USERNAME:
return
f(room, event)
f(room, event)
return handler
@ -435,6 +456,8 @@ def help_center(room,event,name,private): # Aide sur les commandes disponibles
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.'")
elif (re.search("kick", args[0])):
msg(salon,"- !kick <@mxid> [@mxid] ... : kick les users listés")
elif (re.search("mails", 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.")
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.")
elif (re.search("module", args[0])):
@ -467,6 +490,8 @@ def help_center(room,event,name,private): # Aide sur les commandes disponibles
message += "\n- !accueil <message> : Modifie le message d'accueil"
if (cle[0] == rid and cle[1] == "kick" and valeur):
message += "\n- !kick <@mxid> [@mxid] ... : kick les users listés"
if (cle[0] == rid and cle[1] == "mails" and valeur):
message += "\n- !mail add <email> : s'abonner aux messages du salon par mail.\n -!mail del <email> : se désabonner aux messages du salon par mail."
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"
@ -1770,6 +1795,68 @@ 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 mails(room,event): # Abonnements mail aux messages
global modules
global modos
try:
rmod = modules[room.room_id, 'mails']
except:
modules[room.room_id, 'mails'] = False
if (modules[room.room_id, 'mails']):
lmails = []
try:
lmails = mails[room.room_id]
except:
lmails = []
if (event['sender'] in admins or event['sender'] in lmod or event['sender'] == bot.client.user_id):
args = event['content']['body'].split()
args.pop(0)
if (len(args) > 1 and args[0] == "add"):
args.pop(0)
mail = args[0]
if (not mail in lmails):
lmails.append(mail)
mails[room.room_id] = lmails
msg(room,mail + " recevra des mails.")
else:
msg(room,mail + " reçoit déjà des mails.")
elif (len(args) > 1 and args[0] == "del"):
args.pop(0)
mail = args[0]
if (mail in lmails):
place = lmails.index(mail)
del lmails[place]
mails[room.room_id] = lmails
msg(room,mail + " ne recevra plus de mails.")
else:
msg(room,mail + " ne reçoit pas de mails.")
else:
msg(room,"\n".join(lmails))
else:
msg(salon,"Vous n'êtes pas autorisés à définir les réceptions de mails pour ce salon.")
@not_myself
def envoi_mail(room,event): # envoi des messages aux abonnés par mail
global modules
try:
rmod = modules[room.room_id, 'mails']
except:
modules[room.room_id, 'mails'] = False
if (modules[room.room_id, 'mails']):
lmails = []
try:
lmails = mails[room.room_id]
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()
@not_myself
def modo(room,event): # Definition d'un moderateur
global modos
@ -1909,7 +1996,7 @@ 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", "salon", "kick"]
mods = ["roll", "quote", "biere", "stats", "liste", "horloge", "carte", "card", "cristal", "welcome", "salut", "jdr", "gens", "va", "salon", "kick", "mails"]
global admins
if ('AUTH' in config):
USERNAME = config['AUTH']['username'] # Bot's username
@ -1927,6 +2014,18 @@ def main():
liste_mod = mods
else:
liste_mod = mods
if ('MAIL' in config):
try:
msender = config['MAIL']['msender']
mpass = config['MAIL']['mpass']
msmtp = config['MAIL']['msmtp']
mport = config['MAIL']['mport']
except:
msender = ""
mpass = ""
msmtp = ""
mport = ""
# Create an instance of the MatrixBotAPI
global bot
@ -2034,6 +2133,11 @@ def main():
kick_handler = MCommandHandler("kick", kick)
bot.add_handler(kick_handler)
# Mails
if ('mails' in liste_mod):
mails_handler = MCommandHandler("mails", mails)
bot.add_handler(mails_handler)
# Definition des moderateurs
modos_read()
modos_handler = MCommandHandler("modo", modo)

Loading…
Cancel
Save