|
|
@ -13,6 +13,8 @@ import threading |
|
|
|
import asyncio |
|
|
|
import nio |
|
|
|
|
|
|
|
from datetime import datetime,timedelta |
|
|
|
|
|
|
|
# Var |
|
|
|
bot = None |
|
|
|
PREFIX = '!' |
|
|
@ -22,6 +24,7 @@ USERNAME = "" |
|
|
|
admins = [] # Admins du bot |
|
|
|
modos = {} # Moderateurs des salons |
|
|
|
modules = {} # Modules activés par salon |
|
|
|
prive = {} # Les espaces de message privés du bot avec les utilisateurs |
|
|
|
liste_mod = [] # Modules disponibles |
|
|
|
citations = {} #addquote |
|
|
|
bieres = {} # Boissons a offrir |
|
|
@ -114,6 +117,15 @@ def modules_read(): |
|
|
|
except: |
|
|
|
modules = {} |
|
|
|
|
|
|
|
def prive_read(): |
|
|
|
global prive |
|
|
|
try: |
|
|
|
with open("prive", "rb") as fichier: |
|
|
|
loader = pickle.Unpickler(fichier) |
|
|
|
prive = loader.load() |
|
|
|
except: |
|
|
|
prive = {} |
|
|
|
|
|
|
|
def save_obj(room=None, event=None): |
|
|
|
with open("moderateurs", "wb") as fichier: |
|
|
|
saver = pickle.Pickler(fichier) |
|
|
@ -121,6 +133,9 @@ def save_obj(room=None, event=None): |
|
|
|
with open("modules", "wb") as fichier: |
|
|
|
saver = pickle.Pickler(fichier) |
|
|
|
saver.dump(modules) |
|
|
|
with open("prive", "wb") as fichier: |
|
|
|
saver = pickle.Pickler(fichier) |
|
|
|
saver.dump(prive) |
|
|
|
if ('horloge' in liste_mod): |
|
|
|
with open("horloge", "wb") as fichier: |
|
|
|
saver = pickle.Pickler(fichier) |
|
|
@ -618,13 +633,18 @@ def getUser(message): |
|
|
|
|
|
|
|
def getNick(room, message): # Obtenir le DisplayName à partir du mxid. |
|
|
|
sender = getUser(message) |
|
|
|
return(room.user_name(sender)) |
|
|
|
nick = None |
|
|
|
try: |
|
|
|
nick = room.user_name(sender).split(' ')[0] |
|
|
|
except: |
|
|
|
nick = room.user_name(sender) |
|
|
|
return(nick) |
|
|
|
|
|
|
|
async def msg(room,mess,sender,content=False): |
|
|
|
try: |
|
|
|
try: |
|
|
|
lmod = modos[room.room_id] |
|
|
|
if (sender not in admins and sender not in lmod): |
|
|
|
lmod = modos.get(room.room_id) |
|
|
|
if (sender not in admins and lmod != None and sender not in lmod): |
|
|
|
mess = mess.replace('@room', 'tout le monde') |
|
|
|
except: |
|
|
|
try: |
|
|
@ -671,7 +691,7 @@ async def modo(room,message): # Definition d'un moderateur |
|
|
|
else: |
|
|
|
await msg(room,"\n".join(lmod),sender) |
|
|
|
else: |
|
|
|
await msg(salon,"Vous n'êtes pas autorisés à définir les modérateurs.",sender) |
|
|
|
await msg(room,"Vous n'êtes pas autorisés à définir les modérateurs.",sender) |
|
|
|
|
|
|
|
async def module(room,message): # Definition des modules d'un salon |
|
|
|
lmod = [] |
|
|
@ -815,6 +835,33 @@ async def reponses(room, phrases, content=False): # Afficher une réponse aléat |
|
|
|
i = random.randrange(0,len(phrases)) |
|
|
|
await msg(room,phrases[i],"reponses",content) |
|
|
|
|
|
|
|
async def verifPMRoom(room, message): # Pour obtenir ou créer un salon pour les messages privés avec l'utilisateur |
|
|
|
global prive |
|
|
|
nick = "" |
|
|
|
sender = "" |
|
|
|
sender = getUser(message) |
|
|
|
nick = getNick(room, message) |
|
|
|
client_id = bot.creds.username.split(':')[0].split('@')[1] |
|
|
|
client_host = bot.creds.username.split(':')[1] |
|
|
|
room_nick = client_id + "_" + nick + "_b" |
|
|
|
salon = None |
|
|
|
room_id = prive.get(sender) |
|
|
|
if (room_id): |
|
|
|
await bot.async_client.room_invite(room_id=room_id, user_id=sender) |
|
|
|
new_salon = nio.rooms.MatrixRoom(room_id, client_id) |
|
|
|
new_salon.name="Asmodee" |
|
|
|
new_salon.topic="Informations d'Asmodee" |
|
|
|
new_salon.is_direct=True |
|
|
|
return(new_salon) |
|
|
|
else: |
|
|
|
salon = await bot.async_client.room_create(alias=room_nick, name="Asmodee", topic="Informations d'Asmodee",is_direct=True,invite=[sender]) |
|
|
|
if isinstance(salon, nio.responses.RoomCreateError): |
|
|
|
print("Impossible de creer : " + room_nick + " pour " + sender) |
|
|
|
return(room) |
|
|
|
else: |
|
|
|
prive[sender]=salon.room_id |
|
|
|
return(salon) |
|
|
|
|
|
|
|
async def biere(room,message): # Gestion des boissons |
|
|
|
global modules |
|
|
|
try: |
|
|
@ -825,7 +872,7 @@ async def biere(room,message): # Gestion des boissons |
|
|
|
if (modules[room.room_id, 'biere']): |
|
|
|
sender = getUser(message) |
|
|
|
mess = getMessage(message) |
|
|
|
lmod = modos[room.room_id] |
|
|
|
lmod = modos.get(room.room_id) |
|
|
|
if (sender in admins or sender in lmod): |
|
|
|
power = 1 |
|
|
|
global bieres |
|
|
@ -834,7 +881,7 @@ async def biere(room,message): # Gestion des boissons |
|
|
|
breuvages = {} |
|
|
|
give = False |
|
|
|
elu = "" |
|
|
|
envoyeur = getNick(message) |
|
|
|
envoyeur = getNick(room, message) |
|
|
|
|
|
|
|
try: |
|
|
|
breuvages = bieres[room.room_id] |
|
|
@ -866,48 +913,56 @@ async def biere(room,message): # Gestion des boissons |
|
|
|
tps = datetime.now().microsecond |
|
|
|
breuvages[nick,tps] = citation |
|
|
|
bieres[room.room_id] = breuvages |
|
|
|
await msg(room,"Ajout du breuvage " + nick + ":" + citation,event['sender']) |
|
|
|
await msg(room,"Ajout du breuvage " + nick + ":" + citation,sender) |
|
|
|
else: |
|
|
|
# message d'aide |
|
|
|
await msg(room,"!biere add <nick>:<citation>",sender) |
|
|
|
#elif (len(args) > 0 and args[0] == "list"): |
|
|
|
elif (len(args) > 0 and args[0] == "list"): |
|
|
|
# liste les quotes |
|
|
|
# args.pop(0) |
|
|
|
# salon = verifPMRoom(room,event) |
|
|
|
# if (len(args) == 0): |
|
|
|
args.pop(0) |
|
|
|
salon = await verifPMRoom(room,message) |
|
|
|
print(salon) |
|
|
|
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): |
|
|
|
# msg(salon,reponse,event['sender']) |
|
|
|
# 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,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,event['sender']) |
|
|
|
# reponse = "" |
|
|
|
# msg(salon,reponse,event['sender']) |
|
|
|
# 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" |
|
|
|
# msg(salon,reponse,event['sender']) |
|
|
|
reponse = "Voici les reponses du salon " + room.room_id + "\n" |
|
|
|
alias = None |
|
|
|
if room.name: |
|
|
|
alias = room.name |
|
|
|
elif room.canonical_alias: |
|
|
|
alias = room.canonical_alias |
|
|
|
elif room.names: |
|
|
|
alias = room.names[0] |
|
|
|
else: |
|
|
|
alias = "" |
|
|
|
reponse = reponse + "(alias : " + alias + ")\n" |
|
|
|
for cle,valeur in breuvages.items(): |
|
|
|
reponse = reponse + cle[0] + " / " + str(cle[1]) + " : " + valeur + "\n" |
|
|
|
if (len(reponse) > 500): |
|
|
|
await msg(salon,reponse,sender) |
|
|
|
reponse = "" |
|
|
|
await msg(salon,reponse,sender) |
|
|
|
elif (args[0] == "all"): |
|
|
|
# tous les breuvages de tous les salons |
|
|
|
reponse = "Les breuvages de tous les salons : " + "\n" |
|
|
|
await msg(salon,reponse,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): |
|
|
|
await msg(salon,reponse,sender) |
|
|
|
reponse = "" |
|
|
|
await msg(salon,reponse,sender) |
|
|
|
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" |
|
|
|
await msg(salon,reponse,sender) |
|
|
|
elif (len(args) > 1 and args[0] == "del"): |
|
|
|
# salon = verifPMRoom(room,event) |
|
|
|
salon = room.room_id |
|
|
|
salon = await verifPMRoom(room,message) |
|
|
|
lmod = modos[room.room_id] |
|
|
|
if (sender in admins): |
|
|
|
id = args[1] |
|
|
@ -957,7 +1012,7 @@ async def biere(room,message): # Gestion des boissons |
|
|
|
if (len(phrases) > 0 ): |
|
|
|
await reponses(room,phrases) |
|
|
|
else: |
|
|
|
await msg(room,"Je n'ai pas de breuvages pour ce salon",event['sender']) |
|
|
|
await msg(room,"Je n'ai pas de breuvages pour ce salon",sender) |
|
|
|
|
|
|
|
async def boissons(room,message): # Gestion des alias de boissons |
|
|
|
global modules |
|
|
@ -1027,8 +1082,7 @@ async def salon(room,message): # Gestion des listes de salons recommandes |
|
|
|
salons[room.room_id] = famous |
|
|
|
await msg(room,"Ajout du salon " + ref + " : " + desc,sender) |
|
|
|
elif (len(args) > 1 and args[0] == "del"): |
|
|
|
#salon = verifPMRoom(room,event) |
|
|
|
salon = room.room_id |
|
|
|
salon = await verifPMRoom(room,message) |
|
|
|
lmod = modos[room.room_id] |
|
|
|
if (sender in admins): |
|
|
|
id = args[1] |
|
|
@ -1233,6 +1287,7 @@ def main(): |
|
|
|
|
|
|
|
modules_read() |
|
|
|
modos_read() |
|
|
|
prive_read() |
|
|
|
if ('horloge' in liste_mod): |
|
|
|
horloge_read() |
|
|
|
if ('quote' in liste_mod): |
|
|
|