Чтобы запустить бота nextcord 24/7, держите его на машине, которая всегда включена, а не на своём ПК: на Linux VPS со службой systemd, если вы размещаете его сами, или на тарифе для ботов в хостинге Discord-ботов PlayNHost (от US$1.99 в месяц), где вы загружаете код, вставляете токен и нажимаете «Старт». В нашем тесте бот на nextcord 3.2.0 занял около 47 МБ памяти и связался с Discord примерно через 1.0 секунды после запуска. Первое, что нужно проверить: nextcord 3 требует Python 3.12 или новее. Шаги в PlayNHost:
- На странице хостинга Discord-ботов нажмите Создать сервер у нужного тарифа. В окне заказа на вопрос Для какой платформы ваш бот? ответьте Discord и выберите Python.
- Откройте свой сервер в панели. Карточка Настройка бота в разделе Обзор открывается на шаге Подключение к Discord. Её первый шаг, Что запускается, должен показывать Этот бот запускает Python Bot.; нажмите на этот шаг, чтобы проверить, затем Продолжить.
- На шаге Подключение к Discord вставьте токен в поле Вставьте токен бота, нажмите Подключение, затем Да, продолжить.
- На шаге Разрешения отметьте Мой код это использует только для привилегированных интентов, которые запрашивает ваш код (бот ниже не нуждается ни в одном), нажмите Добавить на сервер Discord, затем Продолжить.
- На шаге Ваш код нажмите Загрузить файлы и загрузите
bot.pyиrequirements.txt, в котором указанnextcord, либо нажмите Подключить Git. - На странице Бот, во вкладке Код, оставьте Среда выполнения равной Python 3.12 (recommended), 3.13 или 3.14, укажите Файл запуска, если он не
bot.py, и нажмите Сохранить. - Нажмите Запустить бота и следите за разделом Console. Когда бот выведет
Logged in as ..., карточка покажет Ваш бот онлайн в Discord.
Общие шаги для Python (пакеты, строки консоли) описаны в статье Как запустить Discord-бота на Python. Эта страница о том, чем отличается nextcord.
Что мы измерили
Мы запустили каждую Python-библиотеку для Discord на собственных серверах, в той же конфигурации Python 3.12, что использует тариф для ботов, с лимитом памяти 1 ГБ:
| Библиотека | Версия | Память в покое | От запуска до ответа Discord |
|---|---|---|---|
| nextcord | 3.2.0 | 47 МБ | 1.0 с |
| discord.py | 2.7.1 | 48 МБ | 1.0 с |
| Pycord | 2.8.1 | 51 МБ | 1.1 с |
| disnake | 2.12.2 | 47 МБ | 0.9 с |
| hikari | 2.7.0 | 61 МБ | 1.3 с |
| Один Python | 3.12 | 9 МБ |
Как мы измеряли: самая маленькая программа, которая загружает библиотеку и входит с поддельным токеном, установленная так, как наши серверы её устанавливают. Память это то, что процесс занимал через 15 секунд после того, как Discord отклонил токен, а время запуска считается от старта до этого ответа, поэтому в него входит одно обращение к Discord. Каждое значение это медиана трёх запусков после одного прогревочного. Это нижняя граница: бот, который подключился, вошёл на серверы и кэширует участников, использует больше, и насколько больше, зависит от бота.
Что это значит для тарифа: минимальный бот на nextcord занимает небольшую часть тарифа STARTER на 0.5 ГБ. Подбирайте тариф по тому, что держит в памяти ваш собственный бот, а не по библиотеке.
Минимальный бот на nextcord
Он отвечает на /ping слэш-командой и выводит строку о готовности. Токен он читает из DISCORD_TOKEN, под этим именем панель передаёт его вашему коду.
requirements.txt
nextcord>=3.2,<4
bot.py
import logging
import os
import nextcord
from nextcord.ext import commands
logging.basicConfig(level=logging.INFO)
bot = commands.Bot()
@bot.event
async def on_ready():
print(f"Logged in as {bot.user}")
@bot.slash_command(description="Check that the bot answers")
async def ping(interaction: nextcord.Interaction):
await interaction.send("Pong!")
bot.run(os.environ["DISCORD_TOKEN"])
Диапазон версий в requirements.txt задан намеренно: на слишком старом Python pip остановится с ошибкой, а не станет молча ставить старый nextcord (см. ниже). commands.Bot() не требует префикса для слэш-команд. nextcord сам регистрирует /ping в Discord при каждом подключении. Строка Logged in as переводит индикатор в разделе Обзор в состояние Онлайн в Discord.
Если токен неверный
Когда Discord отклоняет токен, nextcord вызывает такую ошибку (текст, который вывел наш тестовый бот):
LoginFailure: Improper token has been passed.
При bot.run() трассировка заканчивается строкой nextcord.errors.LoginFailure: Improper token has been passed., и бот останавливается. Панель читает эту строку: индикатор показывает Проблема с токеном, а в баннере написано Discord не принял токен вашего бота. Получите новый токен в Discord Developer Portal: ваше приложение, Bot, Reset Token (он показывается один раз). Нажмите Заменить токен в баннере, затем Заменить токен на вкладке Discord, вставьте его и снова запустите бота. См. Как создать Discord-бота и получить его токен.
Что хосту нужно знать о nextcord
- Python 3.12 или новее. Каждый выпуск nextcord 3 требует Python 3.12 или новее. На Python 3.10 или 3.11 простая строка
nextcordзаставляет pip поставить 2.6.0 от сентября 2023 года, последний выпуск, который их поддерживает, и код, написанный для nextcord 3, может не заработать. Сnextcord>=3.2,<4pip откажется: консоль покажет ошибку pip и[PlayNHost] pip could not install everything in requirements.txt., а если nextcord на сервере никогда не был установлен, бот затем остановится сModuleNotFoundError: No module named 'nextcord'. Выберите 3.12, 3.13 или 3.14 в поле Среда выполнения; изменение применяется при следующем запуске. - Импортируется nextcord. Вы ставите
nextcordи пишетеimport nextcordиfrom nextcord.ext import commands. Если вы переходите с discord.py, руководство по миграции nextcord советует удалить discord.py и заменитьdiscordнаnextcordв импортах и коде. - Неизвестные ему команды удаляются. При подключении nextcord регистрирует новые команды, обновляет изменённые и удаляет в Discord команды, которых нет в вашем коде (
rollout_delete_unknown, включено по умолчанию). Если тот же бот использует вторая программа, например тестовая копия на вашем ПК, команды, которые определены только в ней, удаляются при каждом подключении копии на сервере. Для тестов используйте отдельное приложение. - Не трогайте on_connect. Эта регистрация выполняется во внутреннем
on_connectбота. Если определить@bot.event async def on_connect(), он будет заменён, и ваши команды перестанут обновляться. Код запуска помещайте вon_ready, как выше. - Включите логирование. nextcord сам не настраивает логирование, а его документация настоятельно рекомендует это сделать. Без него Python показывает только предупреждения и ошибки;
logging.basicConfig(level=logging.INFO)в боте выше показывает и информационные строки библиотеки. - Интенты. Интенты по умолчанию не включают привилегированных, а слэш-командам они не нужны. Командам с префиксом нужны
intents.message_content = Trueв вашем коде и включённый Message Content Intent в Developer Portal. Если ваш код запрашивает его, а в Portal он выключен, Discord отклонит вход. См. Как исправить «Used disallowed intents» у вашего Discord-бота.
Свой Linux VPS
Сначала проверьте версию Python: python3 --version должна показать 3.12 или новее. В Ubuntu 24.04 поставляется 3.12, а в Debian 13 3.13; в Debian 12 поставляется 3.11, а в Ubuntu 22.04 3.10, обе слишком старые для nextcord 3. Затем установите Python, создайте пользователя и папку для бота и установите nextcord в виртуальное окружение:
sudo apt update
sudo apt install -y python3 python3-venv
sudo useradd --system --create-home --home-dir /opt/nextcord-bot bot
sudo cp bot.py requirements.txt /opt/nextcord-bot/
sudo chown bot: /opt/nextcord-bot/bot.py /opt/nextcord-bot/requirements.txt
sudo -u bot python3 -m venv /opt/nextcord-bot/venv
sudo -u bot /opt/nextcord-bot/venv/bin/pip install -r /opt/nextcord-bot/requirements.txt
Поместите токен в файл, который может читать только root. Создайте /etc/nextcord-bot.env командой sudo nano /etc/nextcord-bot.env, напишите одну строку, DISCORD_TOKEN= и затем ваш токен, сохраните и выполните sudo chmod 600 /etc/nextcord-bot.env.
Затем создайте /etc/systemd/system/nextcord-bot.service:
[Unit]
Description=nextcord Discord bot
Wants=network-online.target
After=network-online.target
[Service]
User=bot
WorkingDirectory=/opt/nextcord-bot
EnvironmentFile=/etc/nextcord-bot.env
Environment=PYTHONUNBUFFERED=1
ExecStart=/opt/nextcord-bot/venv/bin/python bot.py
Restart=always
RestartSec=5
[Install]
WantedBy=multi-user.target
Запустите службу сейчас и при каждой загрузке, затем следите за её выводом:
sudo systemctl daemon-reload
sudo systemctl enable --now nextcord-bot
sudo journalctl -u nextcord-bot -f
PYTHONUNBUFFERED=1 заставляет print() попадать в журнал сразу, а не когда заполнится буфер. Чтобы обновить бота, скопируйте новые файлы, снова выполните строку pip install и sudo systemctl restart nextcord-bot.
Свой сервер или тариф для ботов
| Ваш собственный VPS | Тариф для ботов PlayNHost | |
|---|---|---|
| Python | Версия из вашего дистрибутива, которая для nextcord 3 должна быть 3.12 или новее | Выберите 3.12, 3.13 или 3.14 в поле Среда выполнения |
| Пакеты | Вы запускаете pip install после каждого изменения | Устанавливаются при запуске после изменения requirements.txt или версии Python, а также при первом запуске через день после последней установки |
| Перезапуски | Ваш юнит systemd | Запускается снова после сбоя; остаётся остановленным с указанием причины, если снова падает в течение минуты |
| Токен | Файл, который вы защищаете сами | Хранится в зашифрованном виде, проверяется в Discord при вставке и передаётся вашему коду как DISCORD_TOKEN |
| Ошибки | Вы читаете журнал | Баннер в консоли называет причину, например неверный токен или пакет, который не установился |
| Обновления системы, файрвол, SSH | Это ваша забота | Не ваша забота |
Частые вопросы
Почему pip установил nextcord 2.6.0?
У вас Python 3.10 или 3.11. nextcord 3 требует 3.12 или новее, поэтому pip выбирает самый новый выпуск, который ещё поддерживает ваш Python. Укажите в поле Среда выполнения на вкладке Код Python 3.12 или новее и снова запустите бота: пакеты установятся заново, потому что версия Python изменилась.
Мои слэш-команды пропали. Почему?
Частая причина: другая программа вошла с тем же ботом и синхронизировала свой список, а nextcord удаляет команды, которых нет в его коде. Запускайте только одну копию на приложение. Пока вы тестируете, guild_ids=[your_server_id] у команды или default_guild_ids у commands.Bot() создаёт её только на этом сервере, а документация Discord сообщает, что серверные команды обновляются мгновенно.
Можно ли сохранить код на discord.py?
Большую его часть. nextcord начинался как форк discord.py, поэтому классы вроде Client, Intents и ext.commands есть под именем nextcord. Слэш-команды отличаются: @bot.slash_command и interaction.send() в nextcord, app_commands в discord.py. Удалите discord.py и поменяйте импорты, как сказано в руководстве по миграции nextcord.
Поместится ли бот на nextcord в самый маленький тариф?
Да. При около 47 МБ в нашем тесте минимальный бот на nextcord оставляет большую часть тарифа STARTER на 0.5 ГБ вашему собственному коду. Переходите на тариф побольше, когда этого требует сам бот: крупные серверы, участников которых он кэширует, файлы или изображения, которые он обрабатывает, или данные, которые он держит в памяти.
Готовы запустить своего? Выберите тариф на странице хостинга Discord-ботов и загрузите своего бота на nextcord.



