diff --git a/src/types/commandTypes.ts b/src/types/commandTypes.ts index 4d9452e..b0117de 100644 --- a/src/types/commandTypes.ts +++ b/src/types/commandTypes.ts @@ -37,3 +37,9 @@ export type LFGMember = { name: string; joined?: boolean; }; + +export type UrlIds = { + guildId: bigint; + channelId: bigint; + messageId: bigint; +}; diff --git a/src/utils.ts b/src/utils.ts index 96f11a5..219909c 100644 --- a/src/utils.ts +++ b/src/utils.ts @@ -1,9 +1,23 @@ -import { Interaction, log, LT, Message } from '../deps.ts'; +import { CreateMessage, Interaction, log, LT, Message } from '../deps.ts'; +import { UrlIds } from './types/commandTypes.ts'; const jsonStringifyBig = (input: any) => { return JSON.stringify(input, (_key, value) => typeof value === 'bigint' ? value.toString() + 'n' : value); }; +// Get/Generate Discord Message URL +const idsToMessageUrl = (ids: UrlIds) => `https://discord.com/channels/${ids.guildId}/${ids.channelId}/${ids.messageId}`; +const messageUrlToIds = (url: string): UrlIds => { + url = url.toLowerCase(); + const [guildId, channelId, messageId] = (url.split('channels')[1] || '').split('/'); + + return { + guildId: BigInt(guildId || '0'), + channelId: BigInt(channelId || '0'), + messageId: BigInt(messageId || '0'), + }; +}; + const genericLogger = (level: LT, message: string) => log(level, message); const interactionSendError = (location: string, interaction: Interaction | string, err: Error) => genericLogger(LT.ERROR, `${location} | Failed to respond to interaction: ${jsonStringifyBig(interaction)} | Error: ${err.name} - ${err.message}`); @@ -11,7 +25,7 @@ const messageEditError = (location: string, message: Message | string, err: Erro genericLogger(LT.ERROR, `${location} | Failed to edit message: ${jsonStringifyBig(message)} | Error: ${err.name} - ${err.message}`); const messageGetError = (location: string, message: Message | string, err: Error) => genericLogger(LT.ERROR, `${location} | Failed to get message: ${jsonStringifyBig(message)} | Error: ${err.name} - ${err.message}`); -const messageSendError = (location: string, message: Message | string, err: Error) => +const messageSendError = (location: string, message: Message | CreateMessage | string, err: Error) => genericLogger(LT.ERROR, `${location} | Failed to send message: ${jsonStringifyBig(message)} | Error: ${err.name} - ${err.message}`); const messageDeleteError = (location: string, message: Message | string, err: Error) => genericLogger(LT.ERROR, `${location} | Failed to delete message: ${jsonStringifyBig(message)} | Error: ${err.name} - ${err.message}`); @@ -36,4 +50,6 @@ export default { reactionDeleteError, }, jsonStringifyBig, + messageUrlToIds, + idsToMessageUrl, };