2023-04-23 11:47:16 +00:00
from common import get_api
from common import list_append
from common import list_read
from common import list_write
from datetime import datetime , timedelta
def get_message ( user_domain ) :
return " ¡Hola! Veo que es tu primera vez en Mastodon, ¡te doy la bienvenida si así es! \n \n Soy 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 \n Aunque 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 \n Y si tienes alguna duda más, estaré encantado de ayudarte, solo responde a este mensaje privado 🙂 "
excluded_domains = [
' masto.es ' ,
# Relay tkz.one
' mst.universoalterno.es ' ,
' masto.friki.lol ' ,
' mastodon.com.py ' ,
' comunidad.nvda.es ' ,
' mast.lat ' ,
' viajes.social ' ,
' ferrocarril.net ' ,
' tkz.one ' ,
' mastorol.es ' ,
' shrimply.social ' ,
' mstdn.jmiguel.eu ' ,
# Relay chocoflan
' mk.mistli.net ' ,
' izta.mistli.net ' ,
' novoa.nagoya ' ,
' quey.la ' ,
' social.hispabot.freemyip.com ' ,
' mastodon.uy ' ,
' mstdn.mx ' ,
' el-spot.xyz ' ,
' mastodonperu.xyz ' ,
' 41020.social ' ,
#'mast.lat',
' acc4e.com ' ,
#'mastodon.com.py',
#'shrimply.social',
' nonomastodon.redirectme.net ' ,
' arguos.com ' ,
' social.wikimedia.es ' ,
' tarugo.ddns.net ' ,
' pleroma.lyricaltokarev.fun ' ,
# Relay nobigtech.es
' sindicato.social ' ,
#'mastodon.uy',
' red.niboe.info ' ,
' nobigtech.es ' ,
' loa.masto.host ' ,
' bizkaia.social ' ,
#'mstdn.mx',
2023-04-24 00:20:18 +00:00
' federa.social ' ,
# Non-spanish accounts >:(
' sportsbots.xyz '
2023-04-23 11:47:16 +00:00
]
bot_name = ' federabot '
api_mastoes = get_api ( ' masto.es ' , ' rober ' )
following = list_read ( bot_name )
date_recent = datetime . today ( ) - timedelta ( days = 7 )
2023-04-24 00:20:18 +00:00
def check_timeline ( domain , timeline_name = ' public ' , api_external = None ) :
if api_external is None :
api_external = get_api ( domain )
2023-04-23 11:47:16 +00:00
last_id = list_read ( bot_name + " _last_id_ " + domain ) [ 0 ]
timeline = api_external . timeline (
timeline = timeline_name ,
since_id = last_id ,
remote = ( True if timeline_name == ' public ' else False )
)
for post in timeline :
if timeline_name == ' local ' :
username = post [ ' account ' ] [ ' acct ' ] + " @ " + domain
user_domain = domain
else :
username = post [ ' account ' ] [ ' acct ' ]
user_domain = username . split ( " @ " ) [ 1 ]
if (
post [ ' language ' ] == ' es '
and not " nobot " in post [ ' account ' ] [ ' note ' ]
and user_domain not in excluded_domains
and username not in following
) :
date_created = post [ ' account ' ] [ ' created_at ' ] . replace ( tzinfo = None )
2023-04-24 00:20:18 +00:00
if date_created > date_recent and timeline_name == ' local ' and user_domain == ' mastodon.social ' :
2023-04-23 11:47:16 +00:00
print ( " New user: " + username )
api_mastoes . status_post ( " @ " + username + " " + get_message ( user_domain ) , visibility = " direct " )
print ( " Following: " + username )
user = api_mastoes . search_v2 ( " @ " + username + " " , result_type = " accounts " ) [ " accounts " ] [ 0 ]
# Retrieve the post, it could be the first
api_mastoes . search_v2 ( post [ ' url ' ] , result_type = " posts " )
api_mastoes . account_follow ( user [ ' id ' ] )
following . append ( username )
list_append ( bot_name , username )
if len ( timeline ) > 0 :
list_write ( bot_name + " _last_id_ " + domain , [ timeline [ 0 ] [ ' id ' ] ] )
2023-04-24 00:20:18 +00:00
api = get_api ( ' masto.es ' , bot_name )
check_timeline ( ' masto.es ' , api_external = api )
api = get_api ( ' mastodon.social ' , bot_name + " _mastodon_social " )
check_timeline ( ' mastodon.social ' , ' local ' , api_external = api )
check_timeline ( ' mastodon.social ' , ' public ' , api_external = api )