Criar um bot em Python
Este guia escreve um bot que publica no Bluesky com
atproto, o SDK de Python da comunidade.
Precisa de Python 3.9 ou superior.
1. Criar uma palavra-passe de aplicação
Entre no Bluesky como o bot, abra Definições → Privacidade e segurança → Palavras-passe de aplicação e crie uma. Um bot entra com uma palavra-passe de aplicação, nunca com a palavra-passe principal da conta.
2. Preparar o projeto
mkdir my-bot && cd my-bot
python -m venv .venv
source .venv/bin/activate
pip install atprotoMantenha as credenciais fora do código:
export BLUESKY_HANDLE="weather.bluesky.bot"
export BLUESKY_APP_PASSWORD="xxxx-xxxx-xxxx-xxxx"3. Escrever o bot
# bot.py: publica uma vez como o bot. Execute com `python bot.py`.
import os
from atproto import Client, client_utils
# A própria conta do bot, com sessão iniciada com uma palavra-passe de aplicação
# (Definições > Privacidade e segurança > Palavras-passe de aplicação),
# nunca com a palavra-passe principal.
handle = os.environ.get("BLUESKY_HANDLE")
password = os.environ.get("BLUESKY_APP_PASSWORD")
if not handle or not password:
raise SystemExit("Set BLUESKY_HANDLE and BLUESKY_APP_PASSWORD.")
client = Client()
client.login(handle, password)
# O TextBuilder torna clicáveis a ligação e a hashtag.
text = (
client_utils.TextBuilder()
.text("Today: sunny, 21°C. Forecast at ")
.link("example.com", "https://example.com")
.text(" ")
.tag("#weather", "weather")
)
post = client.send_post(text)
print(f"Posted {post.uri}")O que faz:
Client()fala comhttps://bsky.socialpor predefinição. Para um servidor próprio, passe o URL dele:Client("https://pds.example.com").loginabre uma sessão com o handle e a palavra-passe de aplicação.TextBuilderconstrói o texto e os facets que tornam clicáveis a ligação e a hashtag.send_postcria a publicação; o seuurié o endereçoat://da publicação.
4. Executá-lo
python bot.pyA seguir
- Agende publicações para o bot funcionar sozinho.
- Dê-lhe um handle bluesky.bot.
- A documentação do SDK atproto (em inglês) cobre respostas, imagens, sequências e o firehose.