Discord Snowflake ID 结构说明

了解 Discord Snowflake ID 如何在 64 位整数中编码创建时间、worker、process 和序列号。

概览

Discord 的用户、服务器、频道、身份组、消息等对象,都会被分配一个数字 ID。这个 ID 并不是随机生成的。Discord 使用的是 Snowflake 结构,也就是一种把时间和少量内部元数据编码进 64 位整数的格式。

这也是为什么 Discord ID 查询工具无需访问私密资料,就能推算出精确创建时间。

Discord Snowflake 的位结构

一个 Discord Snowflake 由四个部分组成:

字段位数作用
Timestamp42自 Discord Epoch 起经过的毫秒数
Worker ID5内部机器标识
Process ID5内部进程标识
Increment12同一毫秒内生成 ID 的序列号

对查询工具最重要的是前 42 位,因为它保存了时间戳。

Discord Epoch 是什么

Discord 并不是从 Unix Epoch 开始计时,而是使用自己的起始时间:

  • Discord epoch: 2015-01-01 00:00:00 UTC
  • 对应 Unix 毫秒值:1420070400000

想得到真实创建时间,通常会这样计算:

  1. 将 Snowflake 右移 22 位
  2. 加上 Discord epoch
  3. 把结果按 Unix 毫秒时间戳解释

为什么它能精确计算账号年龄

因为时间戳直接编码在 ID 里,所以创建时间具备这些特点:

  • 精确到毫秒
  • 不会随时间变化
  • 不依赖用户名、头像或显示名称

这让 Snowflake 成为判断账号或对象创建时间最可靠的依据。

Snowflake 能告诉你什么,不能告诉你什么

Snowflake 可以告诉你:

  • 一个账号或对象是什么时候创建的
  • 两个对象是否在接近的时间段内创建
  • 一个 ID 是否符合 Discord Snowflake 的基本格式

Snowflake 不能告诉你:

  • 用户邮箱
  • 私聊内容
  • IP 地址
  • 当前是否订阅 Nitro

这些信息并不编码在 ID 里。

哪些 Discord 对象使用 Snowflake

相同结构适用于:

  • 用户 ID
  • 服务器 ID
  • 频道 ID
  • 身份组 ID
  • 消息 ID
  • Webhook ID
  • Bot 账号 ID

因此,账号年龄工具也可以拿来查看服务器创建日期,或者反推某条消息的大致时间。

常见用途

解码 Snowflake 的典型用途包括:

  • 管理时判断账号年龄
  • 识别新注册的 spam 或 raid 账号
  • 查看服务器或频道的创建时间
  • 复盘社区事件发生顺序

延伸阅读