From d022b039d9dd7ce5d6dd3e54e6c61eb51e97927f Mon Sep 17 00:00:00 2001 From: Tarrgon <61888458+Tarrgon@users.noreply.github.com> Date: Thu, 29 May 2025 00:13:49 -0400 Subject: [PATCH] Add a context menu command for whois --- src/commands/whois.context-menu.ts | 17 +++++++++++++++ src/commands/whois.ts | 31 ++------------------------- src/utils/index.ts | 2 ++ src/utils/whois.ts | 34 ++++++++++++++++++++++++++++++ 4 files changed, 55 insertions(+), 29 deletions(-) create mode 100644 src/commands/whois.context-menu.ts create mode 100644 src/utils/whois.ts diff --git a/src/commands/whois.context-menu.ts b/src/commands/whois.context-menu.ts new file mode 100644 index 0000000..2d5a254 --- /dev/null +++ b/src/commands/whois.context-menu.ts @@ -0,0 +1,17 @@ +import { ApplicationIntegrationType, Client, InteractionContextType, MessageFlags, PermissionFlagsBits, ContextMenuCommandBuilder, ApplicationCommandType, ContextMenuCommandInteraction, UserContextMenuCommandInteraction } from 'discord.js'; +import { handleWhoIsInteraction } from '../utils'; + +export default { + name: 'whois', + data: new ContextMenuCommandBuilder() + .setName('whois') + .setIntegrationTypes(ApplicationIntegrationType.GuildInstall) + .setContexts(InteractionContextType.Guild) + .setDefaultMemberPermissions(PermissionFlagsBits.BanMembers) + .setType(ApplicationCommandType.User), + handler: async function (client: Client, interaction: UserContextMenuCommandInteraction) { + const idToUse = interaction.targetUser.id; + + handleWhoIsInteraction(interaction, idToUse, true); + } +}; \ No newline at end of file diff --git a/src/commands/whois.ts b/src/commands/whois.ts index c9a5dfa..8e7ffdd 100644 --- a/src/commands/whois.ts +++ b/src/commands/whois.ts @@ -1,7 +1,5 @@ import { ApplicationIntegrationType, ChatInputCommandInteraction, Client, InteractionContextType, MessageFlags, PermissionFlagsBits, SlashCommandBuilder } from 'discord.js'; -import { Database } from '../shared/Database'; -import { getE621User } from '../utils'; -import { config } from '../config'; +import { handleWhoIsInteraction } from '../utils'; export default { name: 'whois', @@ -33,31 +31,6 @@ export default { const idToUse = (user?.id ?? id) as string; - const results = await Database.getE621Ids(idToUse); - - if (results.length > 0) { - const mappedResults = results.map(e => `- ${config.E621_BASE_URL}/users/${e}\n`); - - const alts: string[] = []; - - for (const e621Id of results) { - const discordIds = await Database.getDiscordIds(e621Id); - - for (const discordId of discordIds) { - if (discordId != idToUse && !alts.includes(discordId)) alts.push(discordId); - } - } - - let content = `<@${idToUse}>'s e621 account(s):\n${mappedResults}`; - - if (alts.length > 0) { - const mappedAlts = alts.map(id => `- <@${id}>\n`); - content += `\n\nDiscord alts found:\n${mappedAlts}`; - } - - interaction.reply(content); - } else { - interaction.reply('No e621 accounts found for this user'); - } + handleWhoIsInteraction(interaction, idToUse); } }; \ No newline at end of file diff --git a/src/utils/index.ts b/src/utils/index.ts index ba146dc..f500064 100644 --- a/src/utils/index.ts +++ b/src/utils/index.ts @@ -8,4 +8,6 @@ export * from './message-utils'; export * from './ms-to-human'; export * from './refresh-commands'; export * from './string-utils'; +export * from './ticket-utils'; export * from './wait'; +export * from './whois'; diff --git a/src/utils/whois.ts b/src/utils/whois.ts new file mode 100644 index 0000000..358e22c --- /dev/null +++ b/src/utils/whois.ts @@ -0,0 +1,34 @@ +import { CommandInteraction, MessageFlags } from 'discord.js'; +import { config } from '../config'; +import { Database } from '../shared/Database'; + +export async function handleWhoIsInteraction(interaction: CommandInteraction, idToUse: string, ephemeral = false) { + const results = await Database.getE621Ids(idToUse); + + if (results.length > 0) { + const mappedResults = results.map(e => `- ${config.E621_BASE_URL}/users/${e}\n`); + + const alts: string[] = []; + + for (const e621Id of results) { + const discordIds = await Database.getDiscordIds(e621Id); + + for (const discordId of discordIds) { + if (discordId != idToUse && !alts.includes(discordId)) alts.push(discordId); + } + } + + let content = `<@${idToUse}>'s e621 account(s):\n${mappedResults}`; + + if (alts.length > 0) { + const mappedAlts = alts.map(id => `- <@${id}>\n`); + content += `\n\nDiscord alts found:\n${mappedAlts}`; + } + + if (ephemeral) interaction.reply({ content, flags: [MessageFlags.Ephemeral] }); + else interaction.reply(content); + } else { + if (ephemeral) interaction.reply({ content: 'No e621 accounts found for this user', flags: [MessageFlags.Ephemeral] }); + else interaction.reply('No e621 accounts found for this user'); + } +} \ No newline at end of file