ADD: Insultabot
This commit is contained in:
parent
190a4e98af
commit
cac893784d
18
common.py
18
common.py
|
@ -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
|
|
@ -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)
|
|
@ -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" )
|
|
@ -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
|
Loading…
Reference in New Issue