const { SlashCommandBuilder, PermissionFlagsBits, ChannelType, Client, ChatInputCommandInteraction, } = require("discord.js"); const ms = require("ms"); const Setup = require("../../../schema.js/levelSetup"); const User = require("../../../schema.js/levelSchema"); const mConfig = require("../../../messageCofing.json"); module.exports = { data: new SlashCommandBuilder() .setName("lvl-system") .setDescription("Configurazione del sistema del level") .addSubcommandGroup((sg) => sg .setName("notify") .setDescription("canale per le notifiche dei livelli") .addSubcommand((sub) => sub .setName("configura") .setDescription("configura le notifiche") .addChannelOption((o) => o .setName("canale") .addChannelTypes(ChannelType.GuildText) .setDescription("in quale canale vuoi le notifiche") .setRequired(true) ) ) .addSubcommand((sub) => sub .setName("rimuovere") .setDescription("remouvere le notifiche dei livelli") ) ) .addSubcommandGroup((sg) => sg .setName("reset") .setDescription("il reset dei livelli") .addSubcommand((sub) => sub .setName("server") .setDescription("reset livelli per il tutto server") ) .addSubcommand((sub) => sub .setName("user") .setDescription("quale vuoi reset del membro") .addUserOption((o) => o.setName("utente").setDescription("chi?").setRequired(true) ) ) ) .addSubcommand((sg) => sg .setName("boost") .setDescription("boost dei livelli") .addNumberOption((o) => o .setName("multiplier") .setDescription("quanto è il moltiplicatore") .setRequired(true) ) .addStringOption((o) => o .setName("durata") .setDescription("quanto lo vuoi durare i boost") .addChoices( { name: "1m", value: "60" }, { name: "5m", value: "300" }, { name: "10m", value: "600" }, { name: "30m", value: "1800" }, { name: "1h", value: "3600" } ) .setRequired(true) ) ), userPermissions: [PermissionFlagsBits.SendMessages], botPermissions: [], /** * * @param {Client} client * @param {ChatInputCommandInteraction} interaction */ async execute(client, interaction) { const { options, guildId: GuildID, channel } = interaction; const subgrp = options.getSubcommandGroup(); const subcmd = options.getSubcommand(); switch (subgrp) { case "notify": data = await Setup.findOne({ GuildID }); switch (subcmd) { case "configura": const notificationChannel = options.getChannel("canale"); if (!data) { await Setup.create({ GuildID, Boost: 0, Channel: notificationChannel.id, }).catch((err) => console.log(err)); return interaction.reply({ content: `\`:white_check_mark:\` è stato settato corretamente in: ${notificationChannel}`, ephemeral: true, }); } else { data.Channel = notificationChannel.di; await data.save(); return interaction.reply({ content: `\`:white_check_mark:\` è stato settato corretamente in: ${notificationChannel}`, ephemeral: true, }); } case "rimuovere": if (!data) { await Setup.create({ GuildID, Boost: 0, Channel: notificationChannel.id, }).catch((err) => console.log(err)); return interaction.reply({ content: `\`:white_check_mark:\` la chat non è settato `, ephemeral: true, }); } else { Setup.deleteMany({ GuildID }).catch((err) => console.log(err)); return interaction.reply({ content: `\`:white_check_mark:\` è stato rimosso correttamente`, ephemeral: true, }); } } break; case "reset": switch (subcmd) { case "user": const user = options.getuser("utente"); data = await User.findOne({ GuildID, UserID: user.id }); if (!data) { return interaction.reply({ content: `Il membro selezionato non si trova nel server`, ephemeral: true, }); } else { User.deleteMany({ GuildID, UserID: user.id }).catch((err) => console.log(err) ); return interaction.reply({ content: `\`:white_check_mark:\` Il reset è stato corretamente a ${user}`, ephemeral: true, }); } case "server": data = await User.find({ GuildID }); if (!data) { return interaction.reply({ content: `Non è stato possibile fare il reset`, ephemeral: true, }); } else { User.deleteMany({ GuildID }).catch((err) => console.log(err)); return interaction.reply({ content: `\`:white_check_mark:\` il reset con successo`, ephemeral: true, }); } } break; default: const duration = options.getString("durata"); const boost = options.getNumber("multiplier"); data = await Setup.findOne({ GuildID }); if (!data) { await Setup.create({ GuildID }).catch((err) => console.log(err)); const embed = new EmbedBuilder() .setTitle("Boost xp attivo!") .setDescription( `Ti sei settato il boost di ${boost}x per \`${ms( duration * 1000 )}\`` ) .setColor(mConfig.embedColorWarning) .setTimestamp(); interaction.reply({ embeds: [embed] }); const xpEmbed = new EmbedBuilder(); setTitle("Boost xp attivo!") .setDescription( `Ti sei settato il exboost di ${boost}x per \`${ms( duration * 1000 )}\`` ) .setColor(mConfig.embedColorWarning) .setTimestamp(); channel.send({ embeds: [xpEmbed] }); setTimeout(async () => { await Setup.findOneAndUpdate({ GuildID }, { Boost: 0 }); const embed = new EmbedBuilder() .setTitle("Boost xp attivo!") .setDescription("Il boost si è attivato") .setColor(mConfig.embedColorWarning) .setTimestamp(); channel.send({ embeds: [embed] }); }, duration * 1000); } else if (data) { } } }, };