From 75183e4f5fcc4d2803963b8dc814695dd82c4e01 Mon Sep 17 00:00:00 2001 From: "Antonio J. Delgado" Date: Tue, 25 Apr 2023 16:14:44 +0300 Subject: [PATCH] fixes to appreciabot --- apreciabot.py | 107 ++++++++++++++++++++++++------------------- bienvenibot.py | 0 citabot.py | 0 common.py | 0 custom_messages.json | 11 +++-- describot.py | 11 +++-- federabot.py | 0 mastodon-lol.py | 0 moderabot.py | 0 siguebot.py | 0 10 files changed, 72 insertions(+), 57 deletions(-) mode change 100644 => 100755 apreciabot.py mode change 100644 => 100755 bienvenibot.py mode change 100644 => 100755 citabot.py mode change 100644 => 100755 common.py mode change 100644 => 100755 describot.py mode change 100644 => 100755 federabot.py mode change 100644 => 100755 mastodon-lol.py mode change 100644 => 100755 moderabot.py mode change 100644 => 100755 siguebot.py diff --git a/apreciabot.py b/apreciabot.py old mode 100644 new mode 100755 index 06526dc..96f592d --- a/apreciabot.py +++ b/apreciabot.py @@ -5,31 +5,33 @@ from common import list_read from common import list_write import json import os +import click +import click_config_file + class load_custom_messages(): def __init__(self, custom_message_file): if os.path.exists(custom_message_file): with open(custom_message_file, 'r') as messages_pointer: custom_messages = json.load(messages_pointer) - return custom_messages + self.custom_messages = custom_messages class apreciabot(): def __init__(self, **kwargs): # Initialization self.kwargs = kwargs - self.custom_messages = load_custom_messages(self.kwargs['custom_message_file']) - bot_name = self.custom_messages['apreciabot']['bot_name'] + self.custom_messages = load_custom_messages(self.kwargs['custom_message_file']).custom_messages + bot_name = self.custom_messages[self.kwargs['language']]['apreciabot']['bot_name'] # Messages - messages = self.custom_messages[self.kwargs['language']] - mensaje = self.custom_messages[bot_name]['mensaje'] - mensaje_croqueta = self.custom_messages[bot_name]['mensaje_croqueta'] - mensaje_mismo = self.custom_messages[bot_name]['mensaje_mismo'] - mensaje_nobot = self.custom_messages[bot_name]['mensaje_nobot'] - mensaje_aviso = self.custom_messages[bot_name]['mensaje_aviso'] - mensaje_error = self.custom_messages[bot_name]['mensaje_error'] - mensaje_no_encontrado = self.custom_messages[bot_name]['mensaje_no_encontrado'] - mensaje_muestra_aprecio_enviada = self.custom_messages[bot_name]['mensaje_muestra_aprecio_enviada'] + mensaje = self.custom_messages[self.kwargs['language']]['apreciabot']['mensaje'] + mensaje_croqueta = self.custom_messages[self.kwargs['language']]['apreciabot']['mensaje_croqueta'] + mensaje_mismo = self.custom_messages[self.kwargs['language']]['apreciabot']['mensaje_mismo'] + mensaje_nobot = self.custom_messages[self.kwargs['language']]['apreciabot']['mensaje_nobot'] + mensaje_aviso = self.custom_messages[self.kwargs['language']]['apreciabot']['mensaje_aviso'] + mensaje_error = self.custom_messages[self.kwargs['language']]['apreciabot']['mensaje_error'] + mensaje_no_encontrado = self.custom_messages[self.kwargs['language']]['apreciabot']['mensaje_no_encontrado'] + mensaje_muestra_aprecio_enviada = self.custom_messages[self.kwargs['language']]['apreciabot']['mensaje_muestra_aprecio_enviada'] api = get_api(self.kwargs['instance_name'], bot_name) last_ids = list_read(bot_name) @@ -41,45 +43,54 @@ class apreciabot(): # Some notifications may have been deleted since last fetch # Therefore, it is better to check less than the maximum number of notifications - for i in range(0, max_notifications - 5): - n = notifications[i] - if str(n['id']) not in last_ids: - # Mentions data are HTML paragraphs so we delete everything between <> to clean it up - content = BeautifulSoup(n['status']['content'], "html.parser").get_text().split(" ") - try: - first_mention = content[0] - target = "@" + content[1] - user = "@" + n['account']['acct'] - except: - api.status_reply(n['status'], mensaje_error) - continue - # The bot is meant to be anonymous so only allow directs - if n['status']['visibility'] == "direct": - if user == target: - api.status_reply(n['status'], mensaje_mismo, visibility="unlisted") - else: - # Find account if it is not known by the server - api.search(target, result_type="accounts") + if len(notifications) < 1: + print(self.custom_messages[self.kwargs['language']]['apreciabot']['no_notifications']) + else: +# for i in range(0, max_notifications - 5): +# # (adelgado) I'm not sure why this previous loop, but if there are less than 5 notifications, +# there is an exception since there are not enought items in the list to fetch one. So I changed +# it to go throw all notifications and do only those before the last 5. + i = 0 + for n in notifications: + i += 1 + if i < max_notifications - 5: + if str(n['id']) not in last_ids: + # Mentions data are HTML paragraphs so we delete everything between <> to clean it up + content = BeautifulSoup(n['status']['content'], "html.parser").get_text().split(" ") try: - bio = api.account_lookup(target) + first_mention = content[0] + target = "@" + content[1] + user = "@" + n['account']['acct'] except: - api.status_post(user + mensaje_no_encontrado, in_reply_to_id=n['status']['id'], visibility="direct" ) - else: - if "nobot" in bio['note']: - api.status_reply(n['status'], mensaje_nobot) + api.status_reply(n['status'], mensaje_error) + continue + # The bot is meant to be anonymous so only allow directs + if n['status']['visibility'] == "direct": + if user == target: + api.status_reply(n['status'], mensaje_mismo, visibility="unlisted") else: - #api.status_post(mensaje + target + "!", in_reply_to_id=n['status']['id'], visibility="unlisted") - if ("croqueta" in content - or "croquetas" in content - or '"croqueta"' in content - or '"croquetas"' in content - ): - new_status = api.status_post(target + " " + mensaje_croqueta, visibility="unlisted") - else: - new_status = api.status_post(mensaje + target + "!", visibility="unlisted") - api.status_reply(n['status'], mensaje_muestra_aprecio_enviada + new_status['url'], visibility="direct") - elif first_mention == "@" + bot_name and n['status']['in_reply_to_id'] == None: - api.status_reply(n['status'], mensaje_aviso, visibility='direct') + # Find account if it is not known by the server + api.search(target, result_type="accounts") + try: + bio = api.account_lookup(target) + except: + api.status_post(user + mensaje_no_encontrado, in_reply_to_id=n['status']['id'], visibility="direct" ) + else: + if "nobot" in bio['note']: + api.status_reply(n['status'], mensaje_nobot) + else: + #api.status_post(mensaje + target + "!", in_reply_to_id=n['status']['id'], visibility="unlisted") + if ("croqueta" in content + or "croquetas" in content + or '"croqueta"' in content + or '"croquetas"' in content + ): + new_status = api.status_post(target + " " + mensaje_croqueta, visibility="unlisted") + else: + new_status = api.status_post(mensaje + target + "!", visibility="unlisted") + api.status_reply(n['status'], mensaje_muestra_aprecio_enviada + new_status['url'], visibility="direct") + elif first_mention == "@" + bot_name and n['status']['in_reply_to_id'] == None: + api.status_reply(n['status'], mensaje_aviso, visibility='direct') list_write(bot_name, new_last_ids) diff --git a/bienvenibot.py b/bienvenibot.py old mode 100644 new mode 100755 diff --git a/citabot.py b/citabot.py old mode 100644 new mode 100755 diff --git a/common.py b/common.py old mode 100644 new mode 100755 diff --git a/custom_messages.json b/custom_messages.json index 1523347..fb76b39 100644 --- a/custom_messages.json +++ b/custom_messages.json @@ -1,22 +1,23 @@ { "es": { "apreciabot": { - "message": "Alguien que te aprecia mucho quiere recordarte que eres una persona maravillosa :ablobcatheartsqueeze: ¡Sigue así, ", + "mensaje": "Alguien que te aprecia mucho quiere recordarte que eres una persona maravillosa :ablobcatheartsqueeze: ¡Sigue así, ", "mensaje_croqueta": "Alguien que te aprecia mucho quiere enviarte croquetas :croqueta: :croqueta: :croqueta:", "mensaje_mismo": "La persona más importante que debes apreciar eres tú. ¡Eres increíble! ❤", "mensaje_nobot": "La cuenta objetivo tiene la etiqueta #nobot en su biografía. ¡No tengo poder aquí!", "mensaje_aviso": "Has intentado apreciar a alguien pero no has usado un mensaje directo/privado. ¡Tienes que mencionarme en un mensaje directo/privado para que funcione!", "mensaje_error": "No pude procesar tu apreciación. ¡Asegúrate de no incluir saltos de línea ni otros caracteres extraños! El mensaje debería ser tal que así: \"@apreciabot@masto.es usuario@servidor\n", "mensaje_no_encontrado": " No se pudo encontrar la cuenta del usuario especificado. \n\nRevisa que has escrito bien la cuenta con el formato \"usuario@servidor\" (por ejemplo, rober@masto.es, excluyendo el primer @ para evitar mencionarlo).\n\nSi lo has mencionado por error, ¡borra el mensaje antes de que se de cuenta!", - "bot_name": "apreciabot", - "mensaje_muestra_aprecio_enviada": "Tu muestra de aprecio ha sido enviada ❤️ " + "bot_name": "love", + "mensaje_muestra_aprecio_enviada": "Tu muestra de aprecio ha sido enviada ❤️ ", + "no_notifications": "No hay notificationes" }, "describot": { - "message": "¡Hola! He detectado que has publicado imágenes o vídeo sin texto alternativo. Añadir una descripción de texto alternativa a tus vídeos e imágenes es esencial para que las personas con alguna discapacidad visual puedan disfrutar de nuestras publicaciones. \n\n Por favor, considera añadir texto alternativo a tus publicaciones la próxima vez (o edita esta publicación para añadírselo). Si necesitas ayuda para saber cómo hacerlo, consulta la publicación fijada en mi perfil: https://masto.es/@TeLoDescribot/110249937862873987 \n\n ¡Gracias por hacer de este espacio un lugar más accesible para todos! \n\n Bip bop. Esta es una cuenta automatizada, si no quieres que te mencione más, eres libre de bloquearme.", + "mensaje": "¡Hola! He detectado que has publicado imágenes o vídeo sin texto alternativo. Añadir una descripción de texto alternativa a tus vídeos e imágenes es esencial para que las personas con alguna discapacidad visual puedan disfrutar de nuestras publicaciones. \n\n Por favor, considera añadir texto alternativo a tus publicaciones la próxima vez (o edita esta publicación para añadírselo). Si necesitas ayuda para saber cómo hacerlo, consulta la publicación fijada en mi perfil: https://masto.es/@TeLoDescribot/110249937862873987 \n\n ¡Gracias por hacer de este espacio un lugar más accesible para todos! \n\n Bip bop. Esta es una cuenta automatizada, si no quieres que te mencione más, eres libre de bloquearme.", "bot_name": "describot" }, "federabot": { - "message": "¡Hola! Veo que es tu primera vez en Mastodon, ¡te doy la bienvenida si así es!\n\nSoy Roberto, el administrador del servidor de Mastodon en español https://masto.es. Ya ves que aunque estemos en servidores diferentes, somos capaces de comunicarnos gracias al modelo federado de Mastodon :mastodance:\n\nAunque yo no sea tu administrador en {{ user_domain }}, si necesitas ayuda para empezar puedes consultar la guía que he preparado para mis usuarios: https://masto.es/@rober/109412552189056438\n\nY si tienes alguna duda más, estaré encantado de ayudarte, solo responde a este mensaje privado 🙂" + "mensaje": "¡Hola! Veo que es tu primera vez en Mastodon, ¡te doy la bienvenida si así es!\n\nSoy Roberto, el administrador del servidor de Mastodon en español https://masto.es. Ya ves que aunque estemos en servidores diferentes, somos capaces de comunicarnos gracias al modelo federado de Mastodon :mastodance:\n\nAunque yo no sea tu administrador en {{ user_domain }}, si necesitas ayuda para empezar puedes consultar la guía que he preparado para mis usuarios: https://masto.es/@rober/109412552189056438\n\nY si tienes alguna duda más, estaré encantado de ayudarte, solo responde a este mensaje privado 🙂" } } } diff --git a/describot.py b/describot.py old mode 100644 new mode 100755 index c5d3444..ee384de --- a/describot.py +++ b/describot.py @@ -5,6 +5,9 @@ from common import list_write from common import get_new_notifications import json import os +import click +import click_config_file + class load_custom_messages(): def __init__(self, custom_message_file): @@ -17,10 +20,10 @@ class describot(): def __init__(self, **kwargs): # Initialization self.kwargs = kwargs - self.custom_messages = load_custom_messages(self.kwargs['custom_message_file']) + self.custom_messages = load_custom_messages(self.kwargs['custom_message_file']).custom_messages + messages = self.custom_messages[self.kwargs['language']]['describot'] bot_name = messages['describot']['bot_name'] - - messages = self.custom_messages[self.kwargs['language']] + api_internal = get_api(self.kwargs['instance_name'], bot_name) max_posts=20 @@ -41,7 +44,7 @@ class describot(): for media in post['media_attachments']: if media['description'] is None: print('Warning ' + post['account']['acct']) - api_internal.status_reply(post, message, visibility="unlisted") + api_internal.status_reply(post, messages['describot']['mensaje'], visibility="unlisted") warned.append(post['account']['acct']) if domain != 'home': list_append(bot_name + "_" + domain, post['account']['acct']) diff --git a/federabot.py b/federabot.py old mode 100644 new mode 100755 diff --git a/mastodon-lol.py b/mastodon-lol.py old mode 100644 new mode 100755 diff --git a/moderabot.py b/moderabot.py old mode 100644 new mode 100755 diff --git a/siguebot.py b/siguebot.py old mode 100644 new mode 100755