|
|
@ -14,6 +14,9 @@ import asyncio |
|
|
|
import nio |
|
|
|
|
|
|
|
from datetime import datetime,timedelta |
|
|
|
import requests |
|
|
|
import html2text |
|
|
|
import json |
|
|
|
|
|
|
|
# Var |
|
|
|
bot = None |
|
|
@ -652,7 +655,10 @@ async def msg(room,mess,sender,content=False): |
|
|
|
except: |
|
|
|
print(mess) |
|
|
|
print("id : " + str(room.room_id) + " message : " + str(mess)) |
|
|
|
await bot.api.send_text_message(room.room_id, mess) |
|
|
|
if (content): |
|
|
|
await bot.api.send_markdown_message(room.room_id, mess) |
|
|
|
else: |
|
|
|
await bot.api.send_text_message(room.room_id, mess) |
|
|
|
except: |
|
|
|
print("Impossible d'envoyer le message") |
|
|
|
|
|
|
@ -861,6 +867,7 @@ async def verifPMRoom(room, message): # Pour obtenir ou créer un salon pour les |
|
|
|
else: |
|
|
|
prive[sender]=salon.room_id |
|
|
|
return(salon) |
|
|
|
#TODO : room_delete_alias(access_token, room_alias) |
|
|
|
|
|
|
|
async def biere(room,message): # Gestion des boissons |
|
|
|
global modules |
|
|
@ -1188,6 +1195,136 @@ async def bienvenue(room,message): # Affichage d'un message d'accueil aux nouvea |
|
|
|
else: |
|
|
|
print("current: " + membership + " prev: " + prev_member) |
|
|
|
|
|
|
|
async def titre(room, message): # cherche le titre d'une page |
|
|
|
global modules |
|
|
|
try: |
|
|
|
rmod = modules[room.room_id, 'titre'] |
|
|
|
except: |
|
|
|
modules[room.room_id, 'titre'] = False |
|
|
|
if (modules[room.room_id, 'titre']): |
|
|
|
args = getMessage(message).split() |
|
|
|
sender = getUser(message) |
|
|
|
args.pop(0) |
|
|
|
try: |
|
|
|
invidious = modules[room.room_id, 'invidious'] |
|
|
|
except: |
|
|
|
invidious = False |
|
|
|
try: |
|
|
|
url=args[0] |
|
|
|
print(url) |
|
|
|
if (re.search(r"^.*://",url) is None): |
|
|
|
url = "http://" + url |
|
|
|
r = requests.get(url) |
|
|
|
res = re.search(r"<title>(.*)</title>",r.text) |
|
|
|
if (res is not None): |
|
|
|
await msg(room,html2text.html2text(str(re.sub("</?title>", "", res.group()))),sender) |
|
|
|
else: |
|
|
|
await msg(room,"Titre non trouvé",sender) |
|
|
|
if (re.search(r"http[s]?://(www\.)?youtube\.",url) is not None and invidious is False): |
|
|
|
res = re.sub(r"^.*\?v=(\w+).*$", r"\1", url, 0, re.MULTILINE) |
|
|
|
await msg(room,str("https://invidious.fdn.fr/watch?v=" + res),sender) |
|
|
|
except: |
|
|
|
await msg(room,"URL invalide",sender) |
|
|
|
|
|
|
|
async def addquote(room,message): # enregistrer les citations mode reponses matrix |
|
|
|
global modules |
|
|
|
try: |
|
|
|
rmod = modules[room.room_id, 'quote'] |
|
|
|
except: |
|
|
|
modules[room.room_id, 'quote'] = False |
|
|
|
if (modules[room.room_id, 'quote']): |
|
|
|
global citations |
|
|
|
|
|
|
|
content = getMessage(message) |
|
|
|
sender = getUser(message) |
|
|
|
if len(content) > 42: |
|
|
|
# Récupération de l'auteur |
|
|
|
auteur = "Un nain connu" |
|
|
|
match = re.search(r"<(@\w+:\w+.\w+)>", content) |
|
|
|
if match: |
|
|
|
auteur = match.group(1) |
|
|
|
nick = room.user_name(auteur) |
|
|
|
|
|
|
|
# Enlève la commande de la citation |
|
|
|
try: |
|
|
|
content = content.replace("\n!addquote", " ") |
|
|
|
content = content.replace("\n!", "\n") |
|
|
|
content = content.replace("<p>!addquote</p>\n", "") |
|
|
|
content = content.replace("<p>!", "<p>") |
|
|
|
content = content.replace("<"+auteur+">",nick+" <"+auteur+">") |
|
|
|
except: |
|
|
|
print("erreur content " + content) |
|
|
|
|
|
|
|
# Id |
|
|
|
tps = datetime.now().microsecond |
|
|
|
|
|
|
|
# récupérations des citations du salon |
|
|
|
famous = {} |
|
|
|
try: |
|
|
|
famous = citations[room.room_id] |
|
|
|
except: |
|
|
|
famous = {} |
|
|
|
|
|
|
|
# enregistrement de la citation |
|
|
|
famous[auteur,tps] = content |
|
|
|
citations[room.room_id] = famous |
|
|
|
await bot.api.send_markdown_message(room_id=room.room_id,message="Ajout de la citation de " + nick + ":\n" + content) |
|
|
|
|
|
|
|
async def showquote(room, message): # afficher les citations mode reponse matrix |
|
|
|
global modules |
|
|
|
try: |
|
|
|
rmod = modules[room.room_id, 'quote'] |
|
|
|
except: |
|
|
|
modules[room.room_id, 'quote'] = False |
|
|
|
if (modules[room.room_id, 'quote']): |
|
|
|
args = getMessage(message).split() |
|
|
|
sender = getUser(message) |
|
|
|
args.pop(0) |
|
|
|
famous = {} |
|
|
|
try: |
|
|
|
famous = citations[room.room_id] |
|
|
|
except: |
|
|
|
famous = {} |
|
|
|
|
|
|
|
if (len(args) == 1): |
|
|
|
# cite une quote d'une personne precise |
|
|
|
nick = args[0] |
|
|
|
phrases = [] |
|
|
|
for cle,valeur in famous.items(): |
|
|
|
if (cle[0] == nick): |
|
|
|
phrases.append(valeur) |
|
|
|
if (len(phrases) > 0 ): |
|
|
|
await reponses(room,phrases,True) |
|
|
|
else: |
|
|
|
await msg(room,"Je n'ai pas de citations pour " + nick,sender) |
|
|
|
else: |
|
|
|
# cite une quote aleatoire |
|
|
|
phrases = [] |
|
|
|
for cle,valeur in famous.items(): |
|
|
|
phrases.append(valeur) |
|
|
|
if (len(phrases) > 0 ): |
|
|
|
await reponses(room,phrases,True) |
|
|
|
else: |
|
|
|
await msg(room,"Je n'ai pas de citations pour ce salon",sender) |
|
|
|
|
|
|
|
@bot.listener.on_message_event |
|
|
|
async def callShowquote(room, message): |
|
|
|
match = botlib.MessageMatch(room, message, bot, PREFIX) |
|
|
|
if match.is_not_from_this_bot() and match.prefix() and match.command("quote"): |
|
|
|
await showquote(room, message) |
|
|
|
|
|
|
|
@bot.listener.on_message_event |
|
|
|
async def callAddquote(room, message): |
|
|
|
match = botlib.MessageMatch(room, message, bot) |
|
|
|
if match.is_not_from_this_bot() and match.contains("!addquote"): |
|
|
|
await addquote(room, message) |
|
|
|
|
|
|
|
@bot.listener.on_message_event |
|
|
|
async def callTitre(room, message): |
|
|
|
match = botlib.MessageMatch(room, message, bot, PREFIX) |
|
|
|
if match.is_not_from_this_bot() and match.prefix() and match.command("titre"): |
|
|
|
await titre(room, message) |
|
|
|
|
|
|
|
@bot.listener.on_custom_event(nio.RoomMemberEvent) |
|
|
|
async def callBienvenue(room, message): |
|
|
|
match = botlib.MessageMatch(room, message, bot) |
|
|
|