From cfd6664ea8fc9501278466513b19e8e3c6f47cb8 Mon Sep 17 00:00:00 2001 From: Cynthia Foxwell Date: Sat, 18 May 2024 23:09:28 -0600 Subject: [PATCH] utility: add interaction commands for jumbo, charinfo, appinfo, guildinfo --- src/lib/interactionDispatcher.js | 5 +- src/modules/utility.js | 119 ++++++++++++++++++++++++++++--- 2 files changed, 115 insertions(+), 9 deletions(-) diff --git a/src/lib/interactionDispatcher.js b/src/lib/interactionDispatcher.js index c1b8ac3..9f41577 100644 --- a/src/lib/interactionDispatcher.js +++ b/src/lib/interactionDispatcher.js @@ -46,7 +46,7 @@ async function runCommand(interaction, command) { async function InteractionDispatcher(interaction) { const command = hf.interactionCommands.get(interaction.data.name); const shouldSend = getOption(interaction, command, "send"); - await interaction.acknowledge(shouldSend ? 0 : MessageFlags.EPHEMERAL); + const ack = interaction.acknowledge(shouldSend ? 0 : MessageFlags.EPHEMERAL); try { const response = await runCommand(interaction, command); @@ -93,6 +93,7 @@ async function InteractionDispatcher(interaction) { } try { + await ack; await interaction.createMessage( Object.assign( typeof response === "string" ? {content: response} : response, @@ -105,6 +106,7 @@ async function InteractionDispatcher(interaction) { ) ); } catch (err) { + await ack; await interaction.createMessage({ content: `:warning: An error has occurred:\n\`\`\`${err}\`\`\``, flags: MessageFlags.EPHEMERAL, @@ -115,6 +117,7 @@ async function InteractionDispatcher(interaction) { } } } catch (err) { + await ack; await interaction.createMessage({ content: `:warning: An error has occurred:\n\`\`\`${err}\`\`\``, flags: MessageFlags.EPHEMERAL, diff --git a/src/modules/utility.js b/src/modules/utility.js index 22f21bf..444f3ff 100644 --- a/src/modules/utility.js +++ b/src/modules/utility.js @@ -1,4 +1,5 @@ const Command = require("../lib/command.js"); +const InteractionCommand = require("../lib/interactionCommand.js"); const CATEGORY = "utility"; // {{{ imports @@ -7,6 +8,7 @@ const sharp = require("sharp"); const {Constants, VoiceChannel} = require("@projectdysnomia/dysnomia"); const Endpoints = require("@projectdysnomia/dysnomia/lib/rest/Endpoints.js"); +const {getOption} = require("../lib/interactionDispatcher.js"); const { formatTime, hastebin, @@ -368,12 +370,13 @@ const EMOJI_SETS = { suffix: ".svg", }, noto: { - prefix: "https://gitcdn.xyz/repo/googlefonts/noto-emoji/master/svg/emoji_u", + prefix: + "https://cdn.jsdelivr.net/gh/googlefonts/noto-emoji@master/svg/emoji_u", sep: "_", suffix: ".svg", }, twemoji: { - prefix: "https://twemoji.maxcdn.com/v/latest/svg/", + prefix: "https://jdecked.github.io/twemoji/v/latest/svg/", sep: "-", suffix: ".svg", }, @@ -383,7 +386,7 @@ const EMOJI_SETS = { sep: "-", suffix: ".svg", }, - apple: { + /*apple: { prefix: "https://intrnl.github.io/assetsEmoji/AppleColor/emoji_u", sep: "_", suffix: ".png", @@ -392,14 +395,14 @@ const EMOJI_SETS = { prefix: "https://intrnl.github.io/assetsEmoji/facebook/emoji_u", sep: "_", suffix: ".png", - }, + },*/ }; EMOJI_SETS["noto-old"] = EMOJI_SETS.blobs; EMOJI_SETS.mutant = EMOJI_SETS.mustd; EMOJI_SETS.mutstd = EMOJI_SETS.mustd; -EMOJI_SETS.ms = EMOJI_SETS.mustd; +//EMOJI_SETS.ms = EMOJI_SETS.mustd; EMOJI_SETS.twitter = EMOJI_SETS.twemoji; -EMOJI_SETS.fb = EMOJI_SETS.facebook; +//EMOJI_SETS.fb = EMOJI_SETS.facebook; // }}} @@ -1205,6 +1208,48 @@ jumbo.callback = async function (msg, line) { }; hf.registerCommand(jumbo); +const jumboInteraction = new InteractionCommand("jumbo"); +jumboInteraction.helpText = "Gets the raw image of an emoji."; +jumboInteraction.options.content = { + name: "content", + type: Constants.ApplicationCommandOptionTypes.STRING, + description: "Emoji to get image of", + required: true, + default: "", +}; +jumboInteraction.options.set = { + name: "set", + type: Constants.ApplicationCommandOptionTypes.STRING, + description: "Emoji set for non-custom emoji", + required: false, + choices: [ + { + name: "Twemoji (Twitter/Discord)", + value: "twemoji", + }, + { + name: "Noto (Google)", + value: "noto", + }, + { + name: "Noto Old (Blobs)", + value: "blobs", + }, + { + name: "Mutant Standard", + value: "mustd", + }, + ], + default: "twemoji", +}; +jumboInteraction.callback = async function (interaction) { + const content = getOption(interaction, jumboInteraction, "content"); + const set = getOption(interaction, jumboInteraction, "set"); + + return jumbo.callback(interaction, `--${set} ${content}`); +}; +hf.registerCommand(jumboInteraction); + const charinfo = new Command("charinfo"); charinfo.category = CATEGORY; charinfo.helpText = "Get information about a set of characters."; @@ -1216,7 +1261,16 @@ charinfo.callback = async function (msg, line) { const lines = names .map( ([code, name], index) => - `\`\\u${code}\`: ${name} - ${chars[index]} - ` + `[\`\\u${code}${ + chars[index].legnth > 1 + ? ` (${chars[index] + .split("") + .map((c) => `\\u${c.codePointAt().toString(16)}`) + .join("")})` + : "" + }\`](): ${name} - ${ + chars[index] + }` ) .join("\n"); @@ -1228,6 +1282,22 @@ charinfo.callback = async function (msg, line) { }; hf.registerCommand(charinfo); +const charinfoInteraction = new InteractionCommand("charinfo"); +charinfoInteraction.helpText = "Get information about a set of characters."; +charinfoInteraction.options.content = { + name: "content", + type: Constants.ApplicationCommandOptionTypes.STRING, + description: "Characters to get info for", + required: true, + default: "", +}; +charinfoInteraction.callback = async function (interaction) { + const content = getOption(interaction, charinfoInteraction, "content"); + + return charinfo.callback(interaction, content); +}; +hf.registerCommand(charinfoInteraction); + const presence = new Command("presence"); presence.category = CATEGORY; presence.helpText = "Get presences of a user."; @@ -1879,6 +1949,22 @@ appinfo.callback = async function (msg, line) { }; hf.registerCommand(appinfo); +const appinfoInteraction = new InteractionCommand("appinfo"); +appinfoInteraction.helpText = "Get information on an application"; +appinfoInteraction.options.id = { + name: "id", + type: Constants.ApplicationCommandOptionTypes.STRING, + description: "Application ID to get info for", + required: true, + default: "", +}; +appinfoInteraction.callback = async function (interaction) { + const id = getOption(interaction, appinfoInteraction, "id"); + + return appinfo.callback(interaction, id); +}; +hf.registerCommand(appinfoInteraction); + const guildinfo = new Command("guildinfo"); guildinfo.category = CATEGORY; guildinfo.helpText = "Get information on a guild"; @@ -1894,7 +1980,8 @@ guildinfo.callback = async function (msg, line) { let _guild, clanEmbed; if (!line || line == "") { if (!msg.guildID) return "Not in a guild."; - _guild = {source: "local", data: msg.channel.guild}; + const __guild = msg.channel.guild ?? hf.bot.guilds.get(msg.guildID); + if (__guild) _guild = {source: "local", data: __guild}; } else { if (!SNOWFLAKE_REGEX.test(line)) return "Not a snowflake."; const snowflake = line.match(SNOWFLAKE_REGEX)[1]; @@ -2599,4 +2686,20 @@ guildinfo.callback = async function (msg, line) { }; hf.registerCommand(guildinfo); +const guildinfoInteraction = new InteractionCommand("guildinfo"); +guildinfoInteraction.helpText = "Get information on an guild"; +guildinfoInteraction.options.id = { + name: "id", + type: Constants.ApplicationCommandOptionTypes.STRING, + description: "Guild ID to get info for", + required: false, + default: "", +}; +guildinfoInteraction.callback = async function (interaction) { + const id = getOption(interaction, guildinfoInteraction, "id"); + + return guildinfo.callback(interaction, id); +}; +hf.registerCommand(guildinfoInteraction); + // }}}