Réparer un bot Discord qui ne répond pas ou reste hors ligne
Bot Discord affiché hors ligne, ou en ligne mais muet ? La cause est presque toujours l'une de ces cinq. Voici la méthode pour diagnostiquer et le remettre en marche.
Bot Discord ne répond pas : hors ligne ou simplement muet ?
Lorsqu’un bot Discord ne répond pas, commencez par observer son statut dans la liste des membres. Un bot hors ligne et un bot connecté mais silencieux correspondent à deux problèmes différents.
| Symptôme | Causes probables |
|---|---|
| Bot grisé et hors ligne | Processus arrêté, crash, token invalide, hébergement indisponible |
| Bot en ligne mais sans réponse | Intents manquants, permissions insuffisantes, erreur dans le code |
| Certaines commandes fonctionnent | Mauvaise configuration d’une commande ou d’un salon |
| Réponses très lentes | Traitement bloquant, problème externe ou limitation de requêtes |
| Commande slash visible mais en échec | Bot hors ligne, interaction non traitée ou réponse trop tardive |
Testez d’abord une fonction simple et connue, comme /ping ou !ping. Vérifiez ensuite si le problème concerne tous les salons, toutes les commandes ou seulement une action précise.
La règle d’or consiste à lire les logs avant de modifier le code. Ils indiquent généralement si le processus s’est arrêté, si Discord refuse la connexion ou si une fonction provoque une erreur.
Corrigez une cause à la fois, puis redémarrez le bot. Plusieurs modifications simultanées rendent le diagnostic beaucoup plus difficile.
Vérifier que le processus du bot fonctionne
Sur un VPS, le programme doit rester actif en permanence. Une commande lancée directement dans un terminal peut s’arrêter lorsque vous fermez la session SSH.
Si vous utilisez PM2, affichez les processus :
pm2 list
Repérez le statut de votre bot :
online
stopped
errored
Un statut stopped indique que le processus a été arrêté. Relancez-le avec :
pm2 restart mon-bot
Si le processus a été supprimé de PM2, démarrez-le à nouveau :
cd /home/votre-utilisateur/mon-bot
pm2 start index.js --name mon-bot
Consultez immédiatement ses logs :
pm2 logs mon-bot --lines 100
Une succession rapide de redémarrages dans pm2 list indique souvent que le programme crash dès son lancement. PM2 tente de le relancer, mais l’erreur reste présente.
Vérifiez également que le bot redémarre avec le VPS :
pm2 startup
pm2 save
Après l’ajout ou la suppression d’un processus, relancez toujours :
pm2 save
Pour la configuration complète, consultez le guide consacré au bot Discord 24/7 avec PM2 ainsi que le guide pour héberger un bot Discord en continu.
Corriger un token invalide ou mal chargé
Un bot ne peut pas se connecter sans token valide. Les erreurs les plus fréquentes sont :
Invalid Token
An invalid token was provided
TokenInvalid
Le problème peut apparaître lorsque :
- le token a été régénéré dans le portail, mais pas sur l’hébergement ;
- une faute s’est glissée pendant la copie ;
- la variable d’environnement est absente ;
- le fichier
.envn’est pas chargé ; - des guillemets ou espaces ont été ajoutés ;
- Discord a invalidé un token exposé.
Vérifiez que votre programme récupère bien la variable.
En Node.js :
require("dotenv").config();
const token = process.env.DISCORD_TOKEN;
if (!token) {
throw new Error("DISCORD_TOKEN est absente.");
}
client.login(token);
En Python :
import os
from dotenv import load_dotenv
load_dotenv()
token = os.getenv("DISCORD_TOKEN")
if not token:
raise RuntimeError("DISCORD_TOKEN est absente.")
client.run(token)
Après avoir changé la variable avec PM2, utilisez :
pm2 restart mon-bot --update-env
Ne publiez jamais le token dans les logs, une capture ou un dépôt Git. S’il a été exposé, utilisez immédiatement Reset Token dans le Discord Developer Portal, puis remplacez sa valeur sur l’hébergement.
Le guide créer un bot Discord et obtenir son token détaille cette procédure. Pour protéger durablement vos secrets, consultez aussi le guide pour sécuriser le token de votre bot Discord.
Activer les intents nécessaires
Un bot peut apparaître en ligne tout en ignorant les messages parce qu’il ne reçoit pas les données nécessaires.
Le Message Content Intent est particulièrement important pour les commandes à préfixe comme :
!ping
!help
!ticket
Sans cet intent, le contenu des messages peut être vide ou indisponible pour le bot.
L’intent doit être activé à deux endroits.
Dans le Discord Developer Portal :
Application > Bot > Privileged Gateway Intents
Activez :
Message Content Intent
Déclarez-le également dans le code.
Avec discord.js :
const {
Client,
GatewayIntentBits,
} = require("discord.js");
const client = new Client({
intents: [
GatewayIntentBits.Guilds,
GatewayIntentBits.GuildMessages,
GatewayIntentBits.MessageContent,
],
});
Avec discord.py :
import discord
intents = discord.Intents.default()
intents.message_content = True
client = discord.Client(intents=intents)
Une configuration incorrecte peut produire :
Used disallowed intents
[DisallowedIntents]
Discord peut aussi fermer la connexion Gateway avec un code signalant qu’un intent privilégié n’a pas été autorisé.
Activez uniquement les intents réellement nécessaires. Un bot utilisant exclusivement des commandes slash n’a généralement pas besoin de lire le contenu de tous les messages.
Redémarrez complètement le bot après avoir modifié les intents dans le portail ou dans le code.
Vérifier les permissions du bot dans le salon
Un bot connecté peut recevoir une commande sans avoir le droit d’y répondre.
Contrôlez les permissions de son rôle et celles du salon concerné :
- Voir le salon ;
- Envoyer des messages ;
- Lire l’historique des messages ;
- Intégrer des liens ;
- Joindre des fichiers ;
- Utiliser les commandes de l’application.
Une erreur d’autorisation peut apparaître sous cette forme :
Missing Permissions
DiscordAPIError[50013]: Missing Permissions
Les permissions du salon peuvent remplacer celles du rôle général. Un refus explicite appliqué au bot ou à son rôle peut donc l’empêcher d’écrire uniquement dans certains salons.
Pour une commande de modération, vérifiez aussi la hiérarchie des rôles. Le rôle du bot doit être placé au-dessus du rôle qu’il tente de gérer. Sans cela, il ne pourra pas attribuer ce rôle, expulser le membre concerné ou modifier certaines permissions.
Évitez de donner la permission Administrateur pour corriger rapidement le problème. Accordez uniquement les droits nécessaires à chaque fonction.
Lire la première erreur dans les logs
Un bot peut se connecter, puis cesser de répondre lorsqu’une fonction provoque une exception. Consultez les logs avec :
pm2 logs mon-bot --lines 200
Ou lancez temporairement le programme au premier plan :
node index.js
Pour Python :
python bot.py
Recherchez la première erreur et sa stack trace. Les messages courants comprennent :
Error: Cannot find module 'discord.js'
ModuleNotFoundError: No module named 'discord'
SyntaxError
ReferenceError
TypeError
DiscordAPIError[50013]: Missing Permissions
Une dépendance manquante se corrige généralement en réinstallant le projet.
Pour Node.js :
npm install
Pour Python, dans l’environnement virtuel :
python -m pip install -r requirements.txt
Lisez le chemin et le numéro de ligne affichés dans la stack trace. Ils indiquent où l’erreur s’est produite.
Ajoutez également une gestion des erreurs autour des commandes sensibles afin que l’échec d’une action ne rende pas tout le bot silencieux.
Respecter les limites de requêtes Discord
Discord limite le nombre de requêtes envoyées à son API. Un dépassement produit une réponse :
429 Too Many Requests
Les bibliothèques comme discord.js et discord.py gèrent normalement les limites standards, mais un code mal conçu peut tout de même générer trop d’actions.
Évitez notamment :
while (true) {
await channel.send("Message");
}
Un bot ne doit pas renvoyer immédiatement la même requête en boucle après une erreur 429. Il doit respecter le délai de nouvelle tentative communiqué par Discord.
Réduisez le volume en :
- regroupant les notifications ;
- ajoutant une temporisation ;
- mettant les actions dans une file d’attente ;
- évitant les mises à jour inutiles ;
- limitant les logs répétitifs ;
- supprimant les boucles d’envoi incontrôlées.
Un bot qui ignore régulièrement les limitations risque de subir des restrictions supplémentaires.
En résumé
- Lorsqu’un bot Discord ne répond pas, vérifiez d’abord s’il est hors ligne ou seulement silencieux.
- Utilisez
pm2 listpour contrôler le processus. - Consultez la première erreur avec
pm2 logs mon-bot. - Relancez le programme avec
pm2 restart mon-bot. - Vérifiez la variable
DISCORD_TOKENsi vous voyezInvalid Token. - Utilisez
--update-envaprès une modification des variables PM2. - Activez le Message Content Intent dans le portail et dans le code pour les commandes à préfixe.
- Corrigez
Used disallowed intentsen vérifiant les intents privilégiés demandés. - Accordez au bot les permissions nécessaires dans chaque salon.
- Vérifiez la hiérarchie des rôles pour les commandes de modération.
- Corrigez la première erreur de la stack trace avant les erreurs qui en découlent.
- Respectez les limitations Discord si vous recevez
429 Too Many Requests. - Pour diagnostiquer un bot Discord ne répond pas et le maintenir en ligne avec un panel de gestion et un support francophone, découvrez l’offre hébergement bot Discord TalCloud.