62 lines
1.8 KiB
JavaScript
62 lines
1.8 KiB
JavaScript
import { Events } from 'discord.js';
|
|
|
|
const executeCommand = async (interaction, command) => {
|
|
// Try executing command
|
|
try {
|
|
console.info(`[INFO] Command ${interaction.commandName} was executed.`);
|
|
await command.execute(interaction);
|
|
} catch (error) {
|
|
console.error(error);
|
|
// Follow up/reply with error message
|
|
if (interaction.replied || interaction.deferred)
|
|
await interaction.followUp({
|
|
content: 'There was an error while executing this command!',
|
|
ephemeral: true
|
|
});
|
|
else
|
|
await interaction.reply({
|
|
content: 'There was an error while executing this command!',
|
|
ephemeral: true
|
|
});
|
|
}
|
|
};
|
|
|
|
const genericExecute = async (interaction, command, name, description, cmdName) => {
|
|
try {
|
|
console.info(`[INFO] Command ${(cmdName ?? interaction.commandName) ?? 'anonymous'} ${description ?? `used "${name}"`}.`);
|
|
await command[name](interaction);
|
|
} catch (error) {
|
|
console.error(error);
|
|
}
|
|
};
|
|
|
|
export const name = Events.InteractionCreate;
|
|
export async function execute(interaction) {
|
|
let command = interaction.client.commands.get(interaction.commandName);
|
|
|
|
// Execute slash- and context-menu-commands
|
|
if (interaction.isChatInputCommand() || interaction.isMessageContextMenuCommand()) {
|
|
await executeCommand(interaction, command);
|
|
return;
|
|
}
|
|
// Autocomplete input
|
|
if (interaction.isAutocomplete() && 'autocomplete' in command) {
|
|
await genericExecute(interaction, command, 'autocomplete');
|
|
return;
|
|
}
|
|
// Modal submit event
|
|
if (interaction.isModalSubmit()) {
|
|
const name = interaction.customId.split('-')[0];
|
|
command = interaction.client.commands.get(name);
|
|
|
|
await genericExecute(interaction, command, 'modalSubmit', 'submitted a modal', name);
|
|
return;
|
|
}
|
|
|
|
// Check if command exists
|
|
if (interaction.commandName && !command) {
|
|
console.warn(`[WARNING] No command matching ${interaction.commandName} was found.`);
|
|
return;
|
|
}
|
|
}
|