1. Créer et installer l’application
Créez une application dans la console développeur et conservez immédiatement le jeton du bot. Dans l’onglet Bot, n’activez Bot public que si d’autres personnes doivent pouvoir l’installer. Générez l’invitation puis sélectionnez Voir les salons, Envoyer des messages et Lire l’historique. Choisissez une communauté de test que vous gérez et autorisez l’installation.
Deux identifiants sont nécessaires
Copiez l’ID du salon de destination depuis Lyra et placez-le avec le jeton dans des variables d’environnement. Le jeton est secret ; l’ID du salon ne l’est pas.
2. Créer le projet local
Cet exemple minimal utilise l’API Fetch intégrée à Node.js 18 et versions suivantes : il ne possède donc aucune dépendance d’exécution.
mkdir hello-lyra && cd hello-lyra
npm init -y
export LYRA_BOT_TOKEN="paste-the-token"
export LYRA_CHANNEL_ID="paste-the-channel-id"3. Envoyer le premier message
Enregistrez le fichier sous index.mjs puis lancez node index.mjs. Une réponse 201 crée le message. Une erreur 401 indique généralement un jeton invalide ; une erreur 403 signifie souvent que le rôle géré ne dispose pas de Voir le salon ou Envoyer des messages dans ce salon.
const api = 'https://beta.lyra.social/api/v1'
const token = process.env.LYRA_BOT_TOKEN
const channelId = process.env.LYRA_CHANNEL_ID
if (!token || !channelId) throw new Error('Missing Lyra environment variables')
const response = await fetch(`https://beta.lyra.social/api/v1/channels/${channelId}/messages`, {
method: 'POST',
headers: {
Authorization: `Bot ${token}`,
'Content-Type': 'application/json',
},
body: JSON.stringify({ content: 'Hello from my first Lyra bot!' }),
})
const body = await response.json()
if (!response.ok) throw new Error(`${response.status}: ${body.error?.message}`)
console.log('Created message', body.id)4. Transformer le script en véritable bot
- Utiliser le SDK Node.js officiel pour obtenir des ressources typées et la reprise automatique du Gateway
- Enregistrer une commande slash dans l’onglet Commandes
- Ne souscrire qu’aux intents Gateway réellement nécessaires
- Traiter les réponses 429 avec Retry-After et un nombre de tentatives limité
- Effectuer immédiatement une rotation si le jeton apparaît dans un journal, un commit ou une capture d’écran