const { ApplicationCommandType, ApplicationCommandOptionType, EmbedBuilder } = require('discord.js'); const cfg = require('../../config/config.js'); const { getActionDuration, convertActionDurationFromMsToTime, convertActionDurationFromTimeToMs } = require('../../functions/utils.js'); module.exports = { name: 'settings', description: 'Change the settings for the bot.', type: ApplicationCommandType.ChatInput, options: [ { name: 'change', description: 'Set the settings of the bot.', type: ApplicationCommandOptionType.Subcommand, options: [ { name: 'set', description: 'The settings to change.', type: ApplicationCommandOptionType.String, required: true, choices: [ { name: 'Verification', value: 'verification' }, { name: 'Anti New User', value: 'anti-new-user' } ] }, { name: 'enable-or-disable', description: 'Enable or disable the setting.', type: ApplicationCommandOptionType.String, required: false, choices: [ { name: 'Enable', value: 'true' }, { name: 'Disable', value: 'false' } ] }, { name: 'automod-action', description: 'The action to take when the threshold is reached.', type: ApplicationCommandOptionType.String, required: false, choices: [ { name: 'Timeout', value: 'Timeout' }, { name: 'Warn', value: 'warn' }, { name: 'Kick', value: 'kick' }, { name: 'Ban', value: 'ban' }, { name: 'None', value: 'none' } ] }, { name: 'automod-action-reason', description: 'The reason for the action.', type: ApplicationCommandOptionType.String, required: false }, { name: 'automod-action-threshold', description: 'The threshold for the setting.', type: ApplicationCommandOptionType.Integer, required: false }, { name: 'automod-action-duration', description: 'The duration for the action.', type: ApplicationCommandOptionType.String, required: false } ] }, { name: 'check', description: 'Check the current settings of the bot.', type: ApplicationCommandOptionType.Subcommand, options: [ { name: 'settings', description: 'The settings to check.', type: ApplicationCommandOptionType.String, required: true, choices: [ { name: 'General', value: 'general' }, { name: 'Actions', value: 'actions' }, { name: 'All', value: 'all' } ] } ] }, { name: 'reset', description: 'Reset the settings of the bot.', type: ApplicationCommandOptionType.Subcommand }, { name: 'rawcheck', description: 'Check the raw settings of the bot.', type: ApplicationCommandOptionType.Subcommand } ], default_member_permissions: ["Administrator"], run: async (client, interaction) => { await interaction.deferReply({ ephemeral: true }); const filter = { guildId: interaction.guild.id } const subcommand = interaction.options.getSubcommand(); const settings = interaction.options.get('set')?.value; const enableOrDisable = interaction.options.get('enable-or-disable')?.value; const automodAction = interaction.options.get('automod-action')?.value; const automodActionReason = interaction.options.get('automod-action-reason')?.value; const automodActionThreshold = interaction.options.get('automod-action-threshold')?.value; const automodActionDuration = interaction.options.get('automod-action-duration')?.value; const checksettings = interaction.options.get('settings')?.value; const GuildSettings = require('../../database/models/GuildSettings'); const NewUserAction = require('../../database/models/NewUserAction.js'); const VerifyFailAction = require('../../database/models/VerifyFailAction.js'); const guildSettings = await GuildSettings.findOne(filter); const newUserAction = await NewUserAction.findOne(filter); const verifyFailAction = await VerifyFailAction.findOne(filter); switch (subcommand) { case 'change': switch (settings) { case 'verification': switch (automodAction) { case undefined: console.log('a') switch (enableOrDisable) { case 'true': case 'false': console.log(enableOrDisable) switch (guildSettings) { case null: const newGuildSettings = new GuildSettings({ guildId: interaction.guild.id, verifyEnabled: enableOrDisable }); await newGuildSettings.save(); break; default: guildSettings.verifyEnabled = enableOrDisable; await guildSettings.save(); break; } break; } break; case 'none': console.log('b') await VerifyFailAction.find(filter).deleteMany(); break; default: console.log('c') switch (enableOrDisable) { case 'true': case 'false': switch (guildSettings) { case null: const newGuildSettings = new GuildSettings({ guildId: interaction.guild.id, verifyEnabled: enableOrDisable }); await newGuildSettings.save(); break; default: guildSettings.verifyEnabled = enableOrDisable; await guildSettings.save(); break; } break; } switch (verifyFailAction) { case null: const newVerifyFailAction = new VerifyFailAction({ guildId: interaction.guild.id, action: automodAction, reason: automodActionReason || 'User failed to verify.', threshold: automodActionThreshold || 3, duration: automodActionDuration || '7d' }); await newVerifyFailAction.save(); break; default: verifyFailAction.action = automodAction || verifyFailAction?.action; verifyFailAction.reason = `${automodActionReason?.toString()}` || verifyFailAction?.reason || 'User failed to verify.'; verifyFailAction.threshold = automodActionThreshold || verifyFailAction?.threshold || 3; verifyFailAction.duration = automodActionDuration || verifyFailAction?.duration || '7d'; await verifyFailAction.save(); break; } break; } break; case 'anti-new-user': switch (automodAction) { case undefined: switch (enableOrDisable) { case 'true': case 'false': switch (guildSettings) { case null: const newGuildSettings = new GuildSettings({ guildId: interaction.guild.id, antiNewUserEnabled: enableOrDisable }); await newGuildSettings.save(); break; default: guildSettings.antiNewUserEnabled = enableOrDisable; await guildSettings.save(); break; } break; } break; case 'none': await NewUserAction.find(filter).deleteMany(); break; default: switch (enableOrDisable) { case 'true': case 'false': switch (guildSettings) { case null: const newGuildSettings = new GuildSettings({ guildId: interaction.guild.id, antiNewUserEnabled: enableOrDisable }); await newGuildSettings.save(); break; default: guildSettings.antiNewUserEnabled = enableOrDisable; await guildSettings.save(); break; } break; } switch (newUserAction) { case null: const newNewUserAction = new NewUserAction({ guildId: interaction.guild.id, action: automodAction, reason: automodActionReason || 'User account age is way too low.', threshold: automodActionThreshold || 3, duration: automodActionDuration || '7d' }); await newNewUserAction.save(); break; default: newUserAction.action = automodAction || newUserAction?.action; newUserAction.reason = `${automodActionReason?.toString()}` || newUserAction?.reason || 'User account age is way too low.'; newUserAction.threshold = automodActionThreshold || newUserAction?.threshold || 3; newUserAction.duration = automodActionDuration || newUserAction?.duration || '7d'; await newUserAction.save(); break; } break; } break; } await interaction.editReply({ content: 'Settings have been updated.' }); break; case 'check': function verification() { if (guildSettings?.verifyEnabled === 'true') { return 'Enabled'; } else if (guildSettings?.verifyEnabled === 'false') { return 'Disabled'; } else { return 'Disabled'; } } function antiNewUser() { if (guildSettings?.antiNewUserEnabled === 'true') { return 'Enabled'; } else if (guildSettings?.antiNewUserEnabled === 'false') { return 'Disabled'; } else { return 'Disabled'; } } const embed = new EmbedBuilder() .setTitle('Settings') .addFields({ name: 'Verification', value: `${verification()}`, }, { name: 'Anti New User', value: `${antiNewUser()}`, }) .setColor("Gold"); const embedd = new EmbedBuilder() .setTitle('Settings') .addFields({ name: 'Verification Auto Action', value: `${verifyFailAction ? `Action: ${verifyFailAction?.action.toUpperCase()}\nReason: ${verifyFailAction?.reason}\nThreshold: ${verifyFailAction?.threshold}\nDuration: ${await getActionDuration(verifyFailAction?.duration)}` : "None"}`, }, { name: 'Anti New User Auto Action', value: `${newUserAction ? `Action: ${newUserAction?.action.toUpperCase()}\nReason: ${newUserAction?.reason}\nThreshold: ${newUserAction?.threshold}\nDuration: ${await getActionDuration(newUserAction?.duration)}` : "None"}`, }) .setColor("Gold"); console.log(verifyFailAction?.duration, await getActionDuration(verifyFailAction?.duration), await convertActionDurationFromTimeToMs(verifyFailAction?.duration)); console.log(newUserAction?.duration, await getActionDuration(newUserAction?.duration), await convertActionDurationFromTimeToMs(newUserAction?.duration)); switch (checksettings) { case 'general': await interaction.editReply({ embeds: [embed] }); break; case 'actions': await interaction.editReply({ embeds: [embedd] }); break; case 'all': await interaction.editReply({ embeds: [embed, embedd] }); break; } break; case 'reset': await GuildSettings.find(filter).deleteMany(); await NewUserAction.find(filter).deleteMany(); await VerifyFailAction.find(filter).deleteMany(); await interaction.editReply({ content: 'Settings have been reset.' }); break; case 'rawcheck': console.log(guildSettings); console.log(verifyFailAction); console.log(newUserAction); await interaction.editReply({ content: 'Check the console.' }); break; } /* if (settings === 'verification') { console.log('a') if (automodAction === undefined) { console.log('i') if (enableOrDisable !== undefined) { if (guildSettings === null) { const newGuildSettings = new GuildSettings({ guildId: interaction.guild.id, verifyEnabled: enableOrDisable }); await newGuildSettings.save(); } else { guildSettings.verifyEnabled = enableOrDisable; await guildSettings.save(); } } else if (enableOrDisable === undefined) { if (verifyFailAction === null) { const newVerifyFailAction = new VerifyFailAction({ guildId: interaction.guild.id, action: automodAction, reason: `${automodActionReason.toString()}` || 'No reason provided.', threshold: automodActionThreshold || 3, duration: automodActionDuration || 7 }); await newVerifyFailAction.save(); } else if (verifyFailAction !== null) { verifyFailAction.action = automodAction; verifyFailAction.reason = `${automodActionReason.toString()}` || 'No reason provided.'; verifyFailAction.threshold = automodActionThreshold || 3; verifyFailAction.duration = automodActionDuration || 7; await verifyFailAction.save(); } else if (verifyFailAction?.action !== 'none' && automodAction === 'none') { await VerifyFailAction.find(filter).deleteMany(); } } } } else if (settings === 'anti-new-user') { if (enableOrDisable !== undefined && automodAction === undefined) { if (guildSettings === null) { const newGuildSettings = new GuildSettings({ guildId: interaction.guild.id, antiNewUserEnabled: enableOrDisable }); await newGuildSettings.save(); } else { guildSettings.antiNewUserEnabled = enableOrDisable; await guildSettings.save(); } } else if (enableOrDisable !== undefined && automodAction !== 'none') { if (guildSettings === null) { const newGuildSettings = new GuildSettings({ guildId: interaction.guild.id, antiNewUserEnabled: enableOrDisable }); await newGuildSettings.save(); } else { guildSettings.antiNewUserEnabled = enableOrDisable; await guildSettings.save(); } if (newUserAction === null) { const newNewUserAction = new NewUserAction({ guildId: interaction.guild.id, action: automodAction, reason: `${automodActionReason}` || 'No reason provided.', threshold: automodActionThreshold || 3, duration: automodActionDuration || 0 }); await newNewUserAction.save(); } else { newUserAction.action = automodAction; newUserAction.reason = `${automodActionReason}` || 'No reason provided.'; newUserAction.threshold = automodActionThreshold || 3; newUserAction.duration = automodActionDuration || 0; await newUserAction.save(); } } else if (enableOrDisable !== undefined && automodAction === 'none') { if (guildSettings === null) { const newGuildSettings = new GuildSettings({ guildId: interaction.guild.id, antiNewUserEnabled: enableOrDisable }); await newGuildSettings.save(); } else { guildSettings.antiNewUserEnabled = enableOrDisable; await guildSettings.save(); } if (newUserAction?.action !== 'none') { await NewUserAction.find(filter).deleteMany(); } } } await interaction.editReply({ content: 'Settings have been updated.' }); } else if (subcommand === 'check') { const embed = new EmbedBuilder() .setTitle('Settings') .addFields({ name: 'Verification', value: `${guildSettings?.verifyEnabled ? 'Enabled' : 'Disabled'}`, }, { name: 'Verification Auto Action', value: `${verifyFailAction ? `Action: ${verifyFailAction?.action.toUpperCase()}\nReason: ${verifyFailAction?.reason}\nThreshold: ${verifyFailAction?.threshold}\nDuration: ${verifyFailAction?.duration}` : "None"}`, }, { name: 'Anti New User', value: `${guildSettings?.antiNewUserEnabled ? 'Enabled' : 'Disabled'}`, }, { name: 'Anti New User Auto Action', value: `${newUserAction ? `Action: ${newUserAction?.action.toUpperCase()}\nReason: ${newUserAction?.reason}\nThreshold: ${newUserAction?.threshold}\nDuration: ${newUserAction?.duration}` : "None"}`, }) .setColor("Gold"); await interaction.editReply({ embeds: [embed] }); } else if (subcommand === 'reset') { await GuildSettings.find(filter).deleteMany(); await NewUserAction.find(filter).deleteMany(); await VerifyFailAction.find(filter).deleteMany(); await interaction.editReply({ content: 'Settings have been reset.' }); } */ } }