普段からReplitでBotをホストしているのですが、無料だと共通シャードなだけあって、たまーにレート制限にかかってることがあります。
おそらく同じシャードで動いてる誰かのプロジェクトが無茶したんでしょうが、自分のBotに影響されるのは少し困る場合もあるでしょう。
そんな時に、①あとどれくらいで解除されるのかを調べる方法と、②もし仮にdiscord.jsを使ったコーディング/デバッグ中にこの問題に当たってしまった時の応急処置策を備忘録代わりに書いておきます。
①レート制限の時間を調べる
レート制限がかかると、botがオフラインになってしまい、特に制限のときを考えていないBOTだと、エディタからだとレート制限にかかってることも分からないというのが事実です。
そんな時に「本当にレート制限に引っかかっているのか」「レート制限はあとどれくらいなのか」を調べる方法があります。
それはreplitのターミナル機能を使用すると可能です。
ターミナルを開いた状態で、次のコマンドを入力します。
curl -v https://discord.com/api/v9
すると、なにやらテキストが沢山出力されますが、必要なのはHTTP/2のあとです。
画像の場合HTTP/2のあとは、404となっています。
これがレート制限がかかっていると429となります。429は、HTTPのステータスコードのひとつで、Too Many Requestsという意味です。
くわしくはMozillaの記事を参照してください。
そして、肝心の「あとどれくらいで解除されるのか」は、HTTP/2の行の下にあるretry-after:のあとを見ると分かります。
429の時にはretry-afterが着いていると思います。その後の数字が解除までの時間です。
単位は秒です。
②開発中の応急的対処
new Client({ intent: [/*インテント*/], http: { api: "https://canary.discord.com/api" } })
後で気づいたのですがCanaryもPTBもWebSocketの接続先はws://gateway.discord.ggですね
なのでこの対処策はWebhookしか使えません
終わりに
役立つかなあと思ってまとめておきました
参考にしてみてください
では(* ˙꒳˙ * )
コメント
コメントを投稿
コメントを自由に追加することができます。
スパムコメント等は削除いたしますのでご了承ください。