Créer un bot en TypeScript
Ce guide écrit un bot qui publie sur Bluesky avec
@atproto/api, le SDK
TypeScript officiel. Il fonctionne avec Node.js 20 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 : vous pouvez le révoquer à tout moment sans toucher au compte.
2. Préparer le projet
mkdir my-bot && cd my-bot
npm init -y
npm pkg set type=module
npm install @atproto/api
npm install --save-dev tsx typescriptGardez les identifiants hors du code, dans des variables d’environnement :
export BLUESKY_HANDLE="weather.bluesky.bot"
export BLUESKY_APP_PASSWORD="xxxx-xxxx-xxxx-xxxx"3. Écrire le bot
// bot.ts : publie une fois en tant que le bot. Lancez `npx tsx bot.ts`.
import { AtpAgent, RichText } from "@atproto/api";
// 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.
const identifier = process.env.BLUESKY_HANDLE ?? "";
const password = process.env.BLUESKY_APP_PASSWORD ?? "";
if (!identifier || !password) {
throw new Error("Set BLUESKY_HANDLE and BLUESKY_APP_PASSWORD.");
}
const agent = new AtpAgent({ service: "https://bsky.social" });
await agent.login({ identifier, password });
// RichText repère les liens, mentions et hashtags pour les rendre cliquables.
const text = new RichText({
text: "Today: sunny, 21°C. Forecast at https://example.com #weather",
});
await text.detectFacets(agent);
const { uri } = await agent.post({
text: text.text,
facets: text.facets,
createdAt: new Date().toISOString(),
});
console.log(`Posted ${uri}`);Ce qu’il fait :
AtpAgentparle àhttps://bsky.social, le serveur des comptes hébergés par Bluesky. Si le bot vit sur un autre serveur (un PDS auto-hébergé), utilisez l’URL de ce serveur.loginouvre une session avec le handle et le mot de passe d’application.RichTextetdetectFacetstransforment le lien et#weatheren facets cliquables : un simpletextles afficherait comme du texte brut.postcrée le post et renvoie son URIat://.
4. Le lancer
npx tsx bot.tsLes erreurs à gérer
- Limites de débit : Bluesky répond
429quand un compte ou un serveur en fait trop. Patientez et réessayez plus tard ; voir les Bonnes pratiques. - Identifiants expirés : un mot de passe d’application révoqué fait échouer
login. Créez-en un nouveau. - Posts trop longs : un post contient 300 caractères (graphèmes). Coupez le texte plus long, ou publiez un fil.
Et ensuite
- Programmez des posts pour que le bot tourne seul.
- Donnez-lui un handle bluesky.bot.
- Plus d’informations dans les modèles de bots et le guide des posts de Bluesky (en anglais).