ゲートウェイ Intent
Intent は op:2 Identify で送るビットフィールドで、どのイベントカテゴリをボットに配信するかをゲートウェイに伝えます。ビットも意味も Discord と同一です。既存の Intent 設定はそのまま動きます。
Intent のビット
非推奨でない Discord の Intent ビットは、GameVox ですべて対応しています。GameVox にまだ機能がない場合(ステージチャンネル、予定イベントなど)、ビットは受け付けられますがイベントは発生しません。ライブラリがエラーになることもありません。
| Intent | ビット | 特権 | イベント |
|---|---|---|---|
| GUILDS | 1 << 0 | GUILD_CREATE, GUILD_UPDATE, GUILD_DELETE, CHANNEL_CREATE/UPDATE/DELETE, CHANNEL_PINS_UPDATE, GUILD_ROLE_CREATE/UPDATE/DELETE | |
| GUILD_MEMBERS | 1 << 1 | ✓ | GUILD_MEMBER_ADD, GUILD_MEMBER_UPDATE, GUILD_MEMBER_REMOVE、メンバーのチャンク取得 |
| GUILD_MODERATION | 1 << 2 | GUILD_BAN_ADD, GUILD_BAN_REMOVE。GUILD_AUDIT_LOG_ENTRY_CREATE は受け付けますが、イベントはまだありません | |
| GUILD_EMOJIS_AND_STICKERS | 1 << 3 | 受け付けますが、イベントはまだありません(現在の状態が必要なら REST で取得してください) | |
| GUILD_INTEGRATIONS | 1 << 4 | 受け付けますが、イベントはまだありません | |
| GUILD_WEBHOOKS | 1 << 5 | 受け付けますが、イベントはまだありません | |
| GUILD_INVITES | 1 << 6 | 受け付けますが、イベントはまだありません | |
| GUILD_VOICE_STATES | 1 << 7 | VOICE_STATE_UPDATE, VOICE_SERVER_UPDATE | |
| GUILD_PRESENCES | 1 << 8 | ✓ | PRESENCE_UPDATE |
| GUILD_MESSAGES | 1 << 9 | ギルド内の MESSAGE_CREATE/UPDATE/DELETE/DELETE_BULK | |
| GUILD_MESSAGE_REACTIONS | 1 << 10 | MESSAGE_REACTION_ADD, MESSAGE_REACTION_REMOVE。REMOVE_ALL / REMOVE_EMOJI は受け付けますが、イベントはまだありません(REST は利用可能) | |
| GUILD_MESSAGE_TYPING | 1 << 11 | ギルド内の TYPING_START | |
| DIRECT_MESSAGES | 1 << 12 | DM 内の MESSAGE_* | |
| DIRECT_MESSAGE_REACTIONS | 1 << 13 | DM 内の MESSAGE_REACTION_* | |
| DIRECT_MESSAGE_TYPING | 1 << 14 | DM 内の TYPING_START | |
| MESSAGE_CONTENT | 1 << 15 | ✓ | MESSAGE_* に content、embeds、attachments、components を追加します |
| GUILD_SCHEDULED_EVENTS | 1 << 16 | 受け付けますが、イベントはまだありません | |
| AUTO_MODERATION_CONFIGURATION | 1 << 20 | 受け付けますが、イベントはまだありません | |
| AUTO_MODERATION_EXECUTION | 1 << 21 | 受け付けますが、イベントはまだありません |
特権 Intent
Discord では 3 つの Intent が特権扱いで、ボットが 100 サーバーを超えると手動承認が必要になります: GUILD_MEMBERS、GUILD_PRESENCES、MESSAGE_CONTENT。
GameVox では、アプリケーションの Bot タブでオンにすると 3 つとも自動的に承認されます。このトグルがあるのは、ポータル側の承認を前提とするライブラリが 4014 Disallowed intents で接続を閉じないようにするためです。100 サーバーの審査プロセスはありません。トグルをオンにしてビットを立てれば完了です。
MESSAGE_CONTENT の例外
Discord とまったく同じです。MESSAGE_CONTENT がなくても、次の場合はメッセージの content / embeds / attachments / components が含まれます。
- メッセージが自分のボット自身のものである(自分のメッセージには常に本文が含まれます)。
- メッセージがボットをメンションしている(ID で)。
- メッセージがボットとの DM にある。
- メッセージがボット宛のインタラクションの応答である。
まだ発行されないイベント(Intent は受け付け)
次の Intent を有効にしても問題はありません(ワイヤー側で受け付けられ、ライブラリもエラーになりません)が、現時点ではイベントが発行されません。ボットのロジックがこれらに依存する場合は、当面 REST でポーリングしてください。
USER_UPDATEGUILD_EMOJIS_UPDATE,GUILD_STICKERS_UPDATEWEBHOOKS_UPDATE,INTEGRATION_CREATE/UPDATE/DELETE,INVITE_CREATE/DELETEGUILD_AUDIT_LOG_ENTRY_CREATEMESSAGE_REACTION_REMOVE_ALL,MESSAGE_REACTION_REMOVE_EMOJI(REST エンドポイントは利用可能)THREAD_*,STAGE_INSTANCE_*,GUILD_SCHEDULED_EVENT_*,AUTO_MODERATION_*,MESSAGE_POLL_*
セルフホストサーバーでは、さらに限られたサブセットのみが発行されます。正確な一覧はそのページをご覧ください。
発生しうるクローズコード
4013 Invalid intent(s): 有効なマスクを超えるビットが立っています(ライブラリのビット計算を確認してください)。4014 Disallowed intents: 開発者ポータルで対応するトグルをオンにせずに、特権 Intent のビットを立てています。
例: Intent の設定
discord.js
const { GatewayIntentBits } = require('discord.js');
const intents =
GatewayIntentBits.Guilds
| GatewayIntentBits.GuildMessages
| GatewayIntentBits.MessageContent; // 特権。先にポータルでトグルをオンにしてください
const client = new Client({ intents }); discord.py
intents = discord.Intents.default()
intents.members = True # 特権
intents.message_content = True # 特権
client = discord.Client(intents=intents)