ACLClouds
ACLClouds

Discord бот офлайн: причины и как их устранить

Отклонённый токен, запрещённые intents, сбой, DNS, лимиты запросов или спящий режим: как прочитать ошибку бота Discord и вернуть его в онлайн.

Бот Discord уходит в офлайн по пяти основным причинам: программа остановилась, токен отклонён, intent не разрешён, сеть не достаёт до Discord или хостинг перевёл бота в спящий режим. Консоль бота почти всегда показывает, какая именно: ниже описано, как прочитать сообщение и исправить каждый случай.

  • Читайте первую ошибку в консоли: следующие часто являются её следствием.
  • Ошибка 401 или 4004 означает, что токен отклонён: сгенерируйте новый через Reset Token.
  • Код 4014 означает, что нужно включить привилегированный intent в Developer Portal.
  • Код выхода 137 обычно означает превышение памяти.

Прочитайте первую ошибку

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

  • Бот вообще не запускается: зависимость, файл или версия.
  • Бот запускается, затем отключается: токен, intents или сеть.
  • Бот остаётся подключённым, но не отвечает: ошибка в команде или лимит запросов.

Токен отклонён или сброшен

Ошибка 401 или код закрытия 4004 (Authentication failed) означает, что Discord отклоняет токен. Его могли сбросить в Developer Portal или сам Discord, если токен был опубликован, например в публичном репозитории GitHub. Сгенерируйте новый токен через Reset Token, замените его в переменной DISCORD_TOKEN и перезапустите бота.

  • Копируйте токен со страницы Bot, а не ID приложения и не секрет клиента.
  • Удалите пробелы и кавычки вокруг значения.
  • Храните токен вне кода, как описано в руководстве о том, как хранить токены и секретные переменные.

Запрещённые intents

Код закрытия 4014 (Disallowed intent(s)) появляется, когда код запрашивает привилегированный intent, не включённый в Developer Portal: Message Content, Server Members или Presence. Включите его на вкладке Bot или уберите из кода, если он боту не нужен. Если бот есть на более чем 100 серверах, для этих intents нужно ещё и одобрение Discord.

  • discord.py: intents.message_content = True должно совпадать с настройкой на портале.
  • discord.js: GatewayIntentBits.MessageContent подчиняется тому же правилу.
  • Слэш-команды работают без Message Content.

Сбой, память и зависимости

Если программа останавливается, бот останавливается вместе с ней. Cannot find module или ModuleNotFoundError указывает на зависимость, которой нет в package.json или requirements.txt. Остановка с кодом 137 обычно означает, что бот превысил лимит памяти: слишком большой кеш, утечка или воспроизведение звука. Необработанное исключение в обработчике события тоже может остановить процесс.

  • Пошаговые исправления: модуль Node.js не найден и модуль Python не найден.
  • Превышение памяти: руководство по коду выхода 137.
  • Оберните каждую команду в try/catch (Node.js) или try/except (Python), который записывает ошибку в логи.

Сеть, DNS и лимиты запросов

getaddrinfo EAI_AGAIN или ECONNRESET указывает на сбой DNS или сети между ботом и Discord. discord.js и discord.py сами переподключаются к gateway; если ошибка повторяется, запишите время и передайте его хостингу. Ответ 429 означает лимит запросов: бот отправляет слишком много вызовов, часто в цикле. Discord также временно блокирует IP-адрес, с которого идёт много недействительных запросов, 10 000 за 10 минут, например с отклонённым токеном.

  • Не перезапускайте бота в цикле с недействительным токеном: каждая попытка считается недействительным запросом.
  • Оставьте обработку ответов 429 библиотеке: discord.js и discord.py ждут задержку, указанную Discord.
  • Не меняйте роли или сообщения многих участников в одном цикле.

Спящий режим и окончание срока

Некоторые бесплатные хостинги останавливают неактивного бота или после исчерпания квоты часов: проверьте условия своего тарифа. На тарифе Free от ACLClouds бот не переводится в спящий режим: он останавливается, только если не выполнено бесплатное продление на 4 дня. Следующая дата окончания указана на карточке услуги.

  • Бот, запущенный у вас дома, тоже останавливается вместе с компьютером или роутером.
  • Чтобы бот работал без перерывов, следуйте нашему руководству о том, как разместить бота Discord 24/7.

Почему ACLClouds для этого бота

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

  • Консоль и логи в реальном времени в панели, в том числе на бесплатном тарифе.
  • Отдельный доступ по SFTP для каждого бота (порт 2222), в том числе на бесплатном тарифе.
  • Тариф Free без спящего режима, бесплатное продление каждые 4 дня: следуйте руководству для Python и Node.js.

Часто задаваемые вопросы

Почему мой бот офлайн, хотя код не менялся?

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

Что означает ошибка 4014?

Бот запрашивает привилегированный intent (Message Content, Server Members или Presence), который не включён на вкладке Bot в Developer Portal. Включите его или уберите из кода.

Как узнать, что мой токен утёк?

Обычный признак: внезапная ошибка 401 или 4004 без каких-либо изменений с вашей стороны. Сгенерируйте новый токен через Reset Token и проверьте, что его нет ни в одном публичном репозитории.

Бот онлайн, но не отвечает: что проверить?

Проверьте, что слэш-команды синхронизированы, что у бота есть права в канале и что для команд с префиксом включён intent Message Content. Затем прочитайте ошибки, которые появляются при каждой команде.