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