const { SlashCommandBuilder, PermissionFlagsBits, ChannelType, EmbedBuilder } = require("discord.js"); const moderationSchema = require("../../schemas/moderation"); const mConfig = require("../../messageConfig.json"); const suspiciousUser = require("../../suspiciousUser.json"); module.exports = { data: new SlashCommandBuilder() .setName("moderatesystem") .setDescription("An advanced moderating system.") .addSubcommand((s) => s .setName("configure") .setDescription("configure the advanced moderating system into the server.") .addChannelOption((o) => o .setName("logging_channel") .setDescription("The channel where all moderation will be logged.") .setRequired(true) .addChannelTypes(ChannelType.GuildText) ) .addBooleanOption((o) => o .setName("multi_guilded") .setDescription("Adds your server on the list of allowing multi-guilded moderation.") .setRequired(true) ) ) .addSubcommand((s) => s .setName("remove") .setDescription("Removes the advanced moderation system from the server.") ) .toJSON() , userPermissions: [PermissionFlagsBits.Administrator], botPermissions: [], run: async (client, interaction) => { const { options, guildId, guild } = interaction; const subcmd = options.getSubcommand(); if (!["configure", "remove"].includes(subcmd)) return; const rEmbed = new EmbedBuilder() .setFooter({ iconURL: `${client.user.displayAvatarURL({ dynamic: true })}`, text: `${client.user.username} - Advanced moderation system` }); switch (subcmd) { case "configure": const multiGuilded = options.getChannel("multi_guilded"); const loggingChannel = options.getChannel("logging_channel"); let dataGD = await moderationSchema.findOne({ GuildID: guildId }); if (!dataGD) { rEmbed .setColor(mConfig.embedColorWarning) .setDescription("\`⏳\` New server detected: Configuring the advanced moderation system..."); await interaction.reply({ embeds: [rEmbed], fetchReply: true, ephemeral: true }); dataGD = new moderationSchema({ GuildID: guildId, MultiGuilded: multiGuilded, LogChannelID: loggingChannel.id, }); dataGD.save(); rEmbed .setColor(mConfig.embedColorSucces) .setDescription("\`✅\` Successfully configured the advanced moderation system.") .addFields( { name: "Multi-guilded", value: `\`${multiGuilded ? "yes" : "no"}\``, inline: true }, { name: "Logging channel", value: `${loggingChannel}`, inline: true }, ); setTimeout(() => { interaction.editReply({ embeds: [rEmbed], ephemeral: true }); }, 2_000); let i; for (i = 0; i < suspiciousUser.ids.length; i++) { try { const suspiciousUser = await guild.members.fetch(suspiciousUser.ids[i]); await guild.bans.create(suspiciousUser, { deleteMessageSeconds: 60 * 60 * 24 * 7, reason: "Suspicious usser listed by developer.", }); const lEmbed = new EmbedBuilder() .setColor("White") .setTitle("`⛔` User banned") .setAuthor({ name: suspiciousUser.user.username, iconURL: suspiciousUser.user.displayAvatarURL({ dynamic: true }) }) .addFields( { name: "Banned by", value: `<@${client.user.id}>`, inline: true }, { name: "Reason", value: `\`Suspicious user listed by developer. Please contact the developer if this is a mistake.\``, inline: true }, ) .setFooter({iconURL: `${client.user.displayAvatarURL({ dynamic: true })}`, text: `${client.user.username} - Logging system` }); loggingChannel.send({ embeds: [lEmbed] }); } catch (error) { continue; } } } else { await moderationSchema.findOneAndUpdate( { GuildID: guildId }, { MultiGuilded: multiGuilded, LogChannelID: loggingChannel.id } ); rEmbed .setColor(mConfig.embedColorSucces) .setDescription("\`✅\` Successfully updated advanced moderation system.") .addFields( { name: "Multi-guilded", value: `\`${multiGuilded ? "yes" : "no"}\``, inline: true }, { name: "Logging channel", value: `${loggingChannel}`, inline: true }, ); interaction.reply({ embeds: [rEmbed], ephemeral: true }); }; break; case "remove": const removed = await moderationSchema.findOneAndDelete({ GuildID: guildId }); if (removed) { rEmbed .setColor(mConfig.embedColorSucces) .setDescription("\`✅\` Successfully removed the advanced moderation system.") } else { rEmbed .setColor(mConfig.embedColorError) .setDescription("\`❌\` This server isn't configured yet.\n\n\`💡\` Use \`/ moderatesystem configure\` to start configuring this server.") } interaction.reply({ embeds: [rEmbed], ephemeral: true }); break; }; }, };