Module d’interactions
Vos commandes répondent-elles vraiment ? Le module discord.js et discord.py.
Discord laisse 3 secondes à un bot pour accuser réception d’une commande, et 15 minutes pour y répondre après un deferReply(). Au-delà, l’utilisateur voit « Cette interaction a échoué », ou reste sur « réfléchit… », et rien ne plante de votre côté. Le module NorminUp compte exactement cela.
Il utilise le jeton de votre service Bot Discord (shards), le même que l’extrait des shards. Les résultats apparaissent dans l’onglet Commandes du service.
discord.js
npm install @norminup/discord
const { watch } = require('@norminup/discord');
watch(client, { token: process.env.NORMINUP_TOKEN });
Node 18.17 ou plus, discord.js 14 ou plus. Un seul appel, avant ou après vos propres gestionnaires d’interactionCreate.
discord.py
pip install norminup-discord
import norminup_discord
norminup_discord.watch(bot, token=os.environ["NORMINUP_TOKEN"])
Python 3.9 ou plus, discord.py 2.4 ou plus. Fonctionne avec discord.Client, commands.Bot et commands.AutoShardedBot.
Ce qui est mesuré
Pour chaque commande, menu, bouton, formulaire et autocomplétion :
- réponse en moins d’1 seconde, ou entre 1 et 3 secondes ;
- échouée : pas de réponse à temps, l’utilisateur a vu « Cette interaction a échoué » ;
- réponse différée envoyée, avec le temps qu’elle a pris ;
- sans réponse : différée, puis jamais complétée dans les 15 minutes ;
- les autres erreurs de Discord pendant la réponse.
Ce qui n’est jamais envoyé
Aucun contenu de message, aucun utilisateur, serveur ni salon. Seulement le nom de la commande, ou le début d’un identifiant de bouton sans ses longs nombres (ticket:close:123456789 devient ticket), le numéro du shard et les temps.
Alertes
Dès que 5 utilisateurs sont restés sans réponse en 5 minutes (échouées ou différées sans réponse), vous êtes prévenu, avec la commande la plus touchée. L’alerte suivante attend 30 minutes.
Options
endpoint: une autre adresse d’envoi, pour une instance de test.flushIntervalMs(discord.js) ouflush_interval(discord.py, en secondes) : fréquence d’envoi, 10 secondes par défaut.onErrorouon_error: appelé en cas d’échec d’envoi. Sans lui, le module reste silencieux.
Le module ne peut pas gêner votre bot : il ne change aucune réponse, regroupe les compteurs par minute et ignore les erreurs d’envoi. Avant un arrêt propre, appelez stop() pour envoyer les derniers compteurs. Code source sous licence MIT, sur npm et PyPI.