diff --git a/asmodee.py b/asmodee.py index 1acff1f..0e520cf 100755 --- a/asmodee.py +++ b/asmodee.py @@ -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"(.*)",r.text) + if (res is not None): + await msg(room,html2text.html2text(str(re.sub("", "", 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("

!addquote

\n", "") + content = content.replace("

!", "

") + 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)