Wenn dein Bot auf Rate-Limit-Fehler stößt, keine Sorge – das ist ein häufiges Problem, das sich mit dem richtigen Ansatz beheben lässt. In diesem Artikel erfährst du, wie das Rate-Limiting-System von Discord funktioniert, und bekommst praktische Tipps zur Lösung.
Inhalt
Arten von Rate Limits bei Discord verstehen
Globale Rate Limits
Routenbasierte Rate Limits
Ressourcenspezifische Rate Limits
Grenzwerte für ungültige Anfragen\
So findest du heraus, von welchen Rate Limits du betroffen bist
Best Practices im Umgang mit Rate Limits
Arten von Rate Limits bei Discord verstehen
Discord verwendet mehrere Arten von Rate Limits, um die API zu schützen. Es ist wichtig, den jeweiligen Typ zu erkennen, um gezielt gegenzusteuern:
Globale Rate Limits
Limit: 50 Anfragen pro Sekunde über die meisten Endpunkte hinweg
Gültigkeitsbereich: Gilt für deine gesamte Anwendung
Erkennung: Achte auf X-RateLimit-Scope: global
in den Antwort-Headern
Routenbasierte Rate Limits
Limit: Variiert je nach Endpunkt
Gültigkeitsbereich: Gilt nur für eine bestimmte API-Route
Erkennung: Achte auf X-RateLimit-Scope: user
Ressourcenspezifische Rate Limits
Hinweis: Ressourcenspezifische Rate Limits können durch mehrere Quellen ausgelöst werden (andere Nutzer, Bots, Webhooks usw.) und bedeuten nicht zwangsläufig, dass deine Anwendung allein dafür verantwortlich ist.
Limit: Unabhängige Limits für bestimmte Server, Kanäle oder Webhooks
Gültigkeitsbereich: Gilt für Aktionen auf bestimmten Ressourcen
Erkennung: Achte auf X-RateLimit-Scope: shared
in den Headern
Limits für ungültige Anfragen
Limit: 10.000 ungültige Anfragen in 10 Minuten
Häufige Ursache: Nicht behandelte Fehler (401, 403 oder 429), die zu einem Anstieg der Anfragen führen. Bitte beachte: 429-Fehler mit dem Header X-RateLimit-Scope: shared
zählen nicht zu diesem Limit.
Folge: Temporäre Sperre durch Cloudflare
So findest du heraus, welche Rate Limits du triffst
Der zuverlässigste Weg, um herauszufinden, welches Limit du überschreitest, ist das Überprüfen der HTTP-Antwort-Header, wenn du einen 429-Statuscode erhältst. Wichtige Header sind:
X-RateLimit-Limit
: Das maximale Anfrage-Limit für diesen Endpunkt
X-RateLimit-Remaining
: Verbleibende Anfragen im aktuellen Zeitfenster
X-RateLimit-Reset
: Zeitpunkt (Unix-Timestamp), zu dem das Limit zurückgesetzt wird
X-RateLimit-Reset-After
: Sekunden bis zum Zurücksetzen des Limits
X-RateLimit-Scope
: Gibt an, welcher Limit-Typ zutrifft (global, user oder shared)
retry_after
: Millisekunden, die du warten musst, bevor du eine neue Anfrage stellst
Best Practices im Umgang mit Rate Limits
Backoff-Strategien korrekt umsetzen
Beachte immer den retry_after
-Wert in Rate-Limit-Antworten. Dieser zeigt dir genau, wie lange du warten musst, bevor du es erneut versuchen kannst.
Verwende möglichst Interaktionen
Anwendungsbefehle und Nachrichtenkomponenten sind eine hervorragende Alternative zu Prefix-Befehlen, da sie übermäßige API-Anfragen und Nachrichten in Kanälen vermeiden können.
Extra-Tipp: Mach deine Antwort- und Folge-Nachrichten über Interaktionen am besten flüchtig (ephemeral), da sie nicht zum Rate-Limit zählen.
Daten effektiv cachen
Verringere API-Aufrufe, indem du häufig benötigte Daten zwischenspeicherst, zum Beispiel:
- Informationen zu Servern (Guilds)
- Kanal-Details
- Benutzerprofile
- Rollendaten
Anfragen drosseln (Throttling)
Throttling ist ein proaktiver Ansatz zur Vermeidung von Rate-Limits, indem du die Geschwindigkeit deiner Anfragen kontrollierst, bevor du ein Limit erreichst.
Wenn dein Bot zum Beispiel Willkommensnachrichten an 200 neue Mitglieder senden soll, dann schicke nicht alle 200 Nachrichten sofort raus, sondern lege sie in eine Warteschlange, die alle 100 Millisekunden 4 Anfragen freigibt. Damit erreichst du eine gleichmäßige Rate von 40 Anfragen pro Sekunde, bleibst unter dem 50er-Limit und alle Nachrichten sind in etwa 5 Sekunden versendet.
Globale Rate-Limits
Wenn du globale Rate-Limits erreichst, liegt möglicherweise ein grundlegendes Problem in deinem Code vor, das behoben werden sollte.
Hier sind ein paar Tipps, wie du deinen Code optimieren kannst, um innerhalb der Limits zu bleiben:
- Richtiges Caching implementieren
- Auf Interaktions-basierte Funktionen umsteigen
Wenn diese Lösungen dein Problem mit globalen Rate-Limits nicht beheben, empfehlen wir dir, dich im Discord Developer Server im Channel #api-help
zu melden oder den Developer Support zu kontaktieren.
Gateway-Überlegungen und Sharding
Wenn dein Bot über Discords Gateway (WebSocket-Verbindung) Echtzeitereignisse verarbeitet, wird Sharding wichtig, sobald dein Bot wächst.
Was ist Sharding?
Beim Sharding wird dein Bot in mehrere Instanzen aufgeteilt, wobei jede Instanz einen Teil der Server (Guilds) verwaltet. Dadurch wird die Last auf mehrere WebSocket-Verbindungen verteilt, was hilft, innerhalb der Rate-Limits zu bleiben.
Wir empfehlen dir, mit der Planung für Sharding zu beginnen, sobald dein Bot sich 2.000 Servern nähert – ab 2.500 Servern muss Sharding aktiviert sein. Für optimale Leistung gilt die Faustregel: etwa 1 Shard pro 1.000 Server.
Vergiss nicht: Rate-Limits sind dazu da, eine stabile Nutzererfahrung für alle Discord-Nutzer zu gewährleisten. Wenn du diese Best Practices befolgst, kannst du einen Bot bauen, der effizient skaliert und gleichzeitig die Limits respektiert.