Боты · разбор

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

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

Бот не поднялся, и единственное достоверное свидетельство о причине — строки консоли. ⏱️ Разбор занимает минут пять. Главное, что он даёт, — понимание, ЧЬЯ это ошибка: часть случаев чинится тарифом, часть настройками, и только часть кодом.

Откройте вкладку «Консоль» и включите фильтр «Ошибки». Найдите свою строку в первой колонке таблицы и переходите к её разделу.

Все причины одной таблицей

Что в консолиЧто случилосьЧем чинится
Файл … не найден. Загрузите код бота через файловый менеджерЗапускать нечего: файла с таким именем в каталоге нетнастройками или пересборкой архива
ModuleNotFoundError, Cannot find moduleБиблиотека не установлена, а код её проситкодом: списком библиотек
No matching distribution, Failed building wheel, npm ERR!Установка библиотек упала, до кода дело не дошлокодом; иногда только переездом на VPS
TelegramUnauthorizedError, 401 Unauthorized, InvalidTokenПлатформа не приняла токеннастройками
Killed, out of memoryПроцесс сняли за выход за память тарифатарифом
No space left on device, ENOSPCНа диске кончилось местотарифом или уборкой в файловом менеджере
Трассировка, SyntaxError, TypeErrorОкружение поднялось, бот упал внутри своего кодакодом
Сервер поднимается и падает по кругу, потом замолкаетПанель остановила перезапускикодом, после разбора лога
Понятной строки нет вовсеРазобрать не удалосьпоследними строками перед остановкой

Файл запуска не найден

В консоли стоит наша собственная строка — единственная в этом разборе, чей текст написали мы: «Файл bot.py не найден. Загрузите код бота через файловый менеджер панели и запустите сервер снова.» Вместо bot.py в ней стоит то, что записано в поле «Файл запуска». Печатает её обёртка ещё до запуска кода: она проверяет файл заранее, чтобы вы читали объяснение по-русски, а не MODULE_NOT_FOUND от интерпретатора.

  • В поле «Файл запуска» написано не то. Путь считается от корня каталога сервера, поэтому main.py при коде внутри папки src — это ненайденный файл. Полное имя с папкой писать можно и нужно: src/main.py.
  • Архив распакован вместе со своей внешней папкой. В корне лежит одна папка my-bot, а файл запуска — внутри неё. Заодно это лишает бота и библиотек; разбор — в статье про загрузку бота.
  • Файл переименован или не доехал. Загрузка, прерванная закрытой вкладкой, оставляет в каталоге неполный файл или не оставляет ничего.

Не хватает библиотеки

ModuleNotFoundError: No module named у Python, Error: Cannot find module у Node.js. Значит, интерпретатор дошёл до import и не нашёл того, что просят. Библиотеки ставятся перед каждым запуском, а не при установке, — поэтому вопросов здесь два: есть ли библиотека в списке и виден ли сам список.

  • Библиотеки нет в requirements.txt или package.json. Допишите её и перезапустите сервер.
  • Списка нет вовсе. Тогда в консоли не было и строки [hcp] установка зависимостей: без файла списка установка не запускается.
  • Список лежит внутри вложенной папки. Для проверки в корне каталога сервера это то же самое, что его нет.
  • У Python есть свой подвох: pyproject.toml или Pipfile вместо requirements.txt. Язык по ним опознаётся, а установка включается только по requirements.txt — именно его проверяет стартовая команда.
  • Переключатель «Ставить зависимости при запуске» выключен, а библиотеки рядом не лежат.

Библиотеки не установились

Случай другой: до кода бота дело не дошло вовсе. Строки бывают разные — Could not find a version that satisfies, No matching distribution found, Failed building wheel for, npm ERR!, ERESOLVE could not resolve, — а смысл один: установка завершилась ошибкой, и запуск отменён. В логе видно, какая именно строка списка не встала.

  • Такой версии нет. Could not find a version означает, что запрошенной версии под наш Python не выпускали.
  • Библиотеке нужен компилятор. Failed building wheel — это попытка собрать её из исходников: готового пакета под образ не нашлось. Компилятора в контейнере нет, и поставить его туда некуда. Такой библиотеке нужен VPS, где системой распоряжаетесь вы.
  • Зависимости спорят между собой. ERESOLVE у npm — это несовместимые требования двух пакетов, и разрешает их только автор проекта.

Платформа не приняла токен

TelegramUnauthorizedError, Unauthorized, 401, InvalidToken — бот запустился, дошёл до подключения и получил отказ. Код здесь ни при чём: платформа не узнала токен. У Discord к этому же разряду относится DisallowedIntents — бот просит права, которые ему в портале разработчика не включили.

  • Токен отозван у @BotFather. Отзыв действует мгновенно, старая строка перестаёт работать сразу.
  • В поле лежит токен другого бота. Бывает у тех, у кого их несколько.
  • Токен вписан в код, а не взят из окружения. Тогда в панели он верный, а бот использует старую строку из своего файла.
  • Тот же токен уже работает на другой площадке. Обновления получит только один процесс, и какой именно — заранее неизвестно.

Заменить токен — в поле «Токен бота» во вкладке «Настройки игры». Сохранённое значение панель не покажет: под полем стоит «Сохранён. Введите новый, чтобы заменить». Пробел, кавычку или перевод строки форма не примет вовсе — в значении разрешены только буквы, цифры, точка, двоеточие, дефис и подчёркивание. После сохранения нужен перезапуск: токен уходит в окружение в момент старта.

Не хватило памяти

В консоли одно слово — Killed, без объяснений и часто среди пятнадцати строк чужой трассировки. Печатает его ядро, когда снимает процесс, вышедший за память тарифа. У Node.js вместо этого бывает строка про heap out of memory: V8 упирается в свой предел раньше ядра. Разницы для вас нет никакой — это одно и то же событие.

Кончилось место на диске

No space left on device или ENOSPC. Пока места нет, бот не запишет ни базу, ни кэш библиотек, а установка зависимостей падает самой первой. Посмотрите, что лежит в каталоге: логи, которые бот пишет сам, старые архивы, оставшиеся после распаковки, node_modules от прежней версии проекта. Всё это удаляется в файловом менеджере.

Бот падает по кругу

На ноде включён детектор падений: упавший сервер она поднимает заново, чтобы о падении вы узнали не из жалоб пользователей. Из этого следует важное: круг «работает — упал — работает» означает не случайную неудачу, а одну и ту же причину на каждом обороте. Пять падений за десять минут панель считает петлёй — перезапуски останавливаются на четверть часа, а сервер переходит в «Ошибку».

Схема круга: бот запустился, упал, нода подняла его заново — и так по кругу, пока причина падения остаётся на месте
Круг сам не разомкнётся. Пять оборотов за десять минут — и панель останавливает перезапуски на четверть часа: это пауза, чтобы вы успели прочитать лог, а не наказание за падения.

Читать при этом надо последние строки перед ПЕРВЫМ падением, а не перед последним: к пятому обороту лог забит одинаковыми попытками, а причина стоит в самом начале. Разобрались и поправили — запустите сервер кнопкой «Запустить», ждать конца паузы не обязательно.

Бот запустился и упал

Трассировка, SyntaxError, IndentationError, TypeError, ReferenceError, необработанное обещание — окружение поднялось, а ошибка произошла внутри кода. Панель здесь помочь не может и не притворяется, что может: последние строки лога называют файл и строку, на которых бот остановился, а дальше это обычная отладка.

Одну причину такого падения стоит проверить до всех остальных — версию. В контейнере стоит Python 3.12 или Node.js 22, то есть то, что записано в шаблоне. Код, который у вас на компьютере работает на другой версии, здесь может упасть на первой же строке незнакомого синтаксиса.

Ни одна строка не подошла

Бывает и так, и выдумывать причину в этом случае хуже, чем признать её отсутствие. Смотрите последние строки перед остановкой — там она обычно и стоит. Дальше идёт вкладка «Задачи»: она показывает всё, что панель делала с сервером, и по каждой записи видно, чем дело кончилось. Если задача давно висит в «Выполняется», во вкладке «Сервер» есть кнопка «Синхронизировать состояние» — она сверяет записанное в панели с тем, что видит нода, и файлов не трогает.

Сводка: кто что чинит

ЧинитсяЧто именноГде это делают
ТарифомНехватка памяти, кончившееся место на дискесменой тарифа на более крупный
Настройками сервераНенайденный файл запуска, непринятый токен, выключенная установка библиотеквкладка «Настройки игры»
ФайламиАрхив с внешней папкой, мусор и старые логи на дискевкладка «Файлы»
Только в кодеОтсутствующая библиотека, несобираемая библиотека, падение внутри ботау вас, и панель говорит это прямо