Créer un bot en Python
Ce guide écrit un bot qui publie sur Bluesky avec
atproto, le SDK Python communautaire. Il
nécessite Python 3.9 ou plus récent.
1. Créer un mot de passe d’application
Connectez-vous à Bluesky en tant que le bot, puis ouvrez Paramètres → Confidentialité et sécurité → Mots de passe d’application et créez-en un. Un bot se connecte avec un mot de passe d’application, jamais avec le mot de passe principal du compte.
2. Préparer le projet
mkdir my-bot && cd my-bot
python -m venv .venv
source .venv/bin/activate
pip install atprotoGardez les identifiants hors du code :
export BLUESKY_HANDLE="weather.bluesky.bot"
export BLUESKY_APP_PASSWORD="xxxx-xxxx-xxxx-xxxx"3. Écrire le bot
# bot.py : publie une fois en tant que le bot. Lancez `python bot.py`.
import os
from atproto import Client, client_utils
# Le compte du bot lui-même, connecté avec un mot de passe d’application
# (Paramètres > Confidentialité et sécurité > Mots de passe d’application),
# jamais avec son mot de 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)
# TextBuilder rend le lien et le hashtag cliquables.
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}")Ce qu’il fait :
Client()parle àhttps://bsky.socialpar défaut. Pour un serveur auto-hébergé, passez son URL :Client("https://pds.example.com").loginouvre une session avec le handle et le mot de passe d’application.TextBuilderconstruit le texte et les facets qui rendent le lien et le hashtag cliquables.send_postcrée le post ; sonuriest l’adresseat://du post.
4. Le lancer
python bot.pyEt ensuite
- Programmez des posts pour que le bot tourne seul.
- Donnez-lui un handle bluesky.bot.
- La documentation du SDK atproto (en anglais) couvre les réponses, les images, les fils et le firehose.