Боты · Discord

Discord-бот онлайн, но не читает сообщения: проверка intents

Проверьте intents Discord-бота в коде и Developer Portal, отделите права канала от событий Gateway и разберите код закрытия 4014.

Статус онлайн не означает, что Discord присылает боту все сообщения. События Gateway выбираются через intents в коде приложения, а привилегированные intents дополнительно разрешаются в Developer Portal. Отдельно действуют права роли и конкретного канала: разрешение получать событие не даёт права отправлять ответ.

Объёмная синяя композиция с сообщениями — работа бота на сервере.

Проверка событий и прав Discord

  1. Определите, какое действие не работает

    Проверьте простой сценарий в одном тестовом канале: сообщение с текстовым префиксом или slash-команду. Это разные механизмы. Если slash-команда отвечает, а обработчик обычного текста молчит, не меняйте токен наугад: сначала проверьте подписку на сообщения и доступ к их содержимому.

  2. Сверьте запрос в коде

    Найдите создание Discord-клиента и перечисление intents в своей библиотеке. Для обработки сообщений сервера нужны соответствующие события, а для чтения произвольного текста обычно нужен Message Content Intent. Синтаксис зависит от библиотеки и её версии; копируйте пример именно из установленной версии, а не из старого руководства.

  3. Разрешите необходимый privileged intent

    В Developer Portal откройте своё приложение, раздел Bot и настройки Privileged Gateway Intents. Разрешите только используемые кодом привилегированные события. Для приложения, которому требуется одобрение Discord, одного переключателя недостаточно. Запрос неразрешённого privileged intent может закрывать Gateway-соединение с кодом 4014.

  4. Проверьте канал обычным сценарием

    Проверьте доступ бота к каналу и право отправлять сообщения с учётом переопределений ролей. Не выдавайте Administrator для исправления одной команды. Загрузите изменённый код, перезапустите сервер в панели и повторите исходный тест. Смотрите журнал самого бота: панель не определяет корректность его Discord-настроек.

Не проверяйте доступ к содержимому только в личном чате или сообщением с упоминанием бота: для Message Content существуют исключения, и такой опыт может скрыть проблему в обычном канале. Для диагностики достаточно записывать тип события и наличие текста, не сохраняя сами сообщения пользователей в журнал.

Успешная проверка — бот получает нужное событие, выполняет обработчик и отвечает в выбранном канале после повторного запуска. Если вы проектируете новые команды, рассмотрите slash-команды: они не требуют чтения произвольного текста чата. Получать такие взаимодействия можно через Gateway; отдельный публичный webhook-адрес для этого не обязателен.

Читайте дальше

Боты

Как загрузить Telegram-бота и запустить его

Как запустить своего бота Telegram или Discord: заказ сервера с готовым шаблоном, загрузка кода файловым менеджером, токен от BotFather и первая строка в консоли.

Боты · разбор

Почему бот не запускается

Что делать, если бот не запускается: разбор по строкам консоли — от ненайденного файла запуска до нехватки памяти — и кто именно каждый из этих случаев чинит.

Боты · токен

Как безопасно хранить токен бота

Что даёт чужому человеку токен вашего бота, почему его нельзя держать в коде и в публичном репозитории и как отозвать и заменить его, если он уже утёк.

Боты · зависимости

Как закрепить зависимости бота, чтобы перезапуск не ломал код

Закрепите зависимости бота в requirements.txt или package-lock.json, учтите devDependencies и проверьте обновления библиотек до загрузки.

Боты · Telegram

Ошибка 409 Conflict у Telegram-бота: второй polling или старый webhook

Оставьте один процесс получения обновлений, проверьте прежний webhook и восстановите ответы бота без потери очереди сообщений.