From 1a9be6f545ba996498bb98e8674e46053383965e Mon Sep 17 00:00:00 2001 From: amy Date: Thu, 10 Apr 2025 18:50:46 +0330 Subject: [PATCH] fediemoji --- src/commands/fediemoji.ts | 59 +++++++++++++++++++++++++++++++++++++++ src/config.ts | 1 + 2 files changed, 60 insertions(+) create mode 100644 src/commands/fediemoji.ts diff --git a/src/commands/fediemoji.ts b/src/commands/fediemoji.ts new file mode 100644 index 0000000..bca2ed8 --- /dev/null +++ b/src/commands/fediemoji.ts @@ -0,0 +1,59 @@ +import {Command} from "../command.ts"; +import { + ApplicationIntegrationType, AutocompleteFocusedOption, AutocompleteInteraction, + ChatInputCommandInteraction, + InteractionContextType, RESTGetAPIApplicationEmojisResult, Routes, + SlashCommandBuilder +} from "discord.js"; +import { Config } from "../config.ts"; + +export default class FediemojiCommand extends Command { + async run(interaction: ChatInputCommandInteraction, config: Config) { + await interaction.deferReply(); + const emojiname = interaction.options.getString("emoji"); + const data = await (interaction.client.rest.get( + Routes.applicationEmojis(interaction.applicationId) + ) as Promise); + const shit = data.items + const theEmojiInApplicationEmojis = shit.find((item) => item.name === emojiname); + if (!theEmojiInApplicationEmojis) { + const emojis = (await fetch("https://"+config.sharkeyInstance+"/api/emojis").then((res) => res.json())) + const emojiArray = emojis.emojis.map((i: {name: string}) => i.name) + const theEmojiWeWannaUpload = emojis.emojis.find((emoji:{name:string}) => emoji.name === emojiname)!; + console.log(theEmojiWeWannaUpload) + interaction.client.application.emojis.create({ + attachment: theEmojiWeWannaUpload.url, + name: theEmojiWeWannaUpload.name, + }).then(emoji => interaction.followUp(`${emoji}`)) + } else { + await interaction.followUp(`<${theEmojiInApplicationEmojis.animated ? 'a' : ''}:${theEmojiInApplicationEmojis.name}:${theEmojiInApplicationEmojis.id}>`) + } + } + + async autoComplete(interaction: AutocompleteInteraction, config: Config, option: AutocompleteFocusedOption): Promise { + if (option.name === 'emoji') { + const search = option.value + const emojis = (await fetch("https://"+config.sharkeyInstance+"/api/emojis").then((res) => res.json())) + const emojiArray = emojis.emojis.map((i: {name: string}) => i.name) + const matches = emojiArray.filter((item: string) => item && item.toLowerCase().includes(search.toLowerCase())).slice(0, 25) + + interaction.respond(matches.map((emoji: { name: any; }) => ({ + name: emoji!, + value: emoji! + }))) + } + } + slashCommand = new SlashCommandBuilder() + .setName("fediemoji") + .setDescription("Pong!").setIntegrationTypes([ + ApplicationIntegrationType.UserInstall + ]).addStringOption(option => { + return option.setName("emoji").setRequired(true).setDescription("the emojis name") + .setAutocomplete(true) + }) + .setContexts([ + InteractionContextType.BotDM, + InteractionContextType.Guild, + InteractionContextType.PrivateChannel + ]); +} diff --git a/src/config.ts b/src/config.ts index 7c926c1..a9830e1 100644 --- a/src/config.ts +++ b/src/config.ts @@ -4,6 +4,7 @@ const configT = z.object({ token: z.string(), listenbrainzAccount: z.string(), gitapi: z.string(), + sharkeyInstance:z.string(), // applicationid: z.string(), }); export type Config = z.infer;