Files
general-purpose-bot/commands/utility/grab.js

75 lines
2.1 KiB
JavaScript

const { SlashCommandBuilder } = require('discord.js');
module.exports = {
category: 'utility',
global: false,
data: new SlashCommandBuilder()
.setName('grab')
.setDescription('Grab things')
.addSubcommand(subcommand =>
subcommand
.setName('emotes')
.setDescription('Get the emote as an image')
.addStringOption(option =>
option.setName('emote')
.setRequired(true)
.setDescription('The emote to grab'))
)
.addSubcommand(subcommand =>
subcommand
.setName('sticker')
.setDescription('Get the sticker as an image')
),
async execute(interaction) {
let reply = "";
switch (interaction.options.getSubcommand()) {
case 'emote':
reply = this.grabEmotes(interaction);
break;
case 'sticker':
reply = 'Please send a sticker message';
this.grabSticker(interaction);
break;
default:
break;
}
await interaction.reply(reply);
},
grabEmotes: function (interaction) {
let emotes = interaction.options.get('emote').value.split('<');
let images = [];
emotes.forEach(emote => {
//Static emotes
if ((emote.startsWith(':') || emote.startsWith('a')) && emote.endsWith('>')) {
let emoteId = emote.split(':')[2].slice(0, -1);
let type = emote.startsWith(':') ? 'png' : 'gif';
images.push(`https://cdn.discordapp.com/emojis/${emoteId}.${type}`);
}
});
let reply = images.join('\n');
return reply != '' ? reply : "Hmm, couldn't parse any emotes <:GudaEhehe:810677374059544617>";
},
grabSticker: async function (interaction) {
const collectorFilter = m => (m.author.id = interaction.member.id) && (m.channel.id == interaction.channel.id);
const collector = interaction.channel.createMessageCollector({ filter: collectorFilter, time: 60_000 });
let stickers = []
collector.on('collect', m => {
m.stickers.forEach(sticker => {
stickers.push(`https://media.discordapp.net/stickers/${sticker.id}.png`);
collector.stop();
});
});
collector.on('end', collected => {
interaction.channel.send(stickers.length > 0 ? stickers.join('\n') : "Didn't receive any stickers");
});
}
};