Discord.py 获取剩余请求

问题描述 投票:0回答:2

据我所知,discord 的速率限制是每 10 分钟 10,000 个请求。我想知道我还剩下多少请求,以便我可以例如减慢机器人的速度,这样它就不会被禁止进行不和谐。 我只找到了 is_ws_ratelimited 但这只给了我一个布尔值,这不是我想要的

python discord discord.py pycord
2个回答
0
投票

根据 Discord Documentation,每个请求都会返回可选的 HTTP 标头,其中包含您剩余的调用。您可能最有可能对标头

X-RateLimit-Remaining
感兴趣,其中包含您剩余的请求数。

X-RateLimit-Reset
为您提供限制重置日期的 UNIX 时间戳。


0
投票

Discord.py 允许您使用 aiohttp 库使用 http 请求记录器,并使用客户端的 http_trace 参数。这应该会在控制台中将值返回给您,以供您查看信息。你可以简单地说:

import aiohttp
from aiohttp import TraceConfig, TraceRequestEndParams
import logging


logger = logging.getLogger('discord.http')
logger.setLevel(logging.INFO)
handler = logging.StreamHandler()
handler.setFormatter(logging.Formatter('%(asctime)s:%(levelname)s:%(name)s: %(message)s'))
logger.addHandler(handler)


async def on_request_end(session, context, params: TraceRequestEndParams):
    rate_limit_headers = ['X-RateLimit-Limit', 'X-RateLimit-Remaining', 'X-RateLimit-Reset', 'X-RateLimit-Reset-After', 'X-RateLimit-Bucket']
    headers = params.response.headers
    rate_limit_info = {header: headers.get(header) for header in rate_limit_headers if header in headers}
    if rate_limit_info:
        logger.info(f"Rate Limit Info: {rate_limit_info}")

trace_config = TraceConfig()
trace_config.on_request_end.append(on_request_end)

bot = commands.Bot(command_prefix='!', intents=discord.Intents.all(), http_trace=trace_config)
© www.soinside.com 2019 - 2024. All rights reserved.