Discord-бот живёт ровно столько, сколько работает процесс, который его запустил. Пока у вас открыт терминал на домашнем компьютере, бот в сети и отвечает на команды; закрыли ноутбук, ушли в спящий режим, пропал Wi-Fi — и в списке участников он гаснет, хотя пользователи продолжают писать. Обычно это решают арендой VPS: ставить окружение, настраивать автозапуск, следить, чтобы процесс не падал, и платить за сервер каждый месяц. Разбираем, как поднять Discord-бота без сервера и администрирования: код загружается в Dockbox, а постоянную работу контейнера платформа берёт на себя.
Чем Discord-бот отличается от Telegram-бота
Discord-бот подключается к Gateway — постоянному соединению с серверами Discord, через которое приходят события о новых сообщениях и командах. Значит, нужен процесс, который живёт непрерывно: разорвалось соединение — бот молчит. Telegram в этом смысле устроен похоже, но у Discord есть свои детали, которые чаще всего и ломают деплой.
Библиотека задаёт язык проекта. Для Node.js это discord.js, для Python — discord.py (или его форки вроде nextcord). От этого зависит файл зависимостей, который вы положите в проект.
Есть привилегированные интенты. Без них бот подключается, но не видит содержимое сообщений — об этом ниже, потому что это самая частая причина «бот в сети, но не отвечает».
Свой хостинг искать придётся. Сам Discord бесплатен, а вот место для круглосуточного процесса — нет: либо аренда сервера, либо платформа для деплоя. На Dockbox контейнер работает постоянно: ни лимита по времени, ни засыпания при простое здесь нет.
Шаг 1. Получите токен в Developer Portal
Откройте Discord Developer Portal, создайте приложение и перейдите на вкладку Bot. Токен выдаётся кнопкой Reset Token — это ключ доступа к боту, длинная строка вида:
MTIzNDU2Nzg5MDEyMzQ1Njc4.Gh1jkL.abc...
Сохраните его отдельно и никому не показывайте. Тот, у кого есть токен, управляет ботом от вашего имени и читает переписку в его каналах. Если токен случайно утёк, нажмите Reset Token ещё раз — старый сразу перестанет работать.
Тут же, на вкладке Bot, включите Message Content Intent в разделе Privileged Gateway Intents — без него бот не получит текст сообщений. А чтобы пригласить бота на сервер, соберите ссылку на вкладке OAuth2 → URL Generator: отметьте область bot (и applications.commands, если используете слэш-команды), выберите нужные права и откройте получившийся адрес.
Шаг 2. Соберите проект и вынесите токен из кода
Соберите бота в одну папку и положите рядом файл зависимостей: package.json для Node.js или requirements.txt для Python. Папку node_modules и виртуальное окружение включать не нужно — платформа поставит зависимости сама.
discord.py==2.4.0
python-dotenv==1.0.1
Дальше главное: токен должен читаться из переменной окружения, а не лежать в коде. Так делает почти любой сгенерированный код — и так его нельзя оставлять:
TOKEN = "MTIzNDU2Nzg5...Gh1jkL.abc"
client.run(TOKEN)
Правильный вариант — значение приходит снаружи, из окружения:
import os
TOKEN = os.environ["DISCORD_TOKEN"]
client.run(TOKEN)
Для Node.js то же самое через process.env.DISCORD_TOKEN. Код вы наверняка будете показывать или заливать в Git, а токен в коде — это токен в репозитории.
Шаг 3. Загрузите проект в Dockbox
Загрузите папку ZIP-архивом или импортируйте репозиторий из GitHub — приватный тоже подойдёт. Писать Dockerfile не нужно: платформа сама определит язык, установит зависимости и соберёт проект. Порт указывать не надо — Discord-бот с подключением к Gateway входящие запросы не слушает, он сам держит исходящее соединение.
Если точка входа называется нестандартно, укажите команду запуска: для Python это python main.py, для Node.js — npm start или node index.js.
Шаг 4. Добавьте токен в секреты и запустите
На шаге настройки Dockbox спросит переменные окружения. Добавьте ту же переменную, что читает код, — например DISCORD_TOKEN — и вставьте значение токена из Developer Portal. Значение хранится отдельно от кода и зашифровано: в панели видно только имя переменной.
Туда же стоит сложить всё остальное, что бот берёт из окружения: ID каналов и ролей, ключи внешних API, строку подключения к базе. Забытая переменная — самая частая причина падения при старте, потому что код честно сообщает о ней в логе.
Шаг 5. Проверьте, что бот в сети
После сборки откройте свой сервер в Discord: в списке участников бот должен быть с зелёным статусом online. Отправьте команду, на которую он умеет отвечать, — префиксную или слэш-команду через /. Параллельно смотрите логи в панели Dockbox: там видно и успешное подключение к Gateway, и текст ошибки, если что-то не так.
Типичные причины, что бот в сети, но молчит: не включён Message Content Intent, не установлены зависимости из файла, запущен второй экземпляр с тем же токеном или команды не зарегистрированы для вашего сервера. Причину почти всегда видно в логе прямым текстом.
Про режим работы и тарифы
На Dockbox бот работает постоянно, пока запущен его контейнер: платформа следит за процессом и перезапускает его при сбое. Никакого бесплатного тарифа с часами работы, лимита по времени или засыпания при простое здесь нет: круглосуточность — стандартный режим, а не отдельная опция. Код, настройки и секреты остаются на месте, ничего не удаляется.
Тарифы различаются ресурсами и числом проектов, а не режимом работы. Starter — 990 ₽/мес, причём первый месяц бесплатный: 1 vCPU, 2 ГБ RAM, один проект. Pro — 2490 ₽/мес: 2 vCPU, 4 ГБ RAM, 5 проектов и возможность подключить свой домен. Team — 4990 ₽/мес. Цены указаны в рублях, оплата вперёд за срок.
Что в итоге
Чтобы Discord-бот был онлайн круглосуточно, не нужен арендованный сервер с ручной настройкой автозапуска. Нужно место, которое держит процесс живым само. Загрузите код в Dockbox — и бот будет отвечать на команды, даже когда ваш компьютер выключен. Telegram-бот заводится точно так же — про это есть отдельный разбор.
Частые вопросы
Можно ли поднять Discord-бота без сервера?
Да. Сервер нужен только как место, где процесс работает непрерывно, — эту часть берёт на себя платформа для деплоя. Вы загружаете код в Dockbox, платформа собирает проект, запускает бота и перезапускает его при сбое.
Бот появляется в списке участников, но не отвечает на команды. Почему?
Чаще всего не включён Message Content Intent в Developer Portal: бот подключается к Gateway, видит события, но не получает текст сообщений. Другие причины — команды не зарегистрированы, запущен второй экземпляр с тем же токеном или обработчик падает с ошибкой. Смотрите логи в панели.
Нужно ли указывать порт при деплое Discord-бота?
Нет. Бот подключается к Gateway по исходящему соединению и входящие запросы не принимает, поэтому порт ему не нужен. Порт понадобится только если вы делаете веб-приложение с Interactions Endpoint.
Где хранить токен, если не в коде?
В секретах проекта. Значение шифруется, в панели видны только имена переменных, а код читает токен через os.environ в Python или process.env в Node.js.
Что будет, если бот упадёт с ошибкой?
Платформа перезапустит упавший контейнер сама. Логи доступны в панели в реальном времени, поэтому причину сбоя можно найти и поправить код без дежурства у терминала.