Discordのスノーフレーク:長いID番号の意味
スノーフレークとは、Discordがすべてのユーザー、サーバー、チャンネル、ロール、メッセージに与える、一意の64ビットの数字です。 最初の42ビットはタイムスタンプを保持するため、どのスノーフレークからも、それが作られた時刻がミリ秒単位でわかります。
スノーフレークとは
DiscordでIDをコピーするとき、あなたはスノーフレークをコピーしています。175928847299117063のような、17〜19桁の長い整数です。Discordは、ユーザー、サーバー(APIではギルドと呼ばれます)、チャンネル、ロール、メッセージ、絵文字などに、同じ形式を使っています。
この形式は、最初にTwitterで使われた仕組みに由来します。目的は、多くのマシンが、次の番号を互いに尋ねることなく、一意で、おおむね時間順のIDを作れるようにすることです。
ビットの配置
スノーフレークは、左から四つの部分に分かれています。
- 42ビットのタイムスタンプ: 2015年の最初の秒(Discordのエポック、1420070400000)からのミリ秒。
- 5ビットのワーカーIDと5ビットのプロセスID: どのDiscordのマシンとプロセスが作ったか。
- 12ビットのインクリメント: 同じミリ秒内に、そのプロセスが作るIDごとに増えるカウンター。
作成時刻を読むには、数字を22ビット右にシフトし、エポックを足します。そうすると、ミリ秒単位のUnixタイムスタンプになります。だから、誰かに聞かなくても、サーバーやメッセージがいつ作られたかがわかるのです。
サーバーのオーナーが気にする理由
スノーフレークに主に出会うのは、開発者モード(ユーザー設定、詳細設定)をオンにして、何かを右クリックし「IDをコピー」を選んだときです。バグ報告、ボットの設定、名前を変えた悪質な人を取り除くときなどに、IDが求められます。名前は変わりますが、IDは変わりません。
実用上の注意が二つあります。
- IDは公開された識別子で、秘密ではありません。チャンネルのIDを知っても、そのチャンネルに入れるわけではありません。
- 多くのプログラムが通常の数値として保存できる大きさを超えるため、DiscordのAPIはIDを文字列として送ります。長い数字を丸めてしまう表計算ソフトは、IDを壊すことがあるので、テキストとして保存してください。
無料のスノーフレークのデコーダーは、IDを、あなたのブラウザ内で作成日に変換します。
NoxyrがどうIDを使うか
Noxyrは、機能に必要な場所でDiscordのユーザーIDを保存します。チケットを開いた人、請求書の顧客、抽選の参加、投票、レビューの投稿者、ブラックリストなどです。ダッシュボードは、サインインのためにあなたのID、ユーザー名、アバターも保持します。保存される内容の正確な一覧は、データとプライバシーのドキュメントにあります。
一部の機能は、IDを入力として受け取ります。たとえば、カスタムボットのオーナーは、残りの時間を、ユーザーIDで別の人に移せます。そしてボットは、何度名前を変えても、自分のユーザーIDを保ちます。そのため、それに紐づくロールと上書きは、リブランディングの後も動き続けます。
関連する用語
アプリケーションIDもスノーフレークですし、すべてのギルドのIDもそうです。シャーディングでは、ギルドのIDを使って、どのシャードがサーバーを受け持つかを決めます。シャーディングをご覧ください。
よくある質問
DiscordのIDはどう見つけますか?
ユーザー設定の詳細設定で開発者モードをオンにしてください。そのあと、ユーザー、チャンネル、ロール、サーバーを右クリックして「IDをコピー」を選びます。
IDから作成日がわかりますか?
はい。数字を22ビット右にシフトし、1420070400000を足すと、ミリ秒単位のUnix時間になります。スノーフレークのデコーダーのツールが、それを自動でやってくれます。
DiscordのIDは非公開ですか?
いいえ。IDは公開された識別子で、それ自体ではアクセスを与えません。秘密として扱うべきはIDではなく、トークンです。