diff --git a/plugins/Commands/index.ts b/plugins/Commands/index.ts index 06c36c7..9285149 100644 --- a/plugins/Commands/index.ts +++ b/plugins/Commands/index.ts @@ -8,6 +8,7 @@ import { import { pluginListCommand, themeListCommand } from "./src/commands/lists"; import { petPetCommand } from "./src/commands/petpet"; import { konoSelfCommand, konoSendCommand } from "./src/commands/konochan"; +import { firstMessageCommand } from "./src/commands/firstmessage"; import settings from "./settings"; // Initialize storage with default values @@ -35,6 +36,7 @@ if (!storage.enabledCommands) { themeList: true, konoself: true, konosend: true, + firstmessage: true, }; } @@ -48,6 +50,7 @@ const commandMap = { themeList: themeListCommand, konoself: konoSelfCommand, konosend: konoSendCommand, + firstmessage: firstMessageCommand, }; // Store registered commands for cleanup diff --git a/plugins/Commands/src/commands/firstmessage.ts b/plugins/Commands/src/commands/firstmessage.ts index 76b9351..2ad9b3a 100644 --- a/plugins/Commands/src/commands/firstmessage.ts +++ b/plugins/Commands/src/commands/firstmessage.ts @@ -1,7 +1,5 @@ -import { registerCommand } from "@vendetta/commands"; import { findByProps } from "@vendetta/metro"; import { url } from "@vendetta/metro/common"; -import { storage } from "@vendetta/plugin"; const messageUtil = findByProps( "sendBotMessage", @@ -9,114 +7,6 @@ const messageUtil = findByProps( "receiveMessage", ); const APIUtils = findByProps("getAPIBaseURL", "get"); -let commands = []; - -export const onLoad = () => { - if (!storage?.enabledCommands?.firstmessage) return; - - commands.push( - registerCommand({ - name: "firstmessage", - displayName: "firstmessage", - description: "Tired of scrolling to first message?", - displayDescription: "Tired of scrolling to first message?", - type: 1, - inputType: 1, - applicationId: "-1", - options: [ - { - name: "user", - displayName: "user", - description: - "Target user to get their first message in this server/dm", - displayDescription: - "Target user to get their first message in this server/dm", - type: 6, - required: false, - }, - { - name: "channel", - displayName: "channel", - description: "Target channel to get first message of", - displayDescription: "Target channel to get first message of", - type: 7, - required: false, - }, - { - name: "send", - displayName: "send", - description: "Whether to send the resulting url", - displayDescription: "Whether to send the resulting url", - type: 5, - required: false, - }, - ], - async execute(args, ctx) { - const user = args.find((o: any) => o.name === "user")?.value; - const channel = args.find((o: any) => o.name === "channel")?.value; - const send = args.find((o: any) => o.name === "send")?.value; - - const guildId = ctx.guild?.id; - const channelId = ctx.channel.id; - const isDM = ctx.channel.type === 1; - - let result = "https://discord.com/channels/"; - - try { - // Handle DM error cases first - if (isDM && (channel || (user && channel))) { - messageUtil.sendBotMessage( - channelId, - "This combination cannot be used in DMs!", - ); - return { type: 4 }; - } - - if (!user && !channel) { - if (isDM) { - const message = await getFirstDMMessage(channelId); - result += `@me/${channelId}/${message.id}`; - } else { - const message = await getFirstGuildMessage(guildId); - result += `${guildId}/${message.channel_id}/${message.id}`; - } - } else if (user) { - if (isDM) { - const message = await getFirstDMMessage(channelId, user); - result += `@me/${channelId}/${message.id}`; - } else { - const message = await getFirstGuildMessage(guildId, user); - result += `${guildId}/${message.channel_id}/${message.id}`; - } - } else if (channel) { - const message = await getFirstGuildMessage(guildId, null, channel); - result += `${guildId}/${channel}/${message.id}`; - } else { - const message = await getFirstGuildMessage(guildId, user, channel); - result += `${guildId}/${channel}/${message.id}`; - } - - if (send) { - messageUtil.sendBotMessage(channelId, result); - return { type: 4 }; - } else { - return url.openDeeplink(result); - } - } catch (error) { - messageUtil.sendBotMessage( - channelId, - "Failed to fetch the first message. Please try again.", - ); - return { type: 4 }; - } - }, - }), - ); -}; - -export const onUnload = () => { - for (const unregisterCommands of commands) unregisterCommands(); -}; const getFirstGuildMessage = async ( guildId: number, @@ -144,3 +34,100 @@ const getFirstDMMessage = async (dmId: number, userId?: number) => { }) ).body.messages[0][0]; }; + +export const firstMessageCommand = { + name: "firstmessage", + displayName: "firstmessage", + description: "Tired of scrolling to first message?", + displayDescription: "Tired of scrolling to first message?", + options: [ + { + name: "user", + displayName: "user", + description: "Target user to get their first message in this server/dm", + displayDescription: + "Target user to get their first message in this server/dm", + type: 6, + required: false, + }, + { + name: "channel", + displayName: "channel", + description: "Target channel to get first message of", + displayDescription: "Target channel to get first message of", + type: 7, + required: false, + }, + { + name: "send", + displayName: "send", + description: "Whether to send the resulting url", + displayDescription: "Whether to send the resulting url", + type: 5, + required: false, + }, + ], + applicationId: "-1", + inputType: 1, + type: 1, + execute: async (args: any, ctx: any) => { + const options = new Map(args.map((option: any) => [option.name, option])); + const user = options.get("user")?.value; + const channel = options.get("channel")?.value; + const send = options.get("send")?.value; + + const guildId = ctx.guild?.id; + const channelId = ctx.channel.id; + const isDM = ctx.channel.type === 1; + + try { + // Handle DM error cases first + if (isDM && (channel || (user && channel))) { + messageUtil.sendBotMessage( + channelId, + "This combination cannot be used in DMs!", + ); + return { type: 4 }; + } + + let result = "https://discord.com/channels/"; + + if (!user && !channel) { + if (isDM) { + const message = await getFirstDMMessage(channelId); + result += `@me/${channelId}/${message.id}`; + } else { + const message = await getFirstGuildMessage(guildId); + result += `${guildId}/${message.channel_id}/${message.id}`; + } + } else if (user) { + if (isDM) { + const message = await getFirstDMMessage(channelId, user); + result += `@me/${channelId}/${message.id}`; + } else { + const message = await getFirstGuildMessage(guildId, user); + result += `${guildId}/${message.channel_id}/${message.id}`; + } + } else if (channel) { + const message = await getFirstGuildMessage(guildId, null, channel); + result += `${guildId}/${channel}/${message.id}`; + } else { + const message = await getFirstGuildMessage(guildId, user, channel); + result += `${guildId}/${channel}/${message.id}`; + } + + if (send) { + messageUtil.sendBotMessage(channelId, result); + return { type: 4 }; + } else { + return url.openDeeplink(result); + } + } catch (error) { + messageUtil.sendBotMessage( + channelId, + "Failed to fetch the first message. Please try again.", + ); + return { type: 4 }; + } + }, +};