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.
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
- 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. - 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. - 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. - Confirme que o bot está no servidor alvo
Envie uma requisição GET parahttps://discord.com/api/v10/users/@me/guildscom 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. - 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. - Teste primeiro com o endpoint mais simples
Envie uma requisição GET parahttps://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.
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.