게이트웨이 인텐트
인텐트는 op:2 Identify에서 보내는 비트필드로, 게이트웨이에 어떤 이벤트 범주를 봇에 전달할지 알려 줍니다. 비트와 의미가 Discord와 같습니다. 기존 인텐트 설정이 그대로 동작합니다.
인텐트 비트
더 이상 쓰이지 않는 것을 제외한 Discord의 모든 인텐트 비트를 GameVox에서 지원합니다. GameVox에 아직 없는 기능(스테이지 채널, 예약 이벤트 등)의 경우 비트는 받아들이지만 이벤트는 발생하지 않습니다. 라이브러리에서 오류가 나지도 않습니다.
| 인텐트 | 비트 | 특권 | 이벤트 |
|---|---|---|---|
| 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 | 받아들이지만 아직 이벤트는 없습니다 |
특권 인텐트
Discord에서는 세 인텐트가 특권으로 분류되며, 봇이 서버 100개를 넘으면 수동 승인이 필요합니다: GUILD_MEMBERS, GUILD_PRESENCES, MESSAGE_CONTENT.
GameVox에서는 애플리케이션의 Bot 탭에서 켜면 세 가지 모두 자동으로 승인됩니다. 이 토글이 있는 이유는, 포털 쪽 승인 여부를 확인하는 라이브러리가 4014 Disallowed intents로 연결을 끊지 않도록 하기 위해서입니다. 서버 100개 기준의 심사 절차는 없습니다. 토글을 켜고 비트를 세우면 끝입니다.
MESSAGE_CONTENT의 예외
Discord와 정확히 같습니다. MESSAGE_CONTENT가 없어도 다음 경우에는 메시지의 content / embeds / attachments / components가 포함됩니다.
- 메시지가 자신의 봇에서 온 것일 때(자신의 메시지에는 항상 본문이 포함됩니다).
- 메시지가 봇을 멘션했을 때(ID로).
- 메시지가 봇과의 DM에 있을 때.
- 메시지가 봇이 수신자인 인터랙션의 응답일 때.
아직 발생하지 않는 이벤트(인텐트는 수용)
아래 인텐트를 켜도 문제는 없지만(와이어에서 받아들이고 라이브러리에서 오류도 나지 않습니다) 현재는 이벤트가 게시되지 않습니다. 봇 로직이 이에 의존한다면 당분간 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: 개발자 포털에서 해당 토글을 켜지 않고 특권 인텐트 비트를 설정했습니다.
예: 인텐트 설정
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)