Интенты шлюза
Интенты это битовое поле, которое вы отправляете в op:2 Identify, чтобы сообщить шлюзу, какие категории событий отправлять вашему боту. Биты и их смысл такие же, как в Discord. Ваша текущая конфигурация интентов работает без изменений.
Биты интентов
В GameVox поддерживаются все неустаревшие биты интентов Discord. Если функции в GameVox пока нет (например, Stage-каналов или запланированных событий), бит принимается, но события не приходят. Ваша библиотека не выдаст ошибку.
| Интент | Бит | Привилегированный | События |
|---|---|---|---|
| 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, выгрузка участников по частям (chunking) |
| 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 | MESSAGE_* в ЛС | |
| DIRECT_MESSAGE_REACTIONS | 1 << 13 | MESSAGE_REACTION_* в ЛС | |
| DIRECT_MESSAGE_TYPING | 1 << 14 | TYPING_START в ЛС | |
| MESSAGE_CONTENT | 1 << 15 | ✓ | Добавляет content, embeds, attachments, components в MESSAGE_* |
| GUILD_SCHEDULED_EVENTS | 1 << 16 | Принимается, событий пока нет | |
| AUTO_MODERATION_CONFIGURATION | 1 << 20 | Принимается, событий пока нет | |
| AUTO_MODERATION_EXECUTION | 1 << 21 | Принимается, событий пока нет |
Привилегированные интенты
В Discord три интента привилегированные и требуют ручного одобрения, когда бот есть на 100+ серверах: GUILD_MEMBERS, GUILD_PRESENCES и MESSAGE_CONTENT.
В GameVox все три одобряются автоматически, когда вы включаете их на вкладке Бот приложения. Переключатель существует для того, чтобы библиотеки, которые проверяют одобрение на стороне портала, не закрывали соединение с 4014 Disallowed intents. Никакой верификации на 100 серверов для получения доступа нет. Включите переключатель, установите бит, готово.
Исключения для MESSAGE_CONTENT
Точно как в Discord. Даже без MESSAGE_CONTENT поля сообщения content / embeds / attachments / components передаются, если:
- Сообщение отправлено вашим ботом (собственные сообщения всегда содержат текст).
- Сообщение упоминает вашего бота (по ID).
- Сообщение находится в ЛС с вашим ботом.
- Сообщение является ответом на взаимодействие, получатель которого ваш бот.
События, которые пока не отправляются (но интенты принимаются)
Включать следующие интенты безопасно (протокол их принимает, и библиотека не выдаст ошибку), но сейчас события по ним не публикуются. Если логика вашего бота зависит от них, пока опрашивайте 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)