ACLClouds
ACLClouds

Bot Discord offline: as causas e como as corrigir

Token recusado, intents não autorizados, crash, DNS, limites de pedidos ou suspensão por inatividade: como ler o erro do seu bot Discord e voltar a pô-lo

Um bot Discord fica offline por cinco razões principais: o programa parou, o token foi recusado, um intent não está autorizado, a rede deixou de chegar ao Discord ou o serviço de alojamento suspendeu o bot. A consola do seu bot indica quase sempre qual: eis como ler essa mensagem e corrigir cada caso.

  • Leia o primeiro erro da consola: os seguintes são muitas vezes consequência dele.
  • Um erro 401 ou 4004 indica um token recusado: gere um novo com Reset Token.
  • O código 4014 indica um intent privilegiado a ativar no Developer Portal.
  • O código de saída 137 indica geralmente memória excedida.

Ler o primeiro erro

Antes de alterar o código, abra a consola ou os logs e suba até ao primeiro erro mostrado após o arranque. As linhas seguintes são muitas vezes consequência dele. Anote também a hora da paragem: uma paragem a uma hora fixa não tem a mesma causa que uma paragem à primeira mensagem.

  • O bot não arranca de todo: dependência, ficheiro ou versão.
  • O bot arranca e depois desliga-se: token, intents ou rede.
  • O bot continua ligado mas deixa de responder: erro num comando ou limite de pedidos.

Token recusado ou redefinido

Um erro 401 ou o código de fecho 4004 (Authentication failed) significa que o Discord recusa o token. Pode ter sido redefinido no Developer Portal, ou pelo próprio Discord se foi publicado, por exemplo num repositório GitHub público. Gere um novo token com Reset Token, substitua-o na variável DISCORD_TOKEN e reinicie.

  • Copie o token da página Bot, não o ID da aplicação nem o segredo de cliente.
  • Remova os espaços e as aspas à volta do valor.
  • Mantenha o token fora do código, como explica o guia para guardar tokens e variáveis secretas.

Intents não autorizados

O código de fecho 4014 (Disallowed intent(s)) aparece quando o código pede um intent privilegiado que não está ativado no Developer Portal: Message Content, Server Members ou Presence. Ative-o no separador Bot, ou retire-o do código se o bot não precisar dele. Acima de 100 servidores, estes intents exigem também uma validação do Discord.

  • discord.py: intents.message_content = True tem de corresponder à definição do portal.
  • discord.js: GatewayIntentBits.MessageContent segue a mesma regra.
  • Os comandos slash funcionam sem Message Content.

Crash, memória e dependências

Um programa que para leva o bot consigo. Cannot find module ou ModuleNotFoundError indica uma dependência que falta no package.json ou no requirements.txt. Uma paragem com o código 137 indica geralmente que o bot excedeu a memória: cache demasiado grande, fuga de memória ou reprodução de áudio. Uma exceção não tratada num evento também pode parar o processo.

  • Correções passo a passo: módulo Node.js não encontrado e módulo Python não encontrado.
  • Memória excedida: o guia do código de saída 137.
  • Envolva cada comando num try/catch (Node.js) ou num try/except (Python) que escreva o erro nos logs.

Rede, DNS e limites de pedidos

getaddrinfo EAI_AGAIN ou ECONNRESET indica uma falha de DNS ou de rede entre o bot e o Discord. discord.js e discord.py voltam a ligar-se sozinhos à gateway; se o erro se repetir, anote a hora e envie-a ao seu serviço de alojamento. Uma resposta 429 indica um limite de pedidos: o bot faz demasiadas chamadas, muitas vezes num ciclo. O Discord também bloqueia temporariamente um endereço IP que acumula pedidos inválidos, 10 000 em 10 minutos, por exemplo com um token recusado.

  • Não reinicie o bot em ciclo com um token inválido: cada tentativa conta como um pedido inválido.
  • Deixe a biblioteca gerir as respostas 429: discord.js e discord.py esperam o tempo indicado pelo Discord.
  • Evite alterar os cargos ou as mensagens de muitos membros num único ciclo.

Suspensão por inatividade e fim do prazo

Alguns alojamentos gratuitos param um bot inativo ou ao fim de uma quota de horas: verifique as condições da sua oferta. Na oferta Free da ACLClouds, o bot não é suspenso por inatividade: só para se a renovação gratuita de 4 dias não for feita. A próxima expiração aparece no cartão do serviço.

  • Um bot alojado em casa também para com o seu PC ou o seu router.
  • Para uma disponibilidade contínua, siga o nosso guia para alojar um bot Discord 24/7.

Porquê escolher a ACLClouds para este bot

O painel ajuda a corrigir as falhas mais frequentes sem sair do navegador. Quando falta o token, a consola mostra um cartão para o colar e reiniciar o bot. Quando o ficheiro de arranque não é encontrado, procura-o nas subpastas e propõe corrigir o caminho com um clique. Um bot parado de forma inesperada reinicia automaticamente.

  • Consola e logs em direto no painel, incluindo na oferta gratuita.
  • Um acesso SFTP próprio para cada bot (porta 2222), incluindo na oferta gratuita.
  • Oferta Free sem suspensão por inatividade, renovável gratuitamente a cada 4 dias: siga o tutorial Python e Node.js.

Perguntas frequentes

Porque é que o meu bot está offline se o código não mudou?

Na maioria dos casos, o token foi redefinido, o alojamento chegou ao fim do prazo ou a rede deixou de chegar ao Discord. O primeiro erro da consola indica qual.

O que significa o erro 4014?

O bot pede um intent privilegiado (Message Content, Server Members ou Presence) que não está ativado no separador Bot do Developer Portal. Ative-o ou retire-o do código.

Como saber se o meu token foi exposto?

Um erro 401 ou 4004 repentino, sem alterações da sua parte, é o sinal habitual. Gere um novo token com Reset Token e verifique que não aparece em nenhum repositório público.

O meu bot está online mas não responde: o que verificar?

Verifique se os comandos slash estão sincronizados, se o bot tem as permissões do canal e se o intent Message Content está ativado para os comandos com prefixo. Leia depois os erros mostrados a cada comando.