Hospedar um bot do Discord
Coloque um bot feito com discord.js ou discord.py online 24/7 no Hydro, com o token como segredo.
Um bot do Discord abre uma conexão com o gateway do Discord e fica ouvindo eventos. Ele não recebe conexões, então roda como worker: um processo contínuo, sem porta pública, que o Hydro reinicia se cair.
Antes de começar
- O token do bot, em Discord Developer Portal → Applications → seu app → Bot → Reset Token.
- Os Privileged Gateway Intents que o bot usa ligados na mesma página (por exemplo, Message Content Intent para ler mensagens).
- O código num repositório do GitHub ou num
.zip(semnode_modulesnem.venv).
1. Leia o token da variável de ambiente
Nunca deixe o token no código. Leia de DISCORD_TOKEN:
import { Client, Events, GatewayIntentBits } from 'discord.js';
const client = new Client({ intents: [GatewayIntentBits.Guilds] });
client.once(Events.ClientReady, (ready) => console.log(`Online como ${ready.user.tag}`));
client.login(process.env.DISCORD_TOKEN);import os
import discord
client = discord.Client(intents=discord.Intents.default())
@client.event
async def on_ready():
print(f"Online como {client.user}")
client.run(os.environ["DISCORD_TOKEN"])2. Garanta o comando de início
- Node.js: um script
startnopackage.json, como"start": "node index.js". O gerenciador (npm, pnpm, yarn ou bun) vem do lockfile. - Python: um
main.pyna raiz e as dependências norequirements.txt(oupyproject.tomlcom Poetry ou uv).
3. Crie o worker
Em Aplicações → Criar aplicação, escolha a origem (GitHub, .zip ou imagem Docker), o tipo Worker e a memória. Bots pequenos costumam rodar bem com 128 a 256 MB; acompanhe o consumo em Métricas e ajuste.
4. Cadastre o token e faça o deploy
Na aba Variáveis, crie DISCORD_TOKEN marcada como segredo e faça o deploy. Nos Logs, aparece a linha Online como … quando o bot conecta.
Erros comuns
| Sintoma | Causa |
|---|---|
Used disallowed intents | O código pede um intent privilegiado que não está ligado no Developer Portal |
An invalid token was provided | Token errado ou com espaço sobrando na variável. Gere outro e atualize |
| O bot conecta e não lê mensagens | Falta o Message Content Intent, no código e no portal |
A app fica crashed | O processo caiu 5 vezes em 10 minutos. As últimas linhas do log mostram o erro |
Dados do bot
Arquivos que o bot grava, como um banco SQLite, ficam na pasta do projeto, que continua entre deploys e entra no backup diário (detalhes). Para muitos acessos simultâneos, use um banco gerenciado.