Se seu bot está retornando erros de limite de taxa, não se preocupe! Esse é um desafio comum que pode ser resolvido com a abordagem correta. Este artigo lhe ajudará a entender o sistema de limitação por taxa do Discord, além de fornecer soluções práticas.
Conteúdo
Entendendo os tipos de limite de taxa do Discord
Limites de taxa específicos de recurso
Limites de solicitações inválidas
Como identificar o seu problema com limite de taxa
Melhores práticas para lidar com os limites de taxa
Considerações sobre gateway e sharding
Entendendo os tipos de limite de taxa do Discord
O Discord utiliza vários tipos de limitação de taxa para proteger a API. Identificar qual deles você está encontrando é crucial para definir a solução correta:
Limites de taxa globais
Limite: 50 solicitações por segundo na maioria dos endpoints.
Escopo: aplica-se em todo o seu aplicativo.
Identificação: procure por X-RateLimit-Scope: global nos cabeçalhos de resposta.
Limites de taxa por rota
Limite: varia para cada endpoint.
Escopo: específico para rotas individuais na API.
Identificação: procure por X-RateLimit-Scope: user nos cabeçalhos de resposta.
Limites de taxa específicos de recurso
Observação: os limites de taxas específicos de recurso podem ser atingidos por várias fontes (outros usuários, bots, webhooks, etc.) e podem não indicar que seu aplicativo é o único responsável pelo erro.
Limite: limites independentes para guildas, canais ou webhooks específicos.
Escopo: aplica-se a ações em recursos específicos.
Identificação: procure por X-RateLimit-Scope: shared nos cabeçalhos de resposta.
Limites de solicitações inválidas
Limite: 10.000 solicitações inválidas a cada 10 minutos.
Causa comum: erros não tratados (401, 403 ou 429) causando picos no número de solicitações. Observe que erros 429 que retornem com X-RateLimit-Scope: shared não são contabilizados no seu limite de solicitações inválidas.
Resultado: banimento temporário pela Cloudflare.
Como identificar o seu problema com limite de taxa
A maneira mais confiável de determinar qual limite você está atingindo é examinando os cabeçalhos de resposta HTTP quando você receber o código de status 429. Cabeçalhos importantes para procurar:
X-RateLimit-Limit: o limite de taxa para aquele endpoint.
X-RateLimit-Remaining: número de solicitações restantes na janela atual.
X-RateLimit-Reset: quando a janela de limite de taxa é redefinida (timestamp em formato Unix).
X-RateLimit-Reset-After: segundos até que o limite seja redefinido.
X-RateLimit-Scope: indica o tipo de limite de taxa (global, por usuário ou compartilhado).
retry_after: milissegundos de espera antes de realizar outra solicitação.
Melhores práticas para lidar com os limites de taxa
Implementar estratégias apropriadas de backoff
Sempre respeite o valor retry_after nas respostas do limite de taxa. Essa informação lhe diz exatamente quanto tempo esperar antes de tentar novamente.
Considere usar interações quando possível
Comandos de aplicativo e componentes de mensagem são uma excelente alternativa aos comandos de prefixo, o que pode evitar solicitações de API e mensagens excessivas nos canais.
Dica bônus: torne as respostas de interação e as mensagens de resposta temporárias, pois elas não contam para os limites de taxa.
Armazene dados de forma eficiente
Reduza chamadas de API armazenando em cache dados acessados com frequência, como:
- Informações da guilda
- Detalhes do canal
- Perfis de usuário
- Dados de cargo
Aplique uma limitação de requisições
A limitação de requisições é uma abordagem proativa para evitar erros de limites de taxa, controlando o ritmo das requisições antes de atingirem o limite.
Por exemplo, se seu bot precisa enviar mensagens de boas-vindas a 200 novos membros, em vez de enviar todas as 200 mensagens imediatamente, coloque-as em uma fila que libere 4 solicitações a cada 100 milissegundos. Isso mantém uma taxa constante de 40 solicitações por segundo, ficando seguramente abaixo do limite de 50 solicitações, garantindo que todas as mensagens sejam enviadas em cerca de 5 segundos.
Limites de taxa globais
Se você está atingindo os limites de taxa globais, seu programa pode ter um problema subjacente que precisa ser resolvido.
Veja como otimizar seu código para permanecer entre os limites:
- Implementar um cache adequado.
- Migrar para recursos baseados em interações.
Se essas soluções não resolverem seus problemas de limites de taxa globais, recomendamos que você entre em contato pelo canal #api-help no servidor Discord Developer ou pelo suporte ao desenvolvedor.
Considerações sobre gateway e sharding
Para bots que lidem com eventos em tempo real por meio do gateway do Discord (conexão websocket), o sharding será essencial à medida que seu bot cresce.
O que é sharding?
O sharding divide seu bot em várias instâncias, cada uma gerenciando um subconjunto de guildas. Isso distribui a carga entre várias conexões websocket, ajudando você a permanecer entre os limites de taxa.
É recomendável começar a planejar a implementação do sharding quando seu aplicativo se aproximar de 2.000 guildas, já que esse recurso precisa ser habilitado em aplicativos que alcancem mais de 2.500 guildas. Para um desempenho ideal, siga a prática recomendada de manter aproximadamente 1 shard para 1.000 guildas.
Lembre-se de que os limites de taxa existem para garantir uma experiência estável para todos os usuários do Discord. Seguindo estas melhores práticas, você pode construir um bot que consiga escalar eficientemente, respeitando os limites.