[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。
ただいまコメントを受けつけておりません。
数か月前に Discord の API のドメインが discordapp.com から discord.com に変更された。古いドメインは11月上旬に廃止されるとのことだ。7月中旬に以下のような DM が bot を持っている人には送られてきており、通知されている。
Last month, we excitedly announced our official move to discord.com. It was a long time in the making, and the work isn't done yet! For now, our API will continue to handle requests made to discordapp.com. On November 7, 2020 we will be dropping support for the discordapp.com domain in favor of discord.com. Please ensure that your libraries, bots, and applications are updated accordingly.
Due to technical constraints, our CDN domain will not be migrated and will remain cdn.discordapp.com for the foreseeable future.
しかし、Using DiscordBot from React app · Issue #2078 · discord/discord-api-docsを見る限りブラウザからは普通の手段では新しい Discord の API が持つドメイン(discord.com) を使って Discord の API を叩くことはできなくなったようだ。以下にざっと Using DiscordBot from React app · Issue #2078 · discord/discord-api-docs を翻訳したものを載せる。
mashovozka 09/15
React 製のアプリから Discord にログインしようとしているんだけど、403エラーが返ってきます。この原因がわかりません。他のアプリからだと上手くログインできています。何かご存知の方はいらっしゃいませんか?
Taarek 09/15
403エラーのレスポンスに含まれている JSON はなんといってますか?
多分 UserAgent が上手く入っていないと思います。
mashovozka 09/15
ありがとうございます!返ってきた JSON にはFailed to load response data
とありました。なお、token を再生成して試してみましたが上手くいきませんでした。UserAgent が上手く入ってない、というのはどういう意味でしょうか?
Taarek commented 09/15
https://discord.com/developers/docs/reference#user-agent を確認してみてください。Discord または CloudFlare がリクエストをはじいていると思われます。
(あまり本題と関係ないので省略)
mashovozka 09/15
You need to follow this https://discord.com/developers/docs/reference#user-agent otherwise Discord/CloudFlare might deny your request(s).
Taarek さん、リンクの共有ありがとうございます。私は以下のように Discord にリクエストを送っています。
// token は本当の値とは違う値を使っています bot.login("NzU1MzIxMDc1Nzg0NjEzOTI4.X2BlkQ.NM16N7hOajUhqca9FPdSvbxgGs4");
UserAgent を追加する必要があるようですが、ユーザエージェントはDiscordBot ($url, $versionNumber)
というフォーマットのようでした。私はリクエストに UserAgent をどのように記載するべきなのでしょうか? また、この $versionNumber
はどこの値を入れるべきなのでしょうか?
night 09/24
ブラウザがもつ UserAgent の情報は変更できないため、ブラウザから Discord に接続するのは無理でしょう。なんらかのサーバサイドサービスを用意する必要があります。
(以下はあまり本題と関係ないので省略)
確かにブラウザの User Agent の設定を変更してリクエストしてみたら問題なくサーバに接続できた(【JavaScript】ユーザーエージェントの取得と変更 - Qiita)。しかしエンドユーザにこれを要求するのは現実的ではない。また、User Agent を JavaScript から偽造することはできない。
ただいまコメントを受けつけておりません。