Antes de tudo: você tem log?
Se a resposta é não, esse é o primeiro problema a resolver. Sem registro, qualquer diagnóstico é chute.
Com PM2, os logs ficam disponíveis por comando e guardam a saída do bot inclusive no momento do crash. Com systemd, o journal do sistema faz o mesmo papel.
Com o log em mãos, os casos abaixo se resolvem em minutos.
Causa 1: hibernação do serviço gratuito
Sintoma: o bot fica offline sozinho depois de um tempo sem uso e volta quando alguém mexe.
Serviços gratuitos suspendem processos ociosos para economizar recursos. Não é bug, é o modelo de negócio.
Solução: migrar para hospedagem com recurso reservado. Não existe truque confiável para contornar isso.
Causa 2: falta de memória
Sintoma: o bot funciona bem por horas e cai de repente, normalmente em horário de pico. No log aparece erro de memória ou o processo some sem explicação.
Bot de música e bot que processa imagem são os mais afetados, porque o consumo dispara em picos.
Solução: aumentar o plano ou otimizar o que consome. Vazamento de memória em código também causa isso — se o consumo só sobe e nunca desce, é vazamento.
Causa 3: erro não tratado no código
Sintoma: o bot cai sempre depois de um comando específico, ou em situações parecidas.
Em Node.js, uma exceção não capturada encerra o processo inteiro. Um comando que falha ao ler um dado inexistente derruba o bot todo.
Solução: tratar erros nos comandos e adicionar captura global de exceções não tratadas. O gerenciador de processo religa, mas cair a cada comando errado é péssima experiência.
Causa 4: token inválido ou revogado
Sintoma: o bot nem chega a ficar online. O log mostra erro de autenticação logo na inicialização.
Acontece quando o token foi regenerado no portal do Discord e não atualizado no servidor — ou quando o Discord revogou automaticamente por detectar o token exposto publicamente.
Solução: gerar um token novo no portal de desenvolvedores e atualizar a variável de ambiente. E revisar como o token está guardado.
Causa 5: rate limit da API
Sintoma: o bot fica lento, ignora comandos ou responde com atraso enorme, sem cair de fato.
O Discord limita quantas requisições um bot pode fazer por intervalo. Passando disso, ele bloqueia temporariamente.
Costuma acontecer em bot que envia mensagem em loop, edita status com frequência alta ou responde em servidores grandes sem controle de fila.
Solução: reduzir a frequência das chamadas, agrupar operações e respeitar os cabeçalhos de limite que a API devolve.
Checklist rápido
Diante de um bot offline, siga esta ordem:
- Abra o log e leia as últimas linhas antes da queda.
- Confirme se o processo ainda existe no gerenciador.
- Cheque o consumo de memória no momento da queda.
- Veja se o erro aponta para um comando específico.
- Confirme que o token continua válido.
- Se nada disso explicar, verifique se a hospedagem hiberna processos ociosos.