const { SlashCommandBuilder } = require("discord.js"); module.exports = { data: new SlashCommandBuilder() .setName("emotelog") .setDescription("Logs the emote inputted.") .addStringOption(option => option.setName("emote") .setDescription("The emote to log.") .setRequired(true) ), async execute(interaction) { await interaction.deferReply(); // this regex matches emotes in the format <:name:id> or let emoteIdRegex = /<(?a?):(?\w{0,22})\w*:(?\d+)>/gm; let replyMessage = ""; const input = interaction.options.getString("emote"); // remove duplicates from the emote list let emoteList = input.matchAll(emoteIdRegex); emoteList = [...new Set(emoteList)].join(" "); for (const match of emoteList.matchAll(emoteIdRegex)) { const link = "https://cdn.discordapp.com/emojis/" + match.groups.id + ((match.groups.animated == 'a') ? ".gif": ".webp") + "?quality=lossless"; const copyname = match.groups.name + "_FE"; await interaction.guild.emojis.create({attachment: link, name: copyname}); await interaction.editReply(`Logged ${match[0]}!\n`); replyMessage += `Logged ${match[0]}!\n`; } // add a message to say how many emote spots are left interaction.guild.emojis.fetch() .then(emojis => { let animatedEmojis = emojis.filter(emoji => emoji.animated); replyMessage += `\nAnimated emotes: ${animatedEmojis.size}/50\n` let staticEmojis = emojis.filter(emoji => !emoji.animated); replyMessage += `Static emotes: ${staticEmojis.size}/50\n` interaction.editReply(replyMessage); }) .catch(console.error); }, }; // https://cdn.discordapp.com/emojis/1166779045711720541.webp?size=44&quality=lossless