From 6679f2c0e45b5ba2495a9e9f94c8d105637cb258 Mon Sep 17 00:00:00 2001 From: Fleny Date: Thu, 14 Aug 2025 21:08:19 +0200 Subject: [PATCH] chore(bot,utils): Move snowflake utils to @discordeno/utils (#4345) --- packages/bot/src/index.ts | 1 - packages/bot/src/transformers.ts | 2 +- packages/rest/src/manager.ts | 9 +++------ packages/utils/src/index.ts | 1 + packages/{bot/src/utils.ts => utils/src/snowflakes.ts} | 4 ++-- 5 files changed, 7 insertions(+), 10 deletions(-) rename packages/{bot/src/utils.ts => utils/src/snowflakes.ts} (72%) diff --git a/packages/bot/src/index.ts b/packages/bot/src/index.ts index 9632132eb..c0d3c2824 100644 --- a/packages/bot/src/index.ts +++ b/packages/bot/src/index.ts @@ -12,4 +12,3 @@ export * from './handlers.js' export * from './helpers.js' export * from './transformers/index.js' export * from './transformers.js' -export * from './utils.js' diff --git a/packages/bot/src/transformers.ts b/packages/bot/src/transformers.ts index 8e6619296..8f8eba3da 100644 --- a/packages/bot/src/transformers.ts +++ b/packages/bot/src/transformers.ts @@ -79,6 +79,7 @@ import type { DiscordWelcomeScreen, RecursivePartial, } from '@discordeno/types' +import { bigintToSnowflake, snowflakeToBigint } from '@discordeno/utils' import type { Bot } from './bot.js' import { createDesiredPropertiesObject, @@ -250,7 +251,6 @@ import { transformMediaGalleryItemToDiscordMediaGalleryItem, transformUnfurledMediaItemToDiscordUnfurledMediaItem, } from './transformers/reverse/index.js' -import { bigintToSnowflake, snowflakeToBigint } from './utils.js' export type Transformers = { customizers: { diff --git a/packages/rest/src/manager.ts b/packages/rest/src/manager.ts index 3c7c7e5d2..14510c5d2 100644 --- a/packages/rest/src/manager.ts +++ b/packages/rest/src/manager.ts @@ -68,6 +68,7 @@ import { hasProperty, logger, processReactionString, + snowflakeToTimestamp, urlToBase64, } from '@discordeno/utils' import { createInvalidRequestBucket } from './invalidBucket.js' @@ -558,12 +559,8 @@ export function createRestManager(options: CreateRestManagerOptions): RestManage // The 2 exceptions are for message delete, so we need to check if we are in that route if (method === 'DELETE' && splittedRoute.length === 5 && splittedRoute[1] === 'channels' && strippedRoute.endsWith('/messages/x')) { - const messageId = BigInt(splittedRoute[4]) - - // TODO: We should move the utility from @discordeno/bot to @discordeno/utils and use that here - // See https://discord.com/developers/docs/reference#snowflakes-snowflake-id-format-structure-left-to-right - const timestamp = Number(messageId >> 22n) + 1420070400000 - + const messageId = splittedRoute[4] + const timestamp = snowflakeToTimestamp(messageId) const now = Date.now() // https://github.com/discord/discord-api-docs/issues/1092 diff --git a/packages/utils/src/index.ts b/packages/utils/src/index.ts index 964eb2976..b2a574e8b 100644 --- a/packages/utils/src/index.ts +++ b/packages/utils/src/index.ts @@ -11,6 +11,7 @@ export * from './logger.js' export * from './oauth2.js' export * from './permissions.js' export * from './reactions.js' +export * from './snowflakes.js' export * from './token.js' export * from './typeguards.js' export * from './urls.js' diff --git a/packages/bot/src/utils.ts b/packages/utils/src/snowflakes.ts similarity index 72% rename from packages/bot/src/utils.ts rename to packages/utils/src/snowflakes.ts index 405e4aa73..806cce675 100644 --- a/packages/bot/src/utils.ts +++ b/packages/utils/src/snowflakes.ts @@ -5,9 +5,9 @@ export function snowflakeToBigint(snowflake: BigString): bigint { } export function bigintToSnowflake(snowflake: BigString): string { - return snowflake ? snowflake.toString() : '' + return snowflake.toString() } export function snowflakeToTimestamp(snowflake: BigString): number { - return Number(BigInt(snowflake) / 4194304n + 1420070400000n) + return Number(BigInt(snowflake) >> 22n) + 1420070400000 }