Passer au contenu principal
Une action qui échoue lève une erreur. Il y en a trois sortes, toutes exportées par chapterjs, et vous pouvez les distinguer avec instanceof.
Ce qui se passe quand votre fonction lève une erreur sans l’attraper est dans Répondre pour les commandes et dans Événements pour les événements : le bot ne s’arrête jamais, vous recevez l’erreur dans votre terminal avec le fichier et la ligne.

DiscordApiError

Discord a répondu à une requête par une erreur. Elle est levée quand Discord refuse ce que le bot a demandé : une permission manquante, quelque chose qui n’existe plus, une valeur qu’il n’accepte pas. La requête a été reçue et comprise ; la relancer donne la même réponse tant que rien ne change.
'DiscordApiError'
requis
Ce que dit instanceof, sous forme de texte.
string
requis
Ce qui s’est passé, avec la raison donnée par Discord et les champs qu’il a refusés : Discord refused POST /channels/{channel.id}/messages: Missing Permissions (50013)., puis ce que cela veut dire en mots simples pour les codes qu’un bot rencontre le plus (une permission qui manque, quelque chose de supprimé, des messages privés fermés), et une ligne par champ refusé quand il y en a.
number
requis
Le statut HTTP de la réponse (403, 404…).
number
requis
Le code d’erreur JSON de Discord (50013 pour « Missing Permissions »…), ou 0 quand la réponse n’en avait pas.
readonly DiscordFieldError[]
requis
Les champs de la requête que Discord a refusés, quand il dit lesquels.
'GET' | 'POST' | 'PUT' | 'PATCH' | 'DELETE'
requis
La méthode HTTP de la requête qui a échoué.
string
requis
Le chemin de l’endpoint tel qu’écrit dans la documentation.

Codes que vous rencontrerez

Testez error.code, jamais error.message : le texte peut changer, le code non. La liste complète est dans la documentation de Discord.

DiscordFieldError

Un problème que Discord a trouvé dans un champ de la requête.
string
requis
Où est le problème : embeds[0].title, ou vide ('') pour toute la requête.
string
requis
La sorte de problème, telle que la nomme Discord (BASE_TYPE_MAX_LENGTH).
string
requis
Ce qui ne va pas, en anglais.
Documentation de Discord

DiscordUnavailableError

Une requête n’a pas pu atteindre Discord, ou Discord a échoué à répétition. Elle est levée quand il n’y a aucune réponse à obtenir : pas de connexion internet, une panne de Discord, une erreur serveur qui a persisté. Le bot a déjà réessayé avant de la lever ; réessayer plus tard peut fonctionner.
'DiscordUnavailableError'
requis
Ce que dit instanceof, sous forme de texte.
string
requis
Discord could not be reached for GET /guilds/{guild.id}. Check your internet connection and https://discordstatus.com, then try again.
'GET' | 'POST' | 'PUT' | 'PATCH' | 'DELETE'
requis
La méthode HTTP de la requête qui a échoué.
string
requis
Le chemin de l’endpoint tel qu’écrit dans la documentation.
unknown
L’erreur sous-jacente, quand Node en a donné une.

InvalidTokenError

Le token du bot a été refusé : aucune requête ne peut réussir tant que ce n’est pas corrigé. Elle est levée par chaque requête une fois que Discord a refusé le token : le bot cesse d’envoyer quoi que ce soit, donc un mauvais token n’inonde jamais Discord. Rien dans votre code ne peut la corriger ; chapterjs dev vérifie le token avant de se connecter, donc vous la voyez normalement là (voir Dépannage).
'InvalidTokenError'
requis
Ce que dit instanceof, sous forme de texte.
string
requis
Discord refused the bot token. Copy it again from the Developer Portal (your application → Bot → Reset Token) into BOT_TOKEN in your .env file.

Attraper

N’attrapez que ce que vous attendez, et laissez passer le reste : une erreur que vous ne gérez pas est signalée avec son fichier et sa ligne, ce qui est ce que vous voulez pour un bug.
src/commands/kick.ts

Ce que voit la personne

Quand run lève une erreur que vous n’avez pas attrapée, la personne qui a utilisé la commande reçoit une réponse courte et privée, jamais les détails techniques :
Quand l’erreur est une DiscordApiError avec le code 50013 ou 50001, la réponse dit ce qui manque à la place :
L’erreur elle-même, avec son fichier et sa ligne, va dans votre terminal. Voir Répondre. Les deux phrases peuvent être traduites dans les fichiers de langue du projet : voir Ce que le bot répond de lui-même.

Ce qui ne lève jamais d’erreur

Les limites de débit ne sont pas des erreurs : quand le bot va trop vite, les requêtes attendent leur tour puis réussissent. Un échec temporaire de Discord est réessayé avant que quoi que ce soit ne soit levé.