ADD: Insultabot

This commit is contained in:
Roboron3042 2024-12-04 00:33:00 +01:00
parent 190a4e98af
commit cac893784d
4 changed files with 332 additions and 0 deletions

View File

@ -61,3 +61,21 @@ def get_new_notifications(api, bot_name, types=None):
list_write(bot_name + "_last_notifications", new_notifications_ids) list_write(bot_name + "_last_notifications", new_notifications_ids)
return new_notifications return new_notifications
women_pronouns = ["she","her","ella","illa"]
nb_pronouns = ["they","them","elle", "ille"]
def is_gender(pronouns, account):
for pronoun in pronouns:
if(pronoun in account.note):
return True
for value in account.fields:
if(pronoun in value):
return True
return False
def get_gender(account):
if(is_gender(women_pronouns,account)):
return 1
if(is_gender(nb_pronouns, account)):
return 2
return 0

128
insultabot.py Normal file
View File

@ -0,0 +1,128 @@
from common import get_api, get_gender, get_new_notifications, list_read
from random import choice
articulos_indefinidos =["un", "una", "une"]
articulos_definidos = ["el", "la", "le"]
mensaje_seguidores_vacio = "No pude consultar la lista de seguidos de la cuenta mencionada (tal vez está oculta o es demasiado grande). No pude comprobar si es amigo de ARTICULO_INDEFINIDO INSULTO como tú."
mensaje_no_amigo = "La cuenta mencionada no tiene una relación de seguimiento contigo. Es comprensible que no quiera ser amigo de ARTICULO_INDEFINIDO INSULTO como tú."
mensaje_nobot = "La cuenta objetivo tiene la etiqueta #nobot en su biografía. ¡No tengo poder aquí, INSULTO!"
mensaje_mismo = "Hay que ser muy INSULTO para insultarse a uno mismo. Enhorabuena."
mensaje_creador = "¿Cómo te atreves a intentar insultar a mi creador, INSULTO?"
mensaje_insuficientes = "Tú, INSULTO, no has escrito suficientes menciones para insultar a nadie."
mensaje_follow = "Bienvenido al club, INSULTO."
mensajes = [
"Según un prestigioso estudio de la universidad de INSULTADOR, eres ARTICULO_INDEFINIDO INSULTO, INSULTADO.",
"Un comité de expertos liderado por INSULTADOR ha llegado a la conclusión de que INSULTADO es muy INSULTO. Y tienen razón.",
"INSULTADO, eres un poco INSULTO, me he dado cuenta gracias a INSULTADOR. Háztelo mirar, ¿vale?",
"¡INSULTADO, INSULTO! ¿Lo has entendido? Seguramente no, porque aunque INSULTADOR me lo haya dicho, tú eres tan INSULTO que no te das cuenta.",
"INSULTADO que sepas que eres ARTICULO_INDEFINIDO INSULTO, como INSULTADOR ha hecho bien en señalar.",
"INSULTADOR te concede el dudoso honor de ser ARTICULO_DEFINIDO mastodonte más INSULTO de todos, INSULTADO.",
"A INSULTADOR le preocupa lo INSULTO que eres, INSULTADO. Pero no mucho.",
"Todos tus amigos piensan que eres ARTICULO_INDEFINIDO INSULTO, INSULTADO. Bueno, todos todos no, pero INSULTADOR sí.",
"Ya te vale, INSULTADO, podrías ser un poco menos INSULTO, que tienes a INSULTADOR hasta las narices.",
"INSULTADO, si fueses un poco menos INSULTO, INSULTADOR no habría tenido que mandar este mensaje.",
"No sabíamos que INSULTADO era ARTICULO_INDEFINIDO INSULTO, menos mal que INSULTADOR ha avisado.",
"INSULTADO Perdona que te lo diga pero eres un poco INSULTO. INSULTADOR quería decírtelo pero no se atrevía.",
"Después de todo INSULTADOR tenía razón, INSULTADO es ARTICULO_INDEFINIDO INSULTO.",
"Hoy estaba de bajona, pero luego INSULTADOR me recordó lo INSULTO que es INSULTADO y se me pasó.",
"Solo hay dos cosas ciertas en esta vida: que INSULTADO es ARTICULO_INDEFINIDO INSULTO y que esto me lo ha dicho INSULTADOR.",
"¿Se puede ser más INSULTO que INSULTADO? Es una pregunta retórica, solo INSULTADOR conoce la respuesta.",
"Hoy es un día perfecto para recordar a INSULTADO lo INSULTO que es. Bueno, hoy y cualquier día, siempre que esté INSULTADOR para recordármelo.",
"¿Sabes qué hora es, INSULTADOR? ¡La hora de llamar INSULTO a INSULTADO!",
"INSULTADO te digo que eres ARTICULO_INDEFINIDO INSULTO, y me quedo corto. Pero si quieres INSULTADOR te lo expande.",
"INSULTADO me han pedido que te diga que eres ARTICULO_INDEFINIDO INSULTO, que no sé muy bien lo que significa, pero tiene que ser algo malo porque me lo ha dicho INSULTADOR.",
"INSULTADO ¡INSULTO! ¡INSULTO_2! ¡INSULTO_3! ¡INSULTO_4!\n\nUff, qué ganas le tenía a esta cuenta. Gracias por la oportunidad, INSULTADOR"
]
def get_insulto_inclusivo(insulto, gender):
insulto = insulto.split(",")
if(len(insulto) > 1):
insulto_inclusivo = insulto[gender]
else:
insulto_inclusivo = insulto[0]
return insulto_inclusivo
def insultar_insultador(insulto, insultador, status, mensaje):
gender = get_gender(insultador)
insulto = get_insulto_inclusivo(insulto, gender)
mensaje = mensaje.replace("INSULTO", insulto).replace("ARTICULO_INDEFINIDO", articulos_indefinidos[gender])
api.status_post("@" + insultador.acct + " " + mensaje.replace("INSULTO", insulto), in_reply_to_id=status.id, visibility="unlisted" )
def insultar_insultado(insulto, insultador, insultado, insultado_acct):
gender = get_gender(insultado)
insulto = get_insulto_inclusivo(insulto, gender)
mensaje = choice(mensajes)
mensaje = mensaje.replace("INSULTADOR", "@" + insultador.acct)
mensaje = mensaje.replace("INSULTADO", "@" + insultado_acct)
if("INSULTO_2" in mensaje):
mensaje = mensaje.replace("INSULTO_2", get_insulto_inclusivo(choice(insultos), gender).capitalize() )
mensaje = mensaje.replace("INSULTO_3", get_insulto_inclusivo(choice(insultos), gender).capitalize())
mensaje = mensaje.replace("INSULTO_4", get_insulto_inclusivo(choice(insultos), gender).capitalize())
mensaje = mensaje.replace("INSULTO", insulto.capitalize())
mensaje = mensaje.replace("INSULTO", insulto)
mensaje = mensaje.replace("ARTICULO_INDEFINIDO", articulos_indefinidos[gender])
mensaje = mensaje.replace("ARTICULO_DEFINIDO", articulos_definidos[gender])
api.status_post(mensaje, visibility="unlisted" )
bot_name = 'insultabot'
api = get_api('masto.es', bot_name)
insultos = list_read(bot_name + "_insultos")
notifications = get_new_notifications(api, bot_name, "mention,follow")
for n in notifications:
insultador = n.account
if(n.type == "follow"):
choosen_insulto = choice(insultos)
insulto = get_insulto_inclusivo(choosen_insulto, get_gender(insultador))
api.status_post("@" + insultador.acct + " " + mensaje_follow.replace("INSULTO", insulto), visibility="unlisted" )
else:
choosen_insulto = choice(insultos)
menciones = n.status.mentions
insultado_mencion = {}
if(len(menciones) < 2):
insulto = get_insulto_inclusivo(choosen_insulto, get_gender(insultador))
api.status_post("@" + insultador.acct + " " + mensaje_insuficientes.replace("INSULTO", insulto), in_reply_to_id=n.status.id, visibility="unlisted" )
for mencion in menciones:
if(mencion.url == "https://masto.es/@rober"):
insultar_insultador(choosen_insulto, insultador, n.status, mensaje_creador)
break
elif(mencion.acct == insultador.acct):
insultar_insultador(choosen_insulto, insultador, n.status, mensaje_mismo)
break
elif(mencion.url == "https://masto.es/@insultabot"):
continue
else:
insultado_mencion = mencion
break
if(insultado_mencion == {}):
break
insultado_api = {}
if("masto.es" in insultado_mencion.url):
insultado_api = api
else:
domain = insultado_mencion.acct.split("@")[1]
insultado_api = get_api(domain)
insultado = insultado_api.account_lookup(insultado_mencion.acct)
if("nobot" in insultado.note):
insultar_insultador(choosen_insulto, insultador, n.status, mensaje_nobot)
break
# Para evitar rate-limits, descartamos cuentas que sigan demasiada gente
elif(insultado.following_count > 6000 or insultado.following_count == 0):
insultar_insultador(choosen_insulto, insultador, n.status, mensaje_seguidores_vacio)
break
follows = insultado_api.account_following(insultado.id, limit=80)
if(len(follows) == 0):
insultar_insultador(choosen_insulto, insultador, n.status, mensaje_seguidores_vacio)
break
else:
follows = insultado_api.fetch_remaining(follows)
encontrado = False
for follow in follows:
if(insultador.url == follow.url):
encontrado = True
insultar_insultado(choosen_insulto, insultador, insultado, insultado_mencion.acct)
break
if(encontrado == False):
insultar_insultador(choosen_insulto, insultador, n.status, mensaje_no_amigo)

15
insultabot_hourly.py Normal file
View File

@ -0,0 +1,15 @@
from common import get_api, get_gender, list_read
from random import choice
from insultabot import get_insulto_inclusivo
bot_name = 'insultabot'
api = get_api('masto.es', bot_name)
followers = api.account_followers(api.me().id, limit=80)
followers = api.fetch_remaining(followers)
insultos = list_read(bot_name + "_insultos")
choosen_insulto = choice(insultos)
choosen_user = choice(followers)
gender = get_gender(choosen_user)
insulto = get_insulto_inclusivo(choosen_insulto, gender)
api.status_post("@" + choosen_user.username + " ¡" + insulto + "!", visibility="unlisted" )

171
list/insultabot_insultos Normal file
View File

@ -0,0 +1,171 @@
abanto,abanta,abante
abrazafarolas
aburrevacas
adufe
alcornoque
alfeñique
andurriasmo,andurriasma,andurriasme
arrastracueros
atascaburras
baboso,babosa,babose
bailaferias
barrabás
barriobajero,barriobajera,barriobajere
bebecharcos
bebesinsed
bellaco,bellaca,bellaque
berzotas
besugo,besuga,besugue
bobalicón,bobalicona,bobalicone
bocabuzón
bocachancla
bocallanta
borrico,borrica,borrique
botarate
brasas
cabestro,cabestra,cabestre
cabezabuque
cabezachorlito,cabezachorlita,cabezachorlite
cabezapony
cachibache
cafre
cagalindes
cagaprisas
cagarruta
cagatrufas
calientahielos
calzamonas
cansalmas
cantamañanas
caracartón
caraflema
carajaula
carajote
carapapa
carapijo,carapija,carapije
caratorta
cazurro,cazurra,cazurre
cebollino,cebollina,cebolline
cenizo,ceniza,cenize
cenutrio,cenutria,cenutrie
ceporro,ceporra,ceporre
cernícalo,cernícala,cernícale
chiquilicuatre
chirimbaina
chupacables
chupacharcos
chupasangre
cierrabares
cipote
comeberzas
comechapas
comesquinas
comeflores
cretino,cretina,cretine
culopollo
echacantos
esbaratabailes
escuelgagüindillas
esgarramantas
estripabarrancos
estripacharcos
fulastre
gañán
gilipuertas
giraesquinas
gurrumino,gurrumina,gurrumine
gurripato,gurripata,gurripate
hinchanarices
lameculos
lameplatos
legañoso.legañosa,legañose
lerdo,lerda,lerde
majadero,majadera,majadere
malababa
malasangre
malasombra
mascachapas
mastuerzo,mastuerza,mastuerze
matacandiles
meapilas
memo,mema,meme
mendrugo,mendruga,mendrugue
mentecato,mentecata,mentecate
mequetrefe
merluzo,merluza,merluze
mindundi
morroestufa
muerdealmohadas
muerdesartenes
nalgasprietas
pagafantas
palurdo,palurda,palurde
pamplinas
panarra
panoli
papafrita
papanatas
papirote
paquete
pardillo,pardilla,pardille
parguela
pasmarote
pasmasuegras
pataliebre
patán
pavisoso,pavisosa,pavisose
pavitonto,pavitonta,pavitonte
pazguato,pazguata,pazguate
pecholata
pedorro,pedorra,pedorre
peinabombillas
peinaovejas
pelagallos
pelagambas
pelagatos
pelatigres
pelavaras
pelazarzas
pelele
pelma
percebe
perroflauta
picapleitos
pillavispas
piltrafa,piltrafa,piltrafe
pinchatrenes
pintamonas
piojoso,piojosa,piojose
pocasluces
pollopera
rebañasandías
rebozapalillos
revientabaules
robaperas
rumiamierdas
sacamuelas
saltasurcos
sanguijuela
sinsustancia
soplagaitas
soplanucas
soplaguindas
soplapollas
tagarote
tocapelotas
tolai
tontoviava,tontaviava,tonteviava
tontucio,tontucia,tontucie
trepababas
tuercebotas
tunante
zamacuco,zamacuca,zamacuque
zambombo,zambomba,zambombe
zángano,zángana,zángane
zarrapastroso,zarrapastrosa,zarrapastrose
zascandil
zopenco,zopenca,zopenque
zoquete
zote
zullenco,zullenca,zullenque
zurcefrenillos