Nirn Proxy
Nirn Proxy est un proxy HTTP transparent placé entre vos bots et l'API REST de Discord. Il suit les buckets de limite de débit, fait patienter les requêtes quand il ne reste rien à dépenser, et exporte des métriques Prometheus. Il suffit de changer l'URL de l'API dans votre bibliothèque pour l'adopter.
Le projet d'origine, germanoeich/nirn-proxy, né chez Dyno, a été archivé en mars 2026. Notre fork repart de son dernier commit et corrige, un par un, les bugs relevés dans les autres forks, chacun avec un test qui échoue sans la correction. Le détail est dans Corrections du fork.
Fonctionnalités
- Haute disponibilité : plusieurs nœuds en cluster, sans quorum ni stockage externe.
- Limites par route et globale gérées de façon transparente, requêtes envoyées dans l'ordre pour chaque bucket.
- Toutes les versions de l'API, y compris plusieurs à la fois pour le même bot.
- Webhooks et jetons Bearer pris en charge, pour un nombre illimité de bots et de clients.
- Aucune route codée en dur : les nouvelles routes de Discord fonctionnent sans mise à jour.
- Métriques Prometheus prêtes à l'emploi, dont le suivi des requêtes invalides qui mènent à un ban Cloudflare.
Comment il se comporte
Le proxy écoute toutes les routes et les relaie à Discord sans modifier les requêtes : n'importe quelle bibliothèque compatible avec l'API de Discord fonctionne derrière lui, même avec sa propre gestion des limites active. Vous pouvez aussi la retirer et envoyer les requêtes immédiatement.
Le proxy ne réessaie pas les requêtes. S'il reçoit malgré tout une 429 (limite partagée, limite interne de Discord…), il la renvoie au client, qui peut réessayer tout de suite. Il protège aussi contre les situations connues pour provoquer un ban Cloudflare, comme trop de 404 sur des webhooks ou trop de 401.
Réponses propres au proxy
- 408 Request Timeout : Discord a mis plus de
REQUEST_TIMEOUTmillisecondes à répondre, ou la requête a été abandonnée à cause des limites. - 429 avec l'en-tête
generated-by-proxy: un nœud du cluster est tombé ; le client est invité à attendre une seconde avant de réessayer (voir Haute disponibilité).
Limites
- Le proxy ne gère pas le SSL : servez-le sur un réseau privé.
- Les limites ne fonctionnent qu'avec
X-RateLimit-Precisionàseconds, seul comportement possible depuis l'API v8. - Discord n'expose pas la limite globale d'un bot : déclarez celles qui ont été relevées avec
BOT_RATELIMIT_OVERRIDES.
Vérifier le proxy
Nous vérifions le fork avec Bucketmap, qui parcourt toutes les routes REST de Discord et compare ce que répond Discord avec ce que répond le proxy : voir Tester un proxy.
Licence
Nirn Proxy est distribué sous licence GPL v3. Le code source est sur GitHub, branche fixes.