Por que chamadas à API REST do Discord Bot falham mesmo com cabeçalho de autorização válido
🔍 WiseChecker

Por que chamadas à API REST do Discord Bot falham mesmo com cabeçalho de autorização válido

Você tem um bot do Discord que envia requisições REST com um token de bot válido no cabeçalho Authorization. No entanto, a API retorna erros 401 Unauthorized ou 403 Forbidden. Isso geralmente acontece devido a uma incompatibilidade entre o tipo de token, o escopo necessário ou as permissões do bot no servidor alvo. Este artigo explica os motivos específicos dessas falhas e mostra como corrigir cada uma.

Principais conclusões: Por que chamadas à API REST do bot falham mesmo com token válido

  • Formato do cabeçalho Authorization: Deve usar “Bot ” e não “Bearer ” para tokens de bot.
  • Escopos e intents do bot: O bot deve ter os escopos OAuth2 corretos e as intents de gateway habilitadas no Portal do Desenvolvedor.
  • Permissões no servidor: O bot deve ser membro do servidor alvo com as permissões baseadas em cargo necessárias.

ADVERTISEMENT

Por que chamadas à API REST do Discord Bot falham com token válido

A API REST do Discord autentica requisições de bot usando um token de bot. Quando o token é válido mas a requisição falha, o problema é quase sempre uma de três coisas: o formato do cabeçalho está errado, o bot não possui o escopo necessário ou o bot não tem as permissões necessárias no servidor específico.

Formato do cabeçalho Authorization

O Discord espera que o cabeçalho Authorization comece com a palavra “Bot” seguida de um espaço e depois o token. Muitos desenvolvedores usam “Bearer” por engano, que é usado para tokens de usuário OAuth2. Se você usar “Bearer” com um token de bot, o Discord rejeita a requisição com um erro 401 mesmo que o token seja válido.

Escopos OAuth2 e Intents de Gateway

Todo bot do Discord tem um conjunto de escopos OAuth2 que definem o que o bot pode fazer. O escopo mais comum é “bot”, que permite que o bot entre em servidores e execute ações. No entanto, alguns endpoints exigem escopos adicionais como “applications.commands” para comandos de barra. Se o bot não foi convidado com os escopos corretos, as chamadas a esses endpoints falharão. Da mesma forma, intents de gateway privilegiados (Server Members Intent, Message Content Intent) devem estar habilitados no Portal do Desenvolvedor para que o bot acesse certos dados.

Associação ao servidor e permissões de cargo

O bot deve ser membro do servidor com o qual está tentando interagir. Mesmo com um token válido, o Discord retornará 403 Forbidden se o bot não estiver no servidor. Além disso, o cargo do bot naquele servidor deve ter a permissão específica exigida pelo endpoint da API. Por exemplo, para banir um usuário, o bot precisa da permissão “Banir Membros”. O Discord verifica essas permissões no nível do cargo, não no nível do token.

Passos para corrigir falhas em chamadas à API REST

  1. Verifique o formato do cabeçalho Authorization
    Abra o código do seu bot e verifique o cabeçalho Authorization. Deve ser exatamente: Authorization: Bot SEU_TOKEN_DO_BOT. Substitua “Bearer” por “Bot” se necessário. Esta é a causa única mais comum de erros 401.
  2. Verifique os escopos OAuth2 no Portal do Desenvolvedor
    Acesse o Portal do Desenvolvedor do Discord, selecione seu aplicativo, clique em OAuth2 > Gerador de URL. Certifique-se de que o escopo “bot” esteja selecionado. Se você usa comandos de barra, selecione também “applications.commands”. Regere a URL de convite e reconvide o bot para o servidor.
  3. Habilite as intents de gateway necessárias
    No Portal do Desenvolvedor, em Bot > Intents de Gateway Privilegiados, habilite Server Members Intent e Message Content Intent se seu bot precisar delas. Salve as alterações e reinicie o bot.
  4. Confirme que o bot está no servidor alvo
    Envie uma requisição GET para https://discord.com/api/v10/users/@me/guilds com o token do seu bot. A resposta lista todos os servidores dos quais o bot é membro. Se o servidor alvo estiver faltando, convide o bot usando a URL de convite correta.
  5. Atribua as permissões de cargo corretas
    No servidor, vá em Configurações do Servidor > Cargos. Encontre o cargo do bot. Ative a permissão específica necessária para a chamada à API. Por exemplo, para gerenciamento de canais, ative “Gerenciar Canais”. Depois salve o cargo.
  6. Teste primeiro com o endpoint mais simples
    Envie uma requisição GET para https://discord.com/api/v10/users/@me. Este endpoint requer apenas o escopo “bot” e um token válido. Se isso funcionar mas outras chamadas falharem, o problema é relacionado a escopo ou permissão.

ADVERTISEMENT

Se as chamadas à API do Discord Bot ainda falharem

Bot retorna 401 após rotação de token

Os tokens de bot do Discord podem ser rotacionados no Portal do Desenvolvedor. Se você rotacionou o token mas o antigo ainda está no código, todas as chamadas falharão. Atualize o token nas variáveis de ambiente ou arquivo de configuração do seu bot. Depois reinicie o processo do bot.

Limitação de taxa (rate limiting) gera erros 429 que parecem falhas de autorização

O Discord impõe limites de taxa por endpoint. Se seu bot enviar muitas requisições em pouco tempo, o Discord retorna uma resposta 429 Too Many Requests. Seu código pode interpretar isso como uma falha de autorização. Verifique o código de status da resposta. Se for 429, implemente backoff exponencial conforme descrito na documentação de limite de taxa do Discord.

Bot não consegue acessar DMs sem o escopo correto

Para enviar mensagens diretas a um usuário, o bot deve ter o escopo “bot” e o usuário deve ter concedido permissão iniciando a DM. Se você tentar enviar uma DM a um usuário que não enviou DM ao bot primeiro, a API retorna 403 Forbidden. Use o endpoint users/@me/channels para criar um canal de DM antes de enviar uma mensagem.

Problema Status HTTP Causa mais comum
Formato de cabeçalho inválido 401 Unauthorized Usar “Bearer” em vez de “Bot” no cabeçalho Authorization
Escopo OAuth2 ausente 401 Unauthorized Bot não convidado com o escopo necessário para o endpoint
Bot não está no servidor 403 Forbidden Bot nunca entrou no servidor alvo
Permissões de cargo insuficientes 403 Forbidden O cargo do bot não tem a permissão específica necessária
Limitação de taxa 429 Too Many Requests Muitas requisições enviadas muito rapidamente

Chamadas à API REST do Discord Bot falham apesar de um cabeçalho Authorization válido devido a erros no formato do cabeçalho, escopos OAuth2 ausentes ou permissões insuficientes no servidor. Comece confirmando que o cabeçalho usa “Bot” e não “Bearer”. Em seguida, verifique se o bot tem os escopos e permissões de cargo corretos para o endpoint que você está chamando. Para solução de problemas avançada, teste primeiro com o endpoint /users/@me para isolar problemas de escopo e permissão.

ADVERTISEMENT