Chaque requête de votre bot est décomptée d'un budget. Dépassez-le et Discord commence par refuser, puis retarde, puis — si vous continuez — bannit le bot de l'API pour un moment.
Ce que vous constatez
429 Too Many Requestsdans la console.- Des messages envoyés en retard, par rafales ou dans le désordre.
- Une commande qui marche seule et échoue quand plusieurs personnes l'utilisent en même temps.
You are being rate limitedsur un bot qui allait bien hier.
Pourquoi cela arrive
Presque toujours une boucle qui parle à Discord une fois par élément. Éditer un message dans un for sur cent entrées, renommer des salons sur une minuterie, ou envoyer un message par membre : voilà la forme. La bibliothèque met en file plutôt que d'échouer, ce qui masque le problème jusqu'à ce que la file dure des minutes.
Que faire
- Trouvez la boucle
Cherchez tout ce qui envoie, édite ou récupère à l'intérieur d'une itération. C'est presque toujours la source.
- Regroupez
Un message de dix lignes plutôt que dix messages. Une édition d'embed à la fin plutôt qu'une par étape.
- Utilisez les endpoints de masse quand ils existent
La suppression en masse retire jusqu'à cent messages en un appel. Récupérer la liste des membres une fois vaut mieux que récupérer chaque membre.
- Ne renommez jamais un salon sur une minuterie courte
Les mises à jour de salon et de serveur ont une limite bien plus stricte : quelques-unes par dix minutes. Les bots compteurs qui renomment un salon chaque minute en sont le cas classique, et il n'existe aucun moyen de le faire marcher.
Ajouter un délai rend le bot lent et le fait quand même brider, car le budget est par fenêtre, pas par intervalle. Le correctif est d'envoyer moins ; envoyer autant plus lentement ne fait que déplacer le mur.
discord.js et discord.py lisent tous deux les en-têtes de limite et attendent le bon délai automatiquement. Écrire votre propre réessai par-dessus empire souvent les choses en ajoutant des requêtes pendant le refroidissement.