const { Events } = require('discord.js'); const { authorizeCommand } = require('../middleware/discordAuthorization'); const { authorizeTokenUsage } = require('../middleware/balanceAuthorization'); const { DebugBuilder } = require("../utilities/debugBuilder"); const log = new DebugBuilder("server", "interactionCreate"); module.exports = { name: Events.InteractionCreate, async execute(interaction) { if (!interaction.isChatInputCommand()) return; const command = interaction.client.commands.get(interaction.commandName); if (!command) { log.ERROR(`No command matching ${interaction.commandName} was found.`); return; } log.DEBUG(`${interaction.member.user} is running '${interaction.commandName}'`); await authorizeCommand(interaction, command, async () => { await authorizeTokenUsage(interaction, command, undefined, async () => { try { if (command.deferInitialReply) { try { if (interaction.options.getBool('public') && interaction.options.getBool('public') == false) await interaction.deferReply({ ephemeral: true }); else await interaction.deferReply({ ephemeral: false }); } catch (err) { if (err instanceof TypeError) { // The public option doesn't exist in this command await interaction.deferReply({ ephemeral: false }); } else { throw err; } } } command.execute(interaction); } catch (error) { log.ERROR(error); if (interaction.replied || interaction.deferred) { interaction.followUp({ content: 'There was an error while executing this command!', ephemeral: true }); } else { interaction.reply({ content: 'There was an error while executing this command!', ephemeral: true }); } } }) }); }, };