~rlafuente

sobre os calos técnicos e as lombas filosóficas que encontro enquanto tento pôr computadores a fazer o que eu quero

Bots de Mastodon: o que são, como fazer, e a botiqueta

01 de janeiro de 2023 — Ricardo Lafuente

Tecnicamente, um bot é uma conta que publica toots automaticamente, seja de forma regular ou em reacção a determinados sinais.

Na prática, são tão mais do que isso. A possibilidade de fazermos mini-máquinas de publicação automática veio mostrar-nos o seu potencial prático, humorístico, artístico, humano e até poético. Existe até uma instância dedicada exclusivamente a bots.

Os que por aí andam

Há os bots ferramenta que podemos mencionar para fazerem algo por nós, como imortalizar citações, reconhecer o texto de uma imagem ou aplicar filtros em fotografias.

Existem também bots que publicam regularmente textos gerados de forma mais ou menos aleatória, que vão das experiências mais simples até demonstrações notáveis de criatividade e escrita conceptual -- sobre isto, as obras da Allison Parrish e do Darius Kazemi são imperdíveis. E se formos para além do texto, há resultados deliciosos.

Finalmente há os bots que publicam de acordo com fontes externas, re-publicando alertas e emergências, previsões do tempo; ou então, ligados a API mais sofisticadas, dá para jogar xadrez por votação ou detectar aviões a passar por cima de uma certa localidade.

(esta não é de todo uma taxonomia formal ou sequer séria; se tiveres outras ideias sobre como discriminar entre tipos de bots, gostava de ouvir)

Como fazer um

Existem recursos para criar bots sem recorrer a código; no Twitter havia vários que nunca realmente explorei, porque com Python dá para fazer tudo. No Mastodon ainda não me sentei para andar à procura, mas gostava de saber o que por aí há.

Sujar as mãos com código dá-nos outro tipo de superpoderes. Para pôr a rolar um bot, precisas de acesso a uma shell; podes aproveitar um computador que tenhas sempre ligado, ou então usar um serviço que te dê acesso a uma shell SSH. Os comandos aqui destinam-se a sistemas GNU/Linux, mas devem também funcionar em Mac (não me perguntem pelo Windows).

Começamos por instalar localmente o módulo que nos dá os poderes de interagir com a API da tua instância. Há várias formas de instalar o módulo do Mastodon, como num Virtualenv, mas esta é a mais simples e rápida:

pip install --user mastodon.py

Depois, cria um ficheiro bot.py e cola este pequeno pedaço de código:

from mastodon import Mastodon
mastodon = Mastodon(access_token=MASTODON_ACCESS_TOKEN,
                    api_base_url=MASTODON_API_BASE_URL)
mastodon.status_post(text, visibility='unlisted')

É tudo o que é preciso! Vamos por partes:

  • depois de importar, criamos o objecto mastodon que podemos usar para interagir com a API do Mastodon
  • substitui o campo MASTODON_ACCESS_TOKEN pelo token de acesso que te foi dado quando registaste a aplicação na API da tua instância
  • substitui o campo MASTODON_API_BASE_URL pelo endereço da instância
  • o post é feito com a visibilidade não-listada para não interferir com as timelines locais -- já explico melhor.

Finalmente, coloca o script a correr regularmente num cronjob; corre o comando crontab -e e acrescenta a linha

@hourly /path/para/o/teu/bot.py

E está a rolar! Antes de activares o cron, corre o script um par de vezes para assegurar que está bem.

Botiqueta

Há uns anos a ~aiscarvalho e eu demos um workshop de bots de Mastodon (e de Twitter, mas passado é passado). Éramos uma dúzia a criar geradores de texto e fomos para o masto.pt pôr os nossos bots a cantar, o que arreliou bastante o administrador da instância: ele tratou de silenciar os nossos bots porque estavam a poluir a timeline local. À primeira ficámos irritados, então estávamos a trazer coisas tão giras e vêm logo assim. Mas depois lá concordámos que devíamos ter perguntado primeiro, pedimos desculpa e fomos ler sobre isso das timelines locais.

A timeline local é o ponto de cada instância onde se podem ler todos os toots públicos feitos por pessoas que dela fazem parte. É um sítio especialmente bom se estiveres numa instância temática, regional ou local, porque se encontram facilmente novas contas a seguir, e dá para conversas mais recatadas.

Ora, se um bot começa a emitir um ou mais toots a cada hora, começa a dominar a timeline local e a dificultar a leitura do resto, obrigando cada pessoa a silenciá-lo individualmente. Daí na maioria das instâncias existirem normas sobre toots não-listados -- as situações onde se deve evitar fazer toots públicos, como nos vários toots de um thread (o primeiro deve ser público, os seguintes não-listados) e quando existe política de bots, é quase sempre imposto que não façam toots públicos.

Este é o primeiro ponto do que tentámos condensar na Ciberlândia como as boas práticas de construção de bots:

  1. Apenas fazer toots não-listados
  2. Assinalar no perfil que a conta é um bot (há uma opção para isso)
  3. Se o bot fizer upload de imagens e vídeos, contacta os admins da instância

O ponto 2 serve para discriminar os tipos de conta nas estatísticas da instância e permitir distinguir claramente quando uma conta é um bot.

O ponto 3 prende-se com as duras realidades do alojamento: afixar um vídeo de 2MB por dia dá 730 MB por ano, o que é um peso razoável na conta mensal de alojamento. Os admins da tua instância podem ajudar-te a encontrar alternativas de alojamento ou métodos de compressão que possam facilitar a vida a todos os envolvidos.

Portugal adopta o bot

Na Ciberlândia damos as boas-vindas a bots interessantes, criativos e/ou úteis. Se tiveres interesse na arte de engendrar estas geringonças de publicação automática, há espaço para experimentar e gente por perto para tirar dúvidas.

E se souberes de bots interessantes em português ou outras formas promissoras de engendrar bots, manda-me um toot. (o mesmo para erros que possa ter feito e sugestões técnicas!)