fixes to appreciabot

This commit is contained in:
Antonio J. Delgado 2023-04-25 16:14:44 +03:00
parent a5e17d2388
commit 75183e4f5f
10 changed files with 72 additions and 57 deletions

105
apreciabot.py Normal file → Executable file
View File

@ -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")
# 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:
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')
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)

0
bienvenibot.py Normal file → Executable file
View File

0
citabot.py Normal file → Executable file
View File

0
common.py Normal file → Executable file
View File

View File

@ -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 🙂"
}
}
}

9
describot.py Normal file → Executable file
View File

@ -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'])

0
federabot.py Normal file → Executable file
View File

0
mastodon-lol.py Normal file → Executable file
View File

0
moderabot.py Normal file → Executable file
View File

0
siguebot.py Normal file → Executable file
View File