Créez votre premier bot
- Ouvrez Paramètres → Bots → Créer un bot. Votre hébergeur peut désactiver la création de bots.
- Choisissez un nom d’utilisateur en
a-z0-9_, de 2 à 32 caractères. Enregistrez le jeton : il n’est affiché qu’une seule fois. - Ajoutez le bot dans les paramètres de la communauté et accordez uniquement les permissions nécessaires. La gestion exige
MANAGE_BOTS. - Lancez le programme du bot sur votre machine ou votre serveur. Un compte bot n’exécute aucun code.
- Utilisez l’adresse d’API de l’hébergeur qui a émis le jeton.
Les bots agissent dans les salons des communautés qu’ils ont rejointes. L’API Bot ne prend pas en charge les messages directs ni les espaces publics.
Authentification et secrets
Authorization: Bearer <BOT_TOKEN>Les actions de bot exigent un jeton de bot. Créer ou modifier un bot, l’ajouter à une communauté et définir ses permissions exigent le jeton de compte du propriétaire ou d’un administrateur. Séparez ces autorisations.
Stockez les jetons dans des variables d’environnement, jamais dans du code navigateur ni dans Git. La base de l’hébergeur stocke des empreintes de jetons. Révoquez tout jeton divulgué et émettez-en un nouveau. La passerelle transmet le jeton dans la chaîne de requête : masquez donc les URL dans les journaux des proxys inverses et de supervision. Utilisez HTTPS/WSS.
Exemple minimal fonctionnel
Nécessite Node.js 22+ avec fetch et WebSocket intégrés. Télécharger ping-bot.en.mjs. L’exemple enregistre /ping, répond dans un salon et se reconnecte après une coupure.
$env:SIBREL_API_URL = "https://api.example.org"
$env:SIBREL_BOT_TOKEN = "your-token"
node ./ping-bot.en.mjsAPI REST du bot
| Méthode et chemin | Objet |
|---|---|
| GET /api/bots/me | Profil, état de connexion, commandes et communautés. |
| GET /api/bots/guilds | Communautés rejointes par le bot. |
| GET /api/bots/guilds/:guildId/channels | Salons disponibles. |
| GET /api/bots/channels/:channelId/messages?limit=20&before=:id | Historique ; 100 messages au maximum par requête. |
| POST /api/bots/messages | Envoyez channel_id et content / embeds / components ; reply_to_id est optionnel. |
| PATCH /api/bots/messages/:id | Modifiez le propre message du bot. |
| DELETE /api/bots/messages/:id | Suppression douce. mode=hard exige les permissions correspondantes. |
| POST /api/bots/channels/:id/typing | Indicateur de saisie ; renvoie 204. |
| GET /api/bots/commands | Liste des commandes déclarées. |
| PUT /api/bots/commands | Remplace toute la liste globale des commandes. |
| PUT /api/bots/guilds/:guildId/commands | Remplace toute la liste de commandes de la communauté. |
| POST /api/bots/voice/join | Rejoindre : {channel_id}. |
| POST /api/bots/voice/leave | Quitter : {channel_id} ; renvoie 204. |
POST /api/bots/messages
{
"channel_id": 42,
"content": "Bonjour depuis le bot !",
"reply_to_id": 123
}Envoi réussi : 201 { message }. N’envoyez pas Content-Type: application/json sans corps : une requête JSON vide peut renvoyer 400.
Gérer les bots et les permissions
| Jeton de compte | Action |
|---|---|
| GET /api/bots ; POST /api/bots | Liste vos bots ; création avec un nom d’utilisateur et des champs de profil optionnels. |
| PATCH /api/bots/:id ; DELETE /api/bots/:id | Modifier le profil ; supprimer le bot et ses messages. |
| GET /api/bots/:id/tokens ; POST /api/bots/:id/tokens | Métadonnées des jetons ; émettre un nouveau jeton avec {name}. |
| DELETE /api/bots/:id/tokens/:tokenId | Révoquer un jeton. |
| POST /api/guilds/:guildId/bots | Ajouter {bot_id}. |
| DELETE /api/guilds/:guildId/bots/:botId | Retirer de la communauté. |
| GET /api/guilds/:guildId/bots/:botId/permissions | Masque de permissions actuel et permissions disponibles. |
| PUT /api/guilds/:guildId/bots/:botId/permissions | Enregistrer {permissions: "114688"} ; envoyer le bigint sous forme de chaîne. |
Les bots ont leur propre masque de permissions par communauté, et non des rôles de membre ordinaires. Voir les salons : 16384 ; envoyer des messages : 32768 ; voix : 65536. Ces trois permissions donnent 114688. Les bots n’obtiennent aucun accès administrateur.
Commandes slash
PUT /api/bots/commands
{ "commands": [
{ "name": "ping", "description": "Check the bot response", "options": [] },
{ "name": "echo", "description": "Repeat text", "options": [
{ "name": "text", "description": "Your text", "type": "string", "required": true }
] }
] }Noms : 1 à 32 caractères, a-z0-9_-. Jusqu’à 100 commandes et 10 options par commande. Types : string, number, boolean, user, channel, role ; jusqu’à 25 choices. Descriptions de commande : 200 caractères.
PUT remplace toute la liste : envoyez donc toujours l’ensemble complet. Dans message:create, une invocation détectée contient command: {bot_id, name, options, args}. Vérifiez bot_id pour ne pas répondre aux commandes d’un autre bot. Les commandes désactivées ou inconnues arrivent comme texte normal.
Choisir un membre, un salon ou un rôle
Les options de type user, channel et role se choisissent dans une liste avec recherche, sans les taper à la main. Le bot reçoit un jeton de mention plutôt qu’un nom : renommer un salon, un rôle ou un membre ne casse donc jamais une invocation déjà envoyée.
| Type | Ce qui est proposé | Ce que reçoit le bot |
|---|---|---|
| user | Membres de la communauté où la commande est exécutée | <@id> |
| channel | Salons textuels et vocaux de cette communauté | <#id> |
| role | Rôles de cette communauté | <@&id> |
- La recherche porte sur le nom et, pour les membres, sur les pseudonymes et l’identifiant de connexion.
- Les mots de service fonctionnent aussi : « voice » trouve les salons vocaux, « role » les rôles, « text » les salons textuels.
- Les correspondances en début de nom passent devant les autres.
- Huit options au maximum sont affichées ; affinez la recherche si la vôtre manque.
- Entrée choisit la première option, les flèches déplacent la sélection, Échap vide la recherche, Retour arrière revient à la saisie normale.
La valeur arrive sous forme de jeton dans command.options ({ "user": "<@42>" }) et à la même position dans command.args. Un identifiant brut est aussi accepté, mais seul le jeton s’affiche comme mention dans le texte de réponse.
Passerelle et événements
wss://api.example.org/api/bots/gateway?token=<BOT_TOKEN>
{ "type": "ready", "bot_id": 7, "guilds": [1, 2] }
{ "type": "ping" }
{ "type": "pong" }Événements : message:create, message:update, message:delete, reaction:add, reaction:remove, interaction. Les données des événements d’action se trouvent dans data ; ready porte bot_id et guilds au premier niveau.
La file de la connexion retient 256 messages. Un débordement produit message:drop ; des événements plus anciens peuvent être perdus. Prévoyez des reconnexions différées, la surveillance du pong et une restauration d’état via REST. Ne supposez pas une livraison exactement unique.
Voix
POST /api/bots/voice/join renvoie channel_id, identity et livekit. Si LiveKit est configuré, utilisez le token et livekitUrl renvoyés avec un SDK client compatible. Avec livekit: null, le bot n’apparaît que dans la liste des membres et ne transmet aucun audio. La requête REST ne lance aucune lecture à elle seule.
Erreurs et exploitation
| Situation | Que faire |
|---|---|
| 400 | Vérifiez les types de champs, les longueurs, le JSON et le format des composants. |
| 401 | Vérifiez l’hébergeur et le jeton. En cas de révocation, ne réessayez pas avant d’avoir remplacé le jeton. |
| 403 | Vérifiez l’appartenance et les propres permissions de salon ou de communauté du bot. |
| 404 | Vérifiez l’adresse d’API et l’identifiant de la ressource locale. |
| 429 | Respectez Retry-After s’il est indiqué et augmentez le délai. |
| Déconnexion / 5xx | Reconnectez-vous avec un backoff borné. N’envoyez pas à l’aveugle : des doublons sont possibles. |
Masquez les secrets dans les journaux, limitez l’accès aux variables d’environnement et ne répondez pas aux propres messages du bot. Coordonnez la collecte de données avec les administrateurs et les utilisateurs, et définissez la conservation et la suppression.
Salons vocaux pour les bots
Un bot disposant de la permission distincte CREATE_VOICE_CHANNELS peut créer des salons vocaux avec POST /api/bots/guilds/:guildId/channels. États : GET /api/bots/guilds/:guildId/voice-states. Demande de déplacement : POST /api/bots/guilds/:guildId/voice/move. Suppression d’un salon vide : DELETE /api/bots/channels/:channelId. L’hôte contrôle les permissions et limites ; un jeton seul ne donne pas ces droits.