NOVO 📢 Oferta de lançamento limitada: até 70% de desconto no seu primeiro mês, em todos os jogos!Ver planos

Como hospedar um bot nextcord 24/7

Hospedagem de bot do DiscordUpdated Nov 6, 202611 min read

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:

  1. 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.
  2. 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.
  3. Em Conectar ao Discord, cole seu token em Cole o token do seu bot, clique em Conectar e depois em Sim, continuar.
  4. 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.
  5. Em Seu código, clique em Enviar arquivos e envie bot.py e um requirements.txt que liste nextcord, ou clique em Conectar o Git.
  6. 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.py e clique em Salvar.
  7. 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:

BibliotecaVersãoMemória em repousoDo início à resposta do Discord
nextcord3.2.047 MB1,0 s
discord.py2.7.148 MB1,0 s
Pycord2.8.151 MB1,1 s
disnake2.12.247 MB0,9 s
hikari2.7.061 MB1,3 s
Python sozinho3.129 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 nextcord simples 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. Com nextcord>=3.2,<4 o 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 com ModuleNotFoundError: 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 nextcord e escreve import nextcord e from nextcord.ext import commands. Se você vem do discord.py, o guia de migração do nextcord diz para desinstalar o discord.py e trocar discord por nextcord nos 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_connect do 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 em on_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 = True no 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 VPSUm plano de bots da PlayNHost
PythonA versão que sua distribuição traz, que precisa ser 3.12 ou mais nova para o nextcord 3Escolha 3.12, 3.13 ou 3.14 em Runtime
PacotesVocê executa pip install a cada mudançaInstalados 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çõesSua unit systemdIniciado de novo após uma falha; deixado parado com o motivo se falhar de novo em menos de um minuto
O tokenUm arquivo que você mesmo protegeGuardado criptografado, verificado no Discord quando você cola e entregue ao seu código como DISCORD_TOKEN
ErrosVocê lê o journalO aviso do console indica a causa, como um token errado ou um pacote que não foi instalado
Atualizações do sistema, firewall, SSHFicam por sua contaNã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.

Seu bot já está em outro lugar? Traga-o para nós

NOSSOS ÚLTIMOS ARTIGOS