Objetivos de aprendizado
Depois de ler este artigo, você vai conseguir:
- Entender o que mantém um bot online de verdade
- Configurar reinício automático com pm2, systemd ou Docker
- Verificar que o bot sobrevive a quedas e reinícios
Nesta página
Um bot do Discord só responde enquanto o processo dele está rodando e conectado ao Gateway do Discord. Fechou o terminal, o PC entrou em repouso ou o programa travou: o bot aparece offline. Deixá-lo online 24/7 significa resolver duas coisas: onde o processo roda e quem o reinicia quando ele cai. Os exemplos usam Node.js e discord.js v14, mas a lógica vale para qualquer linguagem.
O que significa deixar um bot online 24/7?#
Seu bot abre uma conexão WebSocket com o Gateway e a mantém viva enviando heartbeats. Segundo a documentação do Gateway, se um heartbeat fica sem confirmação a conexão é considerada "zumbi" e o cliente deve fechar e reconectar. A própria documentação diz que desconexões são esperadas e podem ocorrer a qualquer momento, e que o cliente deve tentar retomar a sessão (resume).
As bibliotecas populares tratam essa reconexão. O que elas não fazem é ressuscitar um processo que morreu. Portanto, "24/7" depende de três camadas:
- Uma máquina sempre ligada, com internet estável.
- Um supervisor que inicia o bot no boot e o reinicia após qualquer queda.
- Código que não derruba o processo por erros previsíveis.
Onde posso rodar o bot?#
| Opção | Fica online sem o seu PC? | O que você administra |
|---|---|---|
| Seu computador | Não | Tudo, e o bot cai quando a máquina desliga |
| VPS | Sim | Sistema operacional, atualizações, firewall, supervisor |
| Plataforma de hospedagem de bots | Sim | O código e a memória; o ambiente já vem pronto |
Rodar no PC serve para desenvolver; o que acontece quando ele desliga está em bot offline quando o PC desliga. Opções sem custo costumam trazer limites de horas ou suspensão, como mostra limites da hospedagem sem custo. Para comparar valores, veja quanto custa hospedar um bot do Discord.
Passo 1: como preparar o código para não cair à toa?#
Guarde o token em variável de ambiente, nunca no código (veja como proteger o token do bot). Depois, registre handlers para os erros que, sem tratamento, encerram o processo do Node.js:
// index.js (discord.js v14)
const { Client, Events, GatewayIntentBits } = require('discord.js');
const client = new Client({ intents: [GatewayIntentBits.Guilds] });
client.once(Events.ClientReady, (readyClient) => {
console.log(`Online como ${readyClient.user.tag}`);
});
client.on(Events.Error, (err) => console.error('Erro do client:', err));
process.on('unhandledRejection', (err) => console.error('Promise rejeitada:', err));
client.login(process.env.DISCORD_TOKEN).catch((err) => {
console.error('Falha no login:', err);
process.exit(1); // sai com erro para o supervisor perceber e reiniciar
});O handler de unhandledRejection só registra o erro e mantém o processo vivo, então use-o para falhas pontuais. Uma falha no login (token inválido, intent não habilitada) não tem como se resolver sozinha: o catch encerra o processo com código 1 em vez de deixar o bot parado em silêncio. Se o Node.js encontrar uma exceção sem tratamento, o processo também sai. Por isso o supervisor do próximo passo é indispensável, mesmo com bom tratamento de erros. Para um passo a passo do bot em si, veja como hospedar um bot discord.js ou um bot discord.py.
Passo 2: como reiniciar o bot automaticamente?#
Escolha um supervisor. Todos fazem o mesmo trabalho: subir o bot no boot e reerguê-lo após uma queda.
pm2 (Node.js)#
npm install -g pm2
DISCORD_TOKEN=seu_token pm2 start index.js --name meu-bot
pm2 startup # imprime um comando com sudo; copie e execute
pm2 save # grava a lista para voltar após rebootSegundo a documentação do pm2, pm2 startup detecta o sistema de init e imprime o comando a executar, e pm2 save guarda os apps para que voltem após um reboot. Depois de atualizar o Node.js, rode pm2 unstartup e pm2 startup de novo. Para não deixar o token no histórico do shell, use um arquivo de configuração do pm2 ou carregue um .env.
systemd (qualquer linguagem, Linux)#
Crie /etc/systemd/system/meu-bot.service:
[Unit]
Description=Bot do Discord
After=network-online.target
Wants=network-online.target
[Service]
WorkingDirectory=/opt/meu-bot
EnvironmentFile=/opt/meu-bot/.env
ExecStart=/usr/bin/node index.js
Restart=always
RestartSec=5
[Install]
WantedBy=multi-user.targetsudo systemctl daemon-reload
sudo systemctl enable --now meu-botRestart=always reinicia o serviço qualquer que seja o motivo da saída, e só deixa de reiniciar se você o parar com systemctl stop (ou se o código de saída estiver em RestartPreventExitStatus=), segundo o manual do systemd. O RestartSec=5 espera 5 segundos entre tentativas (o padrão é 100 ms, rápido demais para um bot com token inválido).
Docker#
docker run -d --name meu-bot --restart unless-stopped --env-file .env meu-botSegundo a documentação do Docker, unless-stopped reinicia o container se ele sair ou se o daemon reiniciar, mas respeita um docker stop manual.
Como verificar que o bot sobrevive a quedas?#
Não confie só em "subiu". Teste o ciclo de falha:
- Veja os logs (
pm2 logs meu-botoujournalctl -u meu-bot -f) e confirme a linha "Online como ...". - Mate o processo de propósito (
pm2 stopnão vale; usekill -9 <pid>) e veja o supervisor subir outro em segundos. - Reinicie a máquina e confirme que o bot volta sozinho.
- Feche a sessão SSH e verifique que ele continua online no Discord.
Quais erros mantêm o bot offline?#
- Rodar com
node index.jsnuma sessão SSH. Ao fechar a sessão, o processo morre. Use um supervisor. - Reinício em loop. Token inválido ou intent não habilitada fazem o bot sair no login, e o supervisor o reinicia sem parar. Leia o erro no log. A lista de causas está em por que o bot do Discord fica offline.
- Falta de memória. O sistema mata o processo quando a RAM acaba. Meça o pico de uso e deixe folga.
- Esquecer o
pm2 saveou oenabledo systemd. O bot funciona até o primeiro reboot. - Token no código. Ele vaza no repositório e o Discord pode redefini-lo.
Como fazer isso na Square Cloud#
Na Square Cloud, as três camadas deste artigo mudam de dono. A máquina sempre ligada é o container, que não tem modo de suspensão nem regra de inatividade. O supervisor é o reinício automático, que vem ligado no deploy pelo painel: quando o processo encerra com erro, a aplicação volta sozinha, então você não instala pm2 nem escreve unit do systemd. O código continua com você, e o process.exit(1) do passo 1 é exatamente o sinal que esse reinício espera. Uma saída com código 0 deixa a aplicação parada.
Dois limites valem saber de antemão. Se o bot estourar a memória, a aplicação para e não volta sozinha: aumente a RAM nas configurações e inicie de novo. E um token inválido faz o bot sair no login a cada tentativa, então leia o erro nos logs em vez de esperar que ele se resolva. Os logs aparecem em tempo real no painel, na CLI e no app de celular, e as linhas de antes de um restart continuam visíveis.
O token entra como variável de ambiente da aplicação e vale no próximo restart. O deploy é por upload de ZIP, CLI, GitHub ou extensão do VS Code, com discord.js, discord.py, JDA, Discord.Net ou outra biblioteca de Gateway. O Hobby custa R$ 12,49 por mês com 1 GB de RAM, e um bot usa a partir de 256 MB. Veja os detalhes em hospedagem de bots do Discord.
Hospedagem de bots
Seu bot online 24/7, com reinício automático
Perguntas frequentes
Como deixar um bot do Discord online 24 horas sem deixar o PC ligado?
Rode o bot em outra máquina que fica sempre ligada: um VPS ou uma plataforma de hospedagem de bots. Você envia o código, define o token por variável de ambiente e o processo continua rodando mesmo com o seu computador desligado.
Por que meu bot do Discord fica offline sozinho?
As causas mais comuns são o computador ou o terminal fechar, uma exceção não tratada que derruba o processo, falta de memória e token inválido ou redefinido. Um supervisor de processos que reinicia o bot resolve a maioria delas.
O bot precisa reconectar ao Discord quando a conexão cai?
Sim. O Discord avisa que desconexões do Gateway são esperadas e podem acontecer a qualquer momento, e o cliente deve tentar retomar a sessão. Bibliotecas como discord.js e discord.py fazem isso por você, mas o processo precisa continuar vivo.
pm2 ou systemd: qual usar para manter o bot ligado?
Se o bot é Node.js e você quer algo rápido, pm2. Se quer um serviço nativo do Linux, que serve para qualquer linguagem, systemd. Ambos reiniciam o bot após uma queda e iniciam com o servidor.
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.
- 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.
- Como hospedar um bot do Telegram 24/7Para manter um bot do Telegram online 24/7, rode o processo num servidor sempre ligado, com long polling ou webhook. Veja o código e os erros comuns.