Objetivos de aprendizado
Depois de ler este artigo, você vai conseguir:
- Escrever um bot discord.py 2.x pronto para produção
- Preparar requirements.txt e variáveis de ambiente para o deploy
- Verificar que o bot está online e corrigir os erros mais comuns
Nesta página
- O que você precisa antes de hospedar?
- Como escrever um bot discord.py que roda em produção?
- Como declarar as dependências?
- Como passar o token sem colocá-lo no código?
- Como colocar o bot no ar?
- Como verificar que o bot está funcionando?
- Quais erros comuns derrubam um bot discord.py?
- Como fazer isso na Square Cloud
- Perguntas frequentes
Um bot feito com discord.py é um script Python que abre uma conexão com o Gateway do Discord e fica rodando. Hospedar o bot é decidir onde esse processo vive, para que ele continue ativo quando você fechar o editor ou desligar o computador.
Este guia cobre o caminho inteiro: o código, as dependências, o token, o deploy e a verificação. Os exemplos usam a API do discord.py 2.x; confira a versão atual no PyPI.
O que você precisa antes de hospedar?#
- Uma versão do Python ainda com suporte. A documentação do discord.py informa o mínimo exigido. Prefira uma versão atual.
- Uma aplicação no Discord Developer Portal, com o bot criado e o token copiado.
- O bot convidado para o seu servidor de testes.
- Um lugar para o processo rodar 24 horas. Se ainda está comparando opções, veja como deixar um bot do Discord online 24/7 e quanto custa hospedar um bot do Discord.
Como escrever um bot discord.py que roda em produção?#
Crie um ambiente virtual e instale a biblioteca:
python3 -m venv .venv
source .venv/bin/activate # no Windows: .venv\Scripts\activate
pip install -U discord.pyAgora o bot.py (discord.py 2.x). Ele usa um slash command, que não exige o intent privilegiado message_content, e lê o token do ambiente:
import os
import discord
from discord.ext import commands
class MeuBot(commands.Bot):
async def setup_hook(self) -> None:
# Registra os slash commands no Discord ao iniciar
await self.tree.sync()
intents = discord.Intents.default()
bot = MeuBot(command_prefix=commands.when_mentioned, intents=intents)
@bot.event
async def on_ready() -> None:
print(f"Online como {bot.user}")
@bot.tree.command(name="ping", description="Mostra a latência do bot")
async def ping(interaction: discord.Interaction) -> None:
await interaction.response.send_message(f"Pong! {round(bot.latency * 1000)} ms")
bot.run(os.environ["DISCORD_TOKEN"])Dois detalhes importam para a hospedagem. Primeiro, os.environ["DISCORD_TOKEN"] falha com KeyError se a variável não existir, o que é bom: o bot nem sobe com configuração incompleta. Segundo, bot.run() já configura o log e bloqueia até o processo terminar, então não precisa de laço nem de asyncio.run.
Sincronizar os comandos a cada inicialização funciona para um bot pequeno. Se você reinicia o bot com frequência, rode a sincronização só quando os comandos mudarem.
Quando preciso do intent message_content?#
Só se o bot lê o texto das mensagens, como em comandos com prefixo (!ping). O quickstart do discord.py, que responde a $hello, avisa num comentário que o exemplo "requer o intent message_content" e o habilita com intents.message_content = True. Esse é um intent privilegiado: ligue-o na aba Bot do Developer Portal, em Privileged Gateway Intents, e também no código. Ligar só em um dos lados não basta. Acima de 100 servidores, a documentação avisa que o uso de intents privilegiados exige verificação do bot.
Como declarar as dependências?#
A hospedagem precisa saber o que instalar. Crie um requirements.txt na raiz do projeto, ao lado do bot.py:
discord.py>=2.7,<3Se o bot toca áudio em canal de voz, a documentação indica instalar o extra: discord.py[voice]. Para qualquer outra biblioteca que você usar (banco de dados, requisições HTTP), fixe a versão do mesmo jeito. Gere a lista do seu ambiente com pip freeze > requirements.txt quando tudo estiver funcionando.
Como passar o token sem colocá-lo no código?#
Use uma variável de ambiente. No terminal, em Linux e macOS:
export DISCORD_TOKEN="cole_o_token_aqui"
python3 bot.pyNo PowerShell: $env:DISCORD_TOKEN="cole_o_token_aqui". Se você usa um arquivo .env localmente, nunca o envie para o repositório: coloque-o no .gitignore. O conceito, e por que ele existe, está em o que são variáveis de ambiente. Se o token vazar, redefina-o no Developer Portal; o antigo deixa de funcionar na hora.
Como colocar o bot no ar?#
Em qualquer hospedagem, o roteiro é o mesmo: enviar bot.py e requirements.txt, definir DISCORD_TOKEN e iniciar com python bot.py. O que muda é quem mantém o processo vivo:
| Onde | Processo sobrevive ao seu PC desligar? | O que você mantém |
|---|---|---|
| Seu computador | Não | Tudo, e o bot cai com a máquina |
| VPS | Sim | Sistema, atualizações, supervisor (systemd, Docker) |
| Plataforma de hospedagem de bots | Sim | O código e a memória |
Num VPS, rode o bot sob systemd com Restart=always ou num container Docker com --restart unless-stopped, como mostra o guia de bot online 24/7. Rodar python bot.py numa sessão SSH não serve: o processo morre quando a sessão fecha. Para entender o que acontece com o PC, leia bot offline quando o PC desliga. A ideia geral de enviar o código para rodar em outra máquina está em o que é deploy.
Como verificar que o bot está funcionando?#
- Veja os logs de inicialização. Você deve ler a linha
Online como NomeDoBot. - No servidor, confira se o bot aparece como online na lista de membros.
- Digite
/pinge confirme a resposta. Os slash commands podem levar alguns instantes para aparecer; se não aparecerem, reinicie o cliente do Discord. - Mate o processo e veja se a hospedagem o reinicia sozinha. Sem isso, o "24/7" é só otimismo.
Quais erros comuns derrubam um bot discord.py?#
discord.errors.LoginFailure: Improper token has been passed.O token está errado, com espaços sobrando ou foi redefinido. Copie de novo no Developer Portal e confira a variável.discord.errors.PrivilegedIntentsRequired. O código pede um intent privilegiado (comomessage_content) que não está ligado no portal. Ligue-o ou remova do código.ModuleNotFoundError: No module named 'discord'. As dependências não foram instaladas no ambiente onde o bot roda. Confira orequirements.txt.KeyError: 'DISCORD_TOKEN'. A variável não foi definida na hospedagem.- Arquivo chamado
discord.py. A documentação alerta: não nomeie seu scriptdiscord.py, pois ele conflita com a biblioteca. Usebot.py. - Bot que cai com pouca RAM. O processo é morto quando a memória acaba. Veja a lista completa em por que o bot do Discord fica offline.
- Respostas lentas ou falhas por excesso de requisições. Veja o erro 429 do Discord.
Como fazer isso na Square Cloud#
Na Square Cloud, o seu bot.py roda num container isolado com o runtime Python, sempre ligado e sem modo de suspensão. O reinício automático vem ligado no deploy pelo painel e traz o bot de volta quando o processo encerra com erro. Você mesmo faz o deploy: upload de ZIP no painel, CLI, GitHub (push faz deploy) ou extensão do VS Code. No start, a plataforma instala as dependências com pip install -r requirements.txt. O discord.py funciona como qualquer outra biblioteca de Gateway, com sharding e voz, e o FFmpeg está disponível no container.
O token entra como variável de ambiente da aplicação, no painel, na API ou na CLI; a mudança vale no próximo restart, sem rebuild. O arquivo de configuração squarecloud.app é opcional: o painel o gera no deploy com runtime, memória e arquivo principal, e escrever o arquivo na raiz do projeto é a alternativa. Os logs aparecem em tempo real no painel, na CLI e no app de celular.
Todos os planos são pagos e cobrados em reais. O Hobby custa R$ 12,49 por mês, com 1 GB de RAM compartilhado entre as suas aplicações e mínimo de 256 MB por aplicação de fundo, como um bot. Veja os detalhes em hospedagem de bots do Discord.
Hospedagem de bots
Seu bot online 24/7, com reinício automático
Perguntas frequentes
Qual versão do Python o discord.py exige?
Confira a versão mínima na documentação oficial do discord.py. Em um projeto novo, use uma versão de Python que ainda recebe atualizações de segurança.
Preciso do intent message_content para o bot funcionar?
Só se o bot lê o texto das mensagens, por exemplo com comandos com prefixo. Slash commands não precisam dele. Ele é um intent privilegiado: ative no Developer Portal e também no código.
Posso hospedar um bot discord.py no PC?
Pode para testar, mas o bot fica offline sempre que o computador desliga, dorme ou perde a internet. Para ficar online 24 horas, use uma máquina que não desliga, como um VPS ou uma hospedagem.
Como passo o token do bot sem colocá-lo no código?
Defina uma variável de ambiente, como DISCORD_TOKEN, e leia o valor com os.environ no Python. Assim o token não vai para o repositório e você troca o valor sem editar o código.
Mais em Bots
Ver todos os 33 artigos- Quanto custa hospedar um bot do Discord?O custo de hospedar um bot do Discord depende de RAM, tempo online, banco de dados e serviços externos. Veja como estimar o seu e onde o gasto aparece.
- Rodar bot no celular (Termux) ou no PC vs hospedar: o que mudaUm bot no PC ou no celular (Termux) fica offline quando o aparelho desliga, dorme ou perde a rede. Compare as três opções e veja quando cada uma serve.
- Como deixar um bot do Discord online 24/7Para deixar um bot do Discord online 24/7, rode o processo numa máquina sempre ligada com reinício automático. Veja PC, VPS com pm2 ou systemd e hospedagem.
- Por que meu bot do Discord fica offline (e como resolver)Bot do Discord offline quase sempre é processo caído, token inválido, intent não habilitada ou falta de memória. Veja como diagnosticar cada causa e corrigir.