Como deixar um bot do Discord online 24/7

Para manter um bot do Discord online 24 horas, rode-o numa máquina que nunca desliga, com reinício automático quando o processo cair. Seu PC serve só para testar; para produção, use um VPS ou uma hospedagem.

Atualizado em 5 min de leitura

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.

Códigodo botiniciaProcessodo botWebSocketGatewaydo DiscordcaireiniciaSupervisorpm2, systemd, Docker
O supervisor inicia o bot no boot e o reinicia quando o processo cai; a biblioteca cuida de reconectar ao Gateway.

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:

  1. Uma máquina sempre ligada, com internet estável.
  2. Um supervisor que inicia o bot no boot e o reinicia após qualquer queda.
  3. 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:

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)#

bash
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 reboot

Segundo 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:

ini
[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.target
bash
sudo systemctl daemon-reload
sudo systemctl enable --now meu-bot

Restart=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#

bash
docker run -d --name meu-bot --restart unless-stopped --env-file .env meu-bot

Segundo 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:

  1. Veja os logs (pm2 logs meu-bot ou journalctl -u meu-bot -f) e confirme a linha "Online como ...".
  2. Mate o processo de propósito (pm2 stop não vale; use kill -9 <pid>) e veja o supervisor subir outro em segundos.
  3. Reinicie a máquina e confirme que o bot volta sozinho.
  4. Feche a sessão SSH e verifique que ele continua online no Discord.

Quais erros mantêm o bot offline?#

  • Rodar com node index.js numa 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 save ou o enable do 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

Saiba mais

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.

Próximo passo · Passo 5 de 5Como monitorar se seu bot está online (alertas no Discord/Telegram)Monitore o uptime do seu bot com um heartbeat que o próprio bot envia a um monitor externo, que avisa no Discord ou no Telegram quando o sinal para.