Discordのゲートウェイインテント:ボットが聞いてよいもの
ゲートウェイインテントは、ボットが接続するときに宣言するオプションで、どのグループのライブイベントを受け取りたいかをDiscordに伝えます。 インテントを要求しなかったボットは、単にそれらのイベントを聞けません。これにより、データは非公開に、通信量は小さく保たれます。
ゲートウェイとは
ボットは、Discordとの常時接続を保ちます。これをゲートウェイと呼びます。その接続を通じて、Discordはイベントが起きるたびに押し出します。メッセージが送られた、メンバーが参加した、誰かが入力を始めた、ボイスチャンネルが変わった、などです。制限がなければ、すべてのボットがすべてのサーバーのすべてのイベントを受け取ることになります。
インテントはフィルターです。ボットは接続後に最初に送るメッセージで、欲しいインテントを一つの数として並べます。するとDiscordは、一致するイベントだけを送ります。
よくあるインテント
- Guilds(ギルド):サーバー、チャンネル、ロールの作成や変更。ほとんどすべてのボットが使います。
- Guild messages:サーバーのチャンネルのメッセージ。それらのメッセージの本文には、下で説明する特権インテントが必要です。
- Guild voice states:誰がボイスチャンネルに参加したか退出したか。音楽やボイスのツールには必要です。
- Guild moderation:BANと監査ログの記録。
- Guild message reactions:追加または削除されたリアクション。
三つのインテントは特別です。プレゼンス、サーバーメンバー、メッセージ内容です。それらは特権インテントで、より多くの個人データを扱うため、大きなボットでは追加の承認が必要です。
サーバーのオーナーにとっての意味
ボットがオンラインなのに、メッセージ、参加、ボイスの変化を無視する場合、インテントの欠如がよくある原因です。また、ボットが設定で有効になっていない特権インテントを求めたときに、エラーコード4014で切断された理由も説明できます。ボットがオフラインになるゲートウェイのエラー4004と4014の記事がそれを扱っています。
インテントは、プライバシーのシグナルでもあります。機能に必要なものだけを求めるボットは、信頼しやすくなります。
インテントとNoxyr
メインのNoxyrのボットは、あなたのために管理されています。自分のアプリケーションでカスタムボットを設定する場合は、設定ガイドにあるとおり、Discord Developer Portalでサーバーメンバーのインテントとメッセージ内容のインテントをオンにしなければなりません。それらは、ようこそメッセージや接頭辞のコマンドのような機能に必要です。カスタムボットがオフラインなら、ボットがオフラインのガイドから始めてください。
詳しくは、特権ゲートウェイインテントの解説をご覧ください。
自分で書いていないボットを確認する
インストールしたボットの振る舞いがおかしければ、どのインテントを使い、なぜ使うのかを、開発者に尋ねてください。よいボットは、ドキュメントにそれを挙げています。自分のボットなら、Developer Portalを開き、Botのページで、そのスイッチとコードが求めるものを比べてください。不一致が、最初に直すべきものです。
よくある質問
ボットがインテントを要求しないと、何が起きますか?
Discordは、それに一致するイベントを送りません。ボットはオンラインのままですが、それらのことには反応できません。
自分のボットのインテントは、どこでオンにしますか?
Discord Developer Portalで、アプリケーションを開き、Botに進んで、必要な特権インテントをオンにしてください。
すべてのインテントが特権ですか?
いいえ。特権なのは、プレゼンス、サーバーメンバー、メッセージ内容だけです。残りは自由に使えます。