Discord Snowflake检查器
解码任意 Discord ID,查看它的创建时间以及距今多久:账号、服务器、频道或消息已经存在多久。免费,无需登录,ID 不会离开你的浏览器。
什么是 Discord Snowflake ID?
Discord 中的用户、服务器、频道、消息和身份组都使用同一种格式的 ID,称为 Snowflake:一个 64 位的数字,其高 42 位是 ID 的创建时刻,以毫秒计数。解码这一部分,就能知道 Discord 账号是什么时候创建的、服务器或频道已经存在多久,或者一条消息是什么时候发送的。
Snowflake检查器如何工作
- 把一个或多个 Discord ID 粘贴到输入框中。多个 ID 可以用空格、逗号或换行分隔。
- 点击 解码 或按 Enter(Shift+Enter 换行)。
- 每个 ID 都有各自的结果:它的创建日期和时间(使用页面语言和你设备的时区),以及距今多久。
- Unix 时间(秒) 和 Discord 时间戳 各有一个复制按钮。把 Discord 时间戳粘贴到 Discord 消息中,会按每位读者自己的时区显示日期。
- 工作者 ID、进程 ID 和 增量 是低 22 位中的三个字段,前 42 位(二进制) 则逐位显示时间戳部分。
- 无法解码的 ID 会在输入框下方列出,其他 ID 仍会正常解码。工具接受 17 到 20 位数字,且创建时间不能比当前时间晚超过一天。
如何找到 Discord ID
- 在电脑版 Discord 中,打开设置并开启开发者模式:在当前的桌面版和网页版应用中,它位于开发者下;在旧版本和手机上,它位于高级设置下。
- 右键点击用户、服务器、频道或消息。
- 选择用于复制 ID 的菜单项。
- 把 ID 粘贴到 Snowflake检查器中,然后点击 解码。
查看 Discord 账号的年龄
用户 ID 保存着账号的创建时刻,所以解码后就能看出账号已经存在多久。这并不是用户加入某个服务器的时间:Discord 会单独记录那个时间。当一次突袭或一波垃圾信息来自不久前才创建的账号时,账号年龄可以帮到管理员,但新账号本身说明不了什么:每个账号都曾是新的。
Snowflake 位结构:64 位
Discord Snowflake 是一个 64 位的数字,分为四个字段,从最高位到最低位依次为:
- 时间戳 - 第 22-63 位(42 位):自 Discord Epoch 起的毫秒数。42 位大约能容纳 139 年的毫秒数,所以这个字段可以用到 2154 年。
- 工作者 ID - 第 17-21 位(5 位):0 到 31 之间的数字,由 Discord 内部使用。
- 进程 ID - 第 12-16 位(5 位):另一个内部数字,范围是 0 到 31。
- 增量 - 第 0-11 位(12 位):从 0 到 4095 的计数器。
要得到时间戳,把 ID 右移 22 位,再加上起始时间:timestamp_ms = (snowflake >> 22) + 1420070400000。例如,175928847299117063 解码为 2016-04-30T11:18:25.796Z,工作者 ID 为 1,进程 ID 为 0,增量为 7。
Discord Epoch
Discord 从自己的起点开始计时,即 2015年1月1日 00:00 UTC(Unix 时间 1420070400000 毫秒),而不是 1970 年的 Unix 纪元。从 2015 年开始计数,意味着 42 位时间戳可以用到 2154 年,而不是 2109 年。任何 Snowflake 都不可能早于 Discord Epoch:时间戳字段无法表示在它之前的时间。
一个解码器,适用于所有类型的 ID
Snowflake 本身并不说明它属于什么,所以工具对用户 ID、服务器 ID、频道 ID、消息 ID 和身份组 ID 的解码方式都一样。ID 类型下的按钮只会改变日期上方的标签,例如用户创建时间或消息发送时间;解码出的数值保持不变。对于消息 ID,时间是消息发送的时间;对于服务器、频道或身份组,则是它们创建的时间。有两类对象与其所属对象共用同一个 ID:从某条消息创建的子区使用该消息的 ID,所以它的时间就是消息的发送时间;@everyone 身份组使用所属服务器的 ID。
使用 Snowflake 的常见陷阱
- JavaScript 中的精度丢失。这个工具接受的每个 ID 都大于 JavaScript 能精确存储的最大整数(2^53 - 1),所以
Number(snowflake) 可能会悄悄改变最后几位数字。请把 ID 当作字符串保存,并像这个工具一样使用 BigInt 进行运算。
- 创建账号不等于加入服务器。用户 ID 说明的是账号的创建时间,而不是用户加入某个服务器的时间。
- 时区。Snowflake 中的时间是 UTC。工具按你设备的时区显示日期,并附上时区名称,所以同一个 ID 在两台设备上可能显示不同;而 Unix 时间在任何地方都相同。
- 被删除的内容仍保留 ID。工具只读取数字本身,所以即使 ID 所属的消息、频道或账号已被删除,它仍然可以解码。
更多免费 Discord 工具
由 Pigona 提供支持 - 为 Discord 打造的免费翻译