Para hospedar um bot nextcord 24/7, rode-o em uma máquina que fica sempre ligada em vez de no seu PC: um VPS Linux com um serviço systemd, se você hospedar por conta própria, ou um plano de bots na hospedagem de bots do Discord da PlayNHost (a partir de US$1,99 por mês), onde você envia seu código, cola o token e clica em Iniciar. No nosso teste, um bot nextcord 3.2.0 usou cerca de 47 MB de memória e chegou ao Discord cerca de 1,0 segundo depois de ser iniciado. A primeira coisa a conferir: o nextcord 3 exige Python 3.12 ou mais novo. Os passos na PlayNHost:
- Na página de hospedagem de bots do Discord, clique em Criar servidor em um plano. Na janela do pedido, responda Para qual plataforma é o seu bot? com Discord e escolha Python.
- Abra seu servidor no painel. O cartão Configurar seu bot na Visão geral abre em Conectar ao Discord. O primeiro passo, O que roda, deve dizer Este bot roda Python Bot.; clique nesse passo para conferir e depois em Continuar.
- Em Conectar ao Discord, cole seu token em Cole o token do seu bot, clique em Conectar e depois em Sim, continuar.
- Em Permissões, marque Meu código usa isto apenas para os intents privilegiados que seu código pede (o bot abaixo não precisa de nenhum), clique em Adicionar a um servidor do Discord e depois em Continuar.
- Em Seu código, clique em Enviar arquivos e envie
bot.pye umrequirements.txtque listenextcord, ou clique em Conectar o Git. - Na página Bot, painel Código, deixe o Runtime em Python 3.12 (recommended), 3.13 ou 3.14, defina o Arquivo de entrada se não for
bot.pye clique em Salvar. - Clique em Iniciar bot e acompanhe o Console. Quando seu bot imprimir
Logged in as ..., o cartão dirá Seu bot está online no Discord.
Os passos gerais de Python (pacotes, linhas do console) estão em Como hospedar um bot do Discord em Python. Esta página cobre o que é diferente com o nextcord.
O que medimos
Rodamos cada biblioteca Python do Discord em nossos próprios servidores, na mesma configuração de Python 3.12 que um plano de bots usa, com limite de memória de 1 GB:
| Biblioteca | Versão | Memória em repouso | Do início à resposta do Discord |
|---|---|---|---|
| nextcord | 3.2.0 | 47 MB | 1,0 s |
| discord.py | 2.7.1 | 48 MB | 1,0 s |
| Pycord | 2.8.1 | 51 MB | 1,1 s |
| disnake | 2.12.2 | 47 MB | 0,9 s |
| hikari | 2.7.0 | 61 MB | 1,3 s |
| Python sozinho | 3.12 | 9 MB |
Como: o menor programa que carrega a biblioteca e faz login com um token falso, instalado do jeito que nossos servidores instalam. A memória é a que o processo ocupava 15 segundos depois de o Discord recusar o token, e o tempo de início vai do lançamento até essa resposta, então inclui uma ida ao Discord. Cada número é a mediana de três execuções depois de uma execução de aquecimento. É o piso: um bot que já se conectou, entrou em servidores e guarda membros em cache usa mais, em uma quantidade que depende do bot.
O que isso significa para o plano: um bot nextcord mínimo usa uma pequena parte do plano STARTER de 0,5 GB. Dimensione o plano pelo que o seu próprio bot guarda na memória, não pela biblioteca.
Um bot nextcord mínimo
Ele responde a /ping com um comando de barra e imprime uma linha de pronto. Lê o token de DISCORD_TOKEN, o nome que o painel dá ao seu código.
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"])
O intervalo de versões em requirements.txt é de propósito: em um Python velho demais, o pip para com um erro em vez de instalar em silêncio um nextcord antigo (veja abaixo). commands.Bot() não precisa de prefixo para comandos de barra. O nextcord registra /ping no Discord sozinho a cada conexão. A linha Logged in as é o que muda o indicador na Visão geral para Online no Discord.
Se o token estiver errado
Quando o Discord recusa o token, o nextcord levanta este erro (o texto que nosso bot de teste imprimiu):
LoginFailure: Improper token has been passed.
Com bot.run(), um traceback termina com nextcord.errors.LoginFailure: Improper token has been passed. e o bot para. O painel lê essa linha: o indicador mostra Problema no token e um aviso diz O Discord não aceitou o token do seu bot. Gere um novo token no Discord Developer Portal: sua aplicação, Bot, Reset Token (ele é mostrado uma única vez). Clique em Substituir o token no aviso, depois em Substituir token no painel Discord, cole-o e inicie o bot de novo. Veja Como criar um bot do Discord e obter o token.
O que um host precisa saber sobre o nextcord
- Python 3.12 ou mais novo. Todas as versões do nextcord 3 exigem Python 3.12 ou posterior. No Python 3.10 ou 3.11, uma linha
nextcordsimples faz o pip instalar a 2.6.0, de setembro de 2023, a última versão que os suporta, e código escrito para o nextcord 3 pode falhar. Comnextcord>=3.2,<4o pip se recusa: o console mostra o erro do pip e[PlayNHost] pip could not install everything in requirements.txt., e se o nextcord nunca foi instalado no servidor, o bot para comModuleNotFoundError: No module named 'nextcord'. Escolha 3.12, 3.13 ou 3.14 em Runtime; a mudança vale a partir da próxima inicialização. - O import é nextcord. Você instala
nextcorde escreveimport nextcordefrom nextcord.ext import commands. Se você vem do discord.py, o guia de migração do nextcord diz para desinstalar o discord.py e trocardiscordpornextcordnos imports e no código. - Comandos que ele não conhece são apagados. Ao conectar, o nextcord registra comandos novos, atualiza os alterados e apaga no Discord os comandos que seu código não define (
rollout_delete_unknown, ativado por padrão). Se um segundo programa usa o mesmo bot, como uma cópia de teste no seu PC, os comandos que só esse programa define são removidos toda vez que a cópia do servidor conecta. Use uma aplicação separada para testes. - Deixe o on_connect em paz. Esse registro roda no
on_connectdo próprio bot. Definir@bot.event async def on_connect()o substitui e seus comandos deixam de ser atualizados. Coloque o código de inicialização emon_ready, como acima. - Ligue o logging. O nextcord não configura o logging sozinho, e a própria documentação recomenda fortemente configurá-lo. Sem isso, o Python mostra só avisos e erros;
logging.basicConfig(level=logging.INFO)no bot acima mostra também as linhas de informação da biblioteca. - Intents. Os intents padrão não incluem nenhum privilegiado, e comandos de barra não precisam de nenhum. Comandos com prefixo precisam de
intents.message_content = Trueno seu código e de Message Content Intent ligado no Developer Portal. Se seu código pedir e estiver desligado no Portal, o Discord recusa o login. Veja Corrigir "Used disallowed intents" no seu bot do Discord.
Hospede você mesmo em um VPS Linux
Confira primeiro a versão do Python: python3 --version deve mostrar 3.12 ou mais nova. O Ubuntu 24.04 traz a 3.12 e o Debian 13 traz a 3.13; o Debian 12 traz a 3.11 e o Ubuntu 22.04 traz a 3.10, ambas velhas demais para o nextcord 3. Depois instale o Python, crie um usuário e uma pasta para o bot e instale o nextcord em um ambiente virtual:
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
Coloque o token em um arquivo que só o root possa ler. Crie /etc/nextcord-bot.env com sudo nano /etc/nextcord-bot.env, escreva uma linha, DISCORD_TOKEN= seguido do seu token, salve e execute sudo chmod 600 /etc/nextcord-bot.env.
Depois crie /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
Inicie agora e a cada boot, depois acompanhe a saída:
sudo systemctl daemon-reload
sudo systemctl enable --now nextcord-bot
sudo journalctl -u nextcord-bot -f
PYTHONUNBUFFERED=1 faz o print() chegar ao journal na hora, em vez de quando um buffer enche. Para atualizar o bot, copie os arquivos novos, execute de novo a linha pip install e sudo systemctl restart nextcord-bot.
Hospedagem própria ou plano de bots
| Seu próprio VPS | Um plano de bots da PlayNHost | |
|---|---|---|
| Python | A versão que sua distribuição traz, que precisa ser 3.12 ou mais nova para o nextcord 3 | Escolha 3.12, 3.13 ou 3.14 em Runtime |
| Pacotes | Você executa pip install a cada mudança | Instalados em uma inicialização depois que requirements.txt ou a versão do Python mudam, e na primeira inicialização um dia depois da última instalação |
| Reinicializações | Sua unit systemd | Iniciado de novo após uma falha; deixado parado com o motivo se falhar de novo em menos de um minuto |
| O token | Um arquivo que você mesmo protege | Guardado criptografado, verificado no Discord quando você cola e entregue ao seu código como DISCORD_TOKEN |
| Erros | Você lê o journal | O aviso do console indica a causa, como um token errado ou um pacote que não foi instalado |
| Atualizações do sistema, firewall, SSH | Ficam por sua conta | Não são seu trabalho |
Perguntas frequentes
Por que o pip instalou o nextcord 2.6.0?
Seu Python é 3.10 ou 3.11. O nextcord 3 exige 3.12 ou mais novo, então o pip escolhe a versão mais recente que ainda suporta seu Python. Defina o Runtime no painel Código como Python 3.12 ou mais novo e inicie o bot de novo: os pacotes são instalados outra vez porque a versão do Python mudou.
Meus comandos de barra sumiram. Por quê?
Uma causa comum: outro programa fez login com o mesmo bot e sincronizou a própria lista, e o nextcord apaga os comandos que seu código não define. Rode só uma cópia por aplicação. Durante os testes, guild_ids=[your_server_id] em um comando, ou default_guild_ids em commands.Bot(), cria o comando só nesse servidor, e a documentação do Discord diz que comandos de servidor são atualizados na hora.
Posso manter meu código do discord.py?
A maior parte dele. O nextcord começou como um fork do discord.py, então classes como Client, Intents e ext.commands estão lá com o nome nextcord. Os comandos de barra são diferentes: @bot.slash_command e interaction.send() no nextcord, app_commands no discord.py. Desinstale o discord.py e troque os imports, como diz o guia de migração do nextcord.
Um bot nextcord cabe no menor plano?
Sim. Com cerca de 47 MB no nosso teste, um bot nextcord mínimo deixa a maior parte do plano STARTER de 0,5 GB para o seu próprio código. Suba de plano quando o próprio bot precisar: servidores grandes cujos membros ele guarda em cache, arquivos ou imagens que ele processa, ou dados que ele mantém na memória.
Pronto para rodar o seu? Escolha um plano em hospedagem de bots do Discord e envie seu bot nextcord.



