如何使用Python增加Discord频道可检索的消息数量
Discord频道消息拉取数量调整方案
Discord 官方API对
GET /channels/{channel_id}/messages接口的默认返回条数限制为50条,单次请求可通过limit参数最多调整为100条,若需要拉取超过100条的历史消息,需要通过before参数分页拉取。
调整方法
- 单次拉取最多100条:直接在请求URL后加
?limit=100参数即可 - 拉取200条及以上:每次拉取后记录返回结果中最早一条消息的
id,作为下一次请求的before参数值,循环拉取直到拿到目标数量的消息
修正后完整代码
import requests import json def retrieve_messages(channel_id, auth_token, target_count=200): headers = {'authorization': auth_token} all_messages = [] last_message_id = None # 单次请求最多允许拉取100条 limit_per_req = 100 while len(all_messages) < target_count: url = f'https://discord.com/api/v9/channels/{channel_id}/messages?limit={limit_per_req}' # 非首次请求时追加before参数,拉取更早的历史消息 if last_message_id: url += f'&before={last_message_id}' r = requests.get(url, headers=headers) batch = json.loads(r.text) # 已无更多历史消息时终止循环 if not batch: break all_messages.extend(batch) # 更新最后一条消息ID,用于下一次分页定位 last_message_id = batch[-1]['id'] # 只返回目标数量的消息,避免拉取结果超出预期数量 return all_messages[:target_count]
调用示例
# 替换为实际的频道ID、authorization值即可拉取200条消息 messages = retrieve_messages("你的频道ID", "你的authorization值", 200)
注意事项
- 不要短时间频繁发起请求,避免触发Discord速率限制导致账号被限制访问
- 原代码的函数参数存在笔误,已在上述代码中修正为规范参数名
内容的提问来源于stack exchange,提问作者pierre_j
相关产品推荐
相关产品推荐

