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

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

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

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

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

Подготовка воспроизводимого комплекта зависимостей

  1. Для Python сохраните проверенные версии

    В requirements.txt используйте точные версии библиотек, проверенные вашим проектом. Полный список фиксируют из отдельного окружения этого бота, чтобы не включить случайные пакеты других проектов. Проверьте также вложенные зависимости: закрепление только основной библиотеки не фиксирует весь комплект. Текущий шаблон запускает Python 3.12.

  2. Для Node.js загрузите lock-файл

    Положите package-lock.json рядом с соответствующим package.json в корень сервера. Формируйте их вместе локальной установкой зависимостей и храните вместе с рабочей версией кода. Панель запускает npm install с --omit=dev, поэтому библиотека, нужная работающему боту, должна быть в dependencies, а не только в devDependencies.

  3. Проверьте сборку до загрузки

    Если исходники требуют TypeScript или другого сборщика, подготовьте запускаемый JavaScript заранее либо предусмотрите собственный проверенный процесс сборки. Поле «Файл запуска» указывает файл для node или python; оно не превращается в npm-скрипт. Загрузка папки src сама по себе не создаёт отсутствующий dist/index.js.

  4. Бэкапы и файлы

    Обновляйте код и зависимости одним комплектом

    Сохраните бэкап, остановите бота и загрузите код вместе с его манифестом и lock-файлом. Не переносите node_modules или виртуальное окружение с другой операционной системы. После запуска прочитайте журнал установки до строки запуска приложения, затем проверьте реальную команду бота.

Отключение установки зависимостей ускоряет повторный запуск уже подготовленного проекта, но не заменяет фиксацию версий. После добавления библиотеки или восстановления на чистом окружении установку нужно снова включить. У Node.js шаблон использует npm install, а не npm ci: если манифест противоречит lock-файлу, npm может пересчитать зависимости. Проверяйте эту пару до выкладки.

Рабочий результат — бот проходит один и тот же проверочный сценарий после установки и повторного запуска. При неудаче возвращайте код вместе со списком зависимостей; восстановление одного скрипта может оставить несовместимую библиотеку. Файлы базы и пользовательские данные сохраняйте отдельно от обновляемой сборки и не заменяйте их пустыми примерами из архива проекта.

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

Боты

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

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

Боты · разбор

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

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

Боты · токен

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

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

Боты · Telegram

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

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

Боты · Discord

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

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