diff --git a/src/commands/forwardToOwner.ts b/src/commands/forwardToOwner.ts index 5c8e73d..207eab7 100644 --- a/src/commands/forwardToOwner.ts +++ b/src/commands/forwardToOwner.ts @@ -13,78 +13,85 @@ import { EmbedBuilder, ActionRowBuilder, ButtonStyle, + type Message, } from "discord.js"; import { ids } from "../config/ids.js"; import { logger } from "../utils/logger.js"; -export const forwardOwnerDM = { - data: new ContextMenuCommandBuilder().setName("Forward to Naomi"). - setType(ApplicationCommandType.Message), - - async execute(interaction: MessageContextMenuCommandInteraction): - Promise { - await interaction.deferReply({ ephemeral: true }); - - if (interaction.user.id !== ids.users.naomi) { - await interaction.editReply("❌ Only Naomi can use this command."); - return; - } - - const message = interaction.targetMessage; - - if (message.author.id === ids.users.naomi) { - await interaction.editReply( - "No need to forward your own message to yourself 😄", - ); - return; - } - - try { - const naomi = await interaction.client.users.fetch(ids.users.naomi); - const forwardedEmbed = new EmbedBuilder(). - setColor(0x58_65_F2). - setTitle(`Message from ${String(message.author.tag)}!`). - setDescription( - `${(message.attachments.size > 0 - ? `**Attachments:** ${String(message.attachments.size)} +const buildForwardedEmbed = (message: Message): EmbedBuilder => { + const forwardedEmbed = new EmbedBuilder(). + setColor(0x58_65_F2). + setTitle(`Message from ${String(message.author.tag)}!`). + setDescription( + `${(message.attachments.size > 0 + ? `**Attachments:** ${String(message.attachments.size)} file(s)\n\n` - : "\n") + : "\n") + (message.embeds.length > 0 ? `**Embeds:** ${String(message.embeds.length)}\n\n` : "")} - \n${message.content !== "" || message.content !== null - ? message.content - : "*[No text content]*"}\n\n`, - ); - - const viewButton = new ButtonBuilder(). - setLabel("View Message"). - setURL(message.url). - setStyle(ButtonStyle.Link); - - const row = new ActionRowBuilder().addComponents( - viewButton, - ); - await naomi.send({ - components: [ row ], - embeds: [ forwardedEmbed ], - files: message.attachments.map((att) => { - return att.url; - }), - }); - - await interaction.editReply({ - content: "✅ Forwarded to your DMs!", - }); - } catch (error) { - let replyText = "❌ Failed to forward message."; - if (error instanceof DiscordAPIError && error.code === 50_007) { - replyText = `${replyText} (Naomi's DMs might be closed)`; - } - await interaction.editReply(replyText); - if (error instanceof Error) { - await logger.error("operation", error); - } - } - }, + \n${message.content}\n\n`, + ); + return forwardedEmbed; +}; +const buildViewButtonFunction = (message: Message): ButtonBuilder => { + const viewButton = new ButtonBuilder(). + setLabel("View Message"). + setURL(message.url). + setStyle(ButtonStyle.Link); + return viewButton; +}; + +const data = new ContextMenuCommandBuilder().setName("Forward to Naomi"). + setType(ApplicationCommandType.Message); + +const execute = async(interaction: MessageContextMenuCommandInteraction): +Promise => { + await interaction.deferReply({ ephemeral: true }); + + if (interaction.user.id !== ids.users.naomi) { + await interaction.editReply("❌ Only Naomi can use this command."); + return; + } + + const message = interaction.targetMessage; + if (message.author.id === ids.users.naomi) { + await interaction.editReply( + "No need to forward your own message to yourself 😄", + ); + return; + } + + try { + const naomi = await interaction.client.users.fetch(ids.users.naomi); + const forwardedEmbed = buildForwardedEmbed(message); + const viewButton = buildViewButtonFunction(message); + + const row = new ActionRowBuilder().addComponents( + viewButton, + ); + await naomi.send({ + components: [ row ], + embeds: [ forwardedEmbed ], + files: message.attachments.map((att) => { + return att.url; + }), + }); + + await interaction.editReply({ + content: "✅ Forwarded to your DMs!", + }); + } catch (error) { + let replyText = "❌ Failed to forward message."; + if (error instanceof DiscordAPIError && error.code === 50_007) { + replyText = `${replyText} (Naomi's DMs might be closed)`; + } + await interaction.editReply(replyText); + await logger.error("operation", error); + } +}; + +export const forwardOwnerDM = { + data, + execute, }; diff --git a/src/index.ts b/src/index.ts index 03243d9..47634b1 100644 --- a/src/index.ts +++ b/src/index.ts @@ -148,7 +148,10 @@ amari.discord.on(Events.ThreadCreate, (thread) => { const { bugReports, communityFeedback, featureRequests, policyIdeation } = ids.channels; if ( - ![ bugReports, communityFeedback, featureRequests, policyIdeation ].includes( + ![ bugReports, + communityFeedback, + featureRequests, + policyIdeation ].includes( thread.parent.id, ) ) { diff --git a/src/scripts/deployGlobal.ts b/src/scripts/deployGlobal.ts index 4445cfb..deebd9f 100644 --- a/src/scripts/deployGlobal.ts +++ b/src/scripts/deployGlobal.ts @@ -29,4 +29,4 @@ const requestCommand = async(): Promise => { } } }; -requestCommand(); +void requestCommand();