You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Discord API异常:获取全量频道消息而非指定时间范围消息

问题:Discord API返回频道全部消息而非指定时间范围的消息

你遇到的问题出在两个核心点:

1. 查询字符串格式错误

你的代码初始将query_string设为'?',之后直接追加&after={after},最终生成的URL会是...messages?&after=xxx这种无效格式。Discord API会忽略这种错误的参数前缀,导致after参数完全不生效,自然返回了频道创建以来的所有消息。

2. 时间戳格式不符合API要求

Discord API的after参数需要RFC3339格式的时间字符串(例如2024-05-20T12:00:00Z),而非你当前传入的UNIX时间戳。API无法解析UNIX时间戳,这也是时间过滤失效的原因之一。

修正后的代码

import requests
import json
import datetime

def retrieve_messages(channelid, after=None, before=None):
    headers = {
        'authorization': "<TOKEN>"
    }

    # 用字典管理参数,交给requests自动处理拼接
    params = {}
    if after:
        params['after'] = after
    if before:
        params['before'] = before

    r = requests.get(
        f'https://discord.com/api/v9/channels/{channelid}/messages',
        headers=headers,
        params=params
    )
    jsonn = json.loads(r.text)
    for value in jsonn:
        print(value['content'], '\n')

# 生成符合API要求的UTC时间字符串
two_days_ago = datetime.datetime.utcnow() - datetime.timedelta(days=2)
after_timestamp = two_days_ago.isoformat() + 'Z'
retrieve_messages("<CHANNEL_ID>", after=after_timestamp)

补充说明

  • 使用requests.get的params参数可以自动处理查询字符串的格式,避免手动拼接时的低级错误。
  • Discord API单次请求最多返回100条消息,如果目标时间范围内的消息超过100条,需要通过分页实现:用最后一条消息的ID作为before参数循环发起请求,直到返回结果为空。

内容的提问来源于stack exchange,提问作者Trippy Dippy

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.09 21:15:34