Discord 客户端的搜索时间戳

Discord Client's Search Timestamp

提问人:Ruri 提问时间:11/8/2023 最后编辑:SkullyRuri 更新时间:11/17/2023 访问量:109

问:

我正在向 Discord 的 API 发出一个简单的 HTTP 请求,以检索公会内的消息:

https://discord.com/api/v9/guilds/<guildId>/messages/search

这个端点是由实际的客户端使用的,而不是机器人,所以我无法弄清楚他们在日期参数中使用了什么样的时间戳,这些参数是 和 。这些值是数字的,它们似乎不是纪元。min_idmax_id

重新创建的步骤:

  1. 使用任何常规用户帐户登录 Discord
  2. 转到任何文本频道(私信、群组、公会频道)
  3. 打开开发者工具,然后转到“网络”选项卡
  4. 使用搜索框查找正在发送的 HTTP 请求以检索消息之前之后期间

您可以看到 API 请求包含参数,当所选选项为 时,或者当选项为 时,或者两者兼而有之。channel_idmin_idaftermax_idbefore

最小值/最大值是消息 ID 中的时间戳范围。此信息不在文档中,因此我正在寻找有关这些值的澄清,以便在我自己的项目中使用它们与 API 交互。

日期时间 Discord

评论

0赞 Dai 11/8/2023
这是一个私有的实现细节(例如,这些值可能是完全不透明的和/或加密的)——那么你为什么要担心呢?
1赞 DarkBee 11/8/2023
这回答了你的问题吗?Discord API:提供来自错误时间段的消息
1赞 Ruri 11/9/2023
@Dai因为我将它用于我的项目,因为默认的搜索 API 太慢了,我需要搜索数千条消息

答:

1赞 Skully 11/17/2023 #1

实际 Discord 客户端使用的时间戳是 Discord Epoch 时间戳,该时间戳类似于普通的 unix 时间戳,只是它从 2015 年 1 月 1 日开始或包括毫秒。1420070400000

所有 Discord 消息(以及其他需要唯一标识符的对象)都使用 Snowflakes 为消息创建时生成 (ISO8601):DateTime

Convert Discord Snowflake to DateTime

Discord 确实提供了一个示例,说明如何生成您在 Discord 客户端的文档请求中看到的雪花 ID

(timestamp_ms - DISCORD_EPOCH) << 22

您可能还对他们的文档感兴趣,该文档概述了他们如何将雪花与分页结合使用,以检索带有您看到的 and 参数的消息:beforeafter

我们通常在许多 API 路由中使用雪花 ID 进行分页。我们使用的标准化分页范式是您可以指定 ID 并结合使用来检索所需的结果页面的范例。有关详细信息,您需要参考特定的端点文档。beforeafterlimit

需要注意的是,雪花 ID 只是带有时间戳的数字,因此在处理分页时,您希望从时间开始(在 Discord Epoch 中,但在这里也有效)或特定时间之前/之后的结果,您可以为该时间生成雪花 ID。0