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

Проверка событий и прав Discord
Определите, какое действие не работает
Проверьте простой сценарий в одном тестовом канале: сообщение с текстовым префиксом или slash-команду. Это разные механизмы. Если slash-команда отвечает, а обработчик обычного текста молчит, не меняйте токен наугад: сначала проверьте подписку на сообщения и доступ к их содержимому.
Сверьте запрос в коде
Найдите создание Discord-клиента и перечисление intents в своей библиотеке. Для обработки сообщений сервера нужны соответствующие события, а для чтения произвольного текста обычно нужен Message Content Intent. Синтаксис зависит от библиотеки и её версии; копируйте пример именно из установленной версии, а не из старого руководства.
Разрешите необходимый privileged intent
В Developer Portal откройте своё приложение, раздел Bot и настройки Privileged Gateway Intents. Разрешите только используемые кодом привилегированные события. Для приложения, которому требуется одобрение Discord, одного переключателя недостаточно. Запрос неразрешённого privileged intent может закрывать Gateway-соединение с кодом 4014.
Проверьте канал обычным сценарием
Проверьте доступ бота к каналу и право отправлять сообщения с учётом переопределений ролей. Не выдавайте Administrator для исправления одной команды. Загрузите изменённый код, перезапустите сервер в панели и повторите исходный тест. Смотрите журнал самого бота: панель не определяет корректность его Discord-настроек.
Не проверяйте доступ к содержимому только в личном чате или сообщением с упоминанием бота: для Message Content существуют исключения, и такой опыт может скрыть проблему в обычном канале. Для диагностики достаточно записывать тип события и наличие текста, не сохраняя сами сообщения пользователей в журнал.
Успешная проверка — бот получает нужное событие, выполняет обработчик и отвечает в выбранном канале после повторного запуска. Если вы проектируете новые команды, рассмотрите slash-команды: они не требуют чтения произвольного текста чата. Получать такие взаимодействия можно через Gateway; отдельный публичный webhook-адрес для этого не обязателен.