Discordのレート制限:ボットが減速させられる理由
レート制限とは、ボットやユーザーが短時間に送れるリクエストの数に対する、Discordの上限です。 ボットがそれを超えると、Discordは、HTTP 429エラーと待ち時間で応答し、ボットは再試行する前に一時停止しなければなりません。
制限の適用のされ方
ボットが行うすべての操作は、Discord APIへのリクエストです。メッセージの送信、ロールの追加、チャンネルの編集などです。Discordはリクエストをバケットごとに数えます。通常はルートごとで、時にはサーバーやチャンネルごとです。ボットには、毎秒約50リクエストというグローバルな上限もあります。
応答には、残りのリクエストの数と、バケットがいつリセットされるかを示すヘッダーが含まれます。よく書かれたボットはそれを読み、ブロックされる前に減速します。それでも超えた場合、429の応答には、何秒待つべきかを示すRetry-Afterの値が含まれます。
気づく理由
- 多くのメッセージを削除したり、多くのロールを変えたりする大量の操作は、意図的に遅くされます。
- 短時間にチャンネル名やトピックを繰り返し変えると、チャンネルごとに制限されます。
- 多くのリアクションを付けたり、メッセージを連続して送ったりすると、短い一時停止が起きます。
メンバーにとっては、これはエラーではなく、応答の遅いボットに見えます。それはシステムが仕事をしている状態です。
深刻な版:一時的なBAN
アプリが、十分の間に数千の401、403、429の応答のような、悪いリクエストを多く送ると、Discordは、Cloudflareの層で、そのIPアドレスを一定時間ブロックすることがあります。共有のマシンでホストされたボットは、サーバーに問題がなくても、そのために失敗することがあります。待つことだけが解決策です。
余分なアカウントやスクリプトでレート制限を回避しようとしないでください。それらはプラットフォームを守るために存在し、回避はBANのリスクになります。
オーナーにできること
- 大きな作業は、一度に全部行わず、分散させてください。
- タイマーでチャンネル名を変えるのは避けてください。
- リクエストをキューに入れ、制限を守るボットを選んでください。
レート制限とNoxyr
Noxyrのサーバーログは、チャンネルごとに数秒に一回まで、一度に十件まで投稿されるので、レイドや大きな一括削除がログのチャンネルをあふれさせることはありません。これはサーバーログのドキュメントに説明があります。Noxyr自身のライブチャットの送信も、あふれを止めるために制限されています。カスタムボットには関連するルールもあります。新しいホストに移るたびに、新しいDiscordへのログインになるので、移動の間には五分の待ち時間があります。カスタムボットのホスティングをご覧ください。
レート制限は、大きなボットに接続を分散させることも促します。シャーディングをご覧ください。ボットが止まっているように見えたら、まずステータスとpingのページを確認してください。
よくある質問
DiscordでHTTP 429は何を意味しますか?
リクエストが多すぎるということです。Discordは、再試行する前にRetry-Afterの値の時間だけ待つよう、ボットに伝えています。
レート制限はBANですか?
いいえ。短い一時停止です。繰り返される乱用だけが、より長い一時的なブロックにつながることがあります。
大きな掃除の間、なぜ私のボットの返信が遅いのですか?
一括の操作はDiscordによってレート制限されるので、ボットはそれらを分散させなければなりません。