const { Collection, Permissions, Events, ComponentType } = require('discord.js'); const { ongoingGiveaways, enteredUsers, giveawayEntriesAmount, collector } = require('/home/devbot/commands/prefix/staff_utility/giveaway.js'); module.exports = { name: "interactionCreate", async run(bot, interaction) { try { if (!interaction.guild || interaction.user.bot) return; if (interaction.channel.partial) await interaction.channel.fetch(); // if (interaction.partial) await interaction.fetch(); await interaction.guild.members.fetch({ force: true }); if (interaction.isCommand()) { const command = bot.slashcommands.get(interaction.commandName); if (!command) { interaction.reply(`An error occurred while running this command!`); return bot.slashcommands.delete(interaction.commandName); } const args = []; for (let option of interaction.options.data) { if (option.type === 'SUB_COMMAND') { if (option.name) args.push(option.name); option.options?.forEach(x => { if (x.value) args.push(x.value); }); } else if (option.value) args.push(option.value); } // For bot developers only if (command.mode.developerOnly && interaction.user.id !== bot.config.settings.developer) { return interaction.reply('This command is limited to bot developers only!'); } // For owner guild only if (command.mode.ownerGuildOnly && interaction.user.id !== interaction.guild.ownerId) { return interaction.reply('This command is limited to the owner of the guild only!'); } // Bot permissions if (command.permissions.bot) { const botPermissions = [ Permissions.FLAGS.SEND_MESSAGES, Permissions.FLAGS.VIEW_CHANNEL, Permissions.FLAGS.ATTACH_FILES, Permissions.FLAGS.SPEAK, Permissions.FLAGS.CONNECT ]; const missingPermissions = botPermissions.filter(p => !interaction.guild.me.permissions.has(p)); if (missingPermissions.length) { return interaction.reply(`Looks like I'm missing the following permissions: ${missingPermissions.map(p => `\`${p}\``).join(', ')}`); } const commandBotPermissions = command.permissions.bot.filter(p => !interaction.guild.me.permissions.has(p)); if (commandBotPermissions.length) { return interaction.reply(`Looks like I'm missing the following permissions: ${commandBotPermissions.map(p => `\`${p}\``).join(', ')}`); } } // User permissions if (command.permissions.user) { const missingPermissions = command.permissions.user.filter(p => !interaction.member.permissions.has(p)); if (missingPermissions.length) { return interaction.reply(`Looks like you're missing the following permissions: ${missingPermissions.map(p => `\`${p}\``).join(', ')}`); } } // Cooldown if (!bot.cooldowns.has(command.name)) { bot.cooldowns.set(command.name, new Collection()); } const timeCooldowns = bot.cooldowns.get(command.name); if (interaction.user.id !== bot.config.settings.developer) { if (command.cooldown) { if (timeCooldowns.has(interaction.user.id)) { const expirationTime = timeCooldowns.get(interaction.user.id) + (command.cooldown * 1000); if (Date.now() < expirationTime) { const timeLeft = (expirationTime - Date.now()) / 1000; return interaction.reply(`Please wait ${bot.utils.msToTime(timeLeft.toFixed(1) * 1000)} before using that command again!`); } } timeCooldowns.set(interaction.user.id, Date.now()); setTimeout(() => { timeCooldowns.delete(interaction.user.id); }, command.cooldown * 1000); } } command.run(bot, interaction, args, timeCooldowns); } } catch (error) { bot.logger.error(error); } } };