const { inspect } = require("util"); /* FOR GUILD SETTINGS SEE set.js ! This command is used to modify the bot's default configuration values, which affects all guilds. If a default setting is not specifically overwritten by a guild, changing a default here will change it for that guild. The `add` action adds a key to the configuration of every guild in your bot. The `del` action removes the key also from every guild, and loses its value forever. */ exports.run = async (client, message, [action, key, ...value], level) => { // eslint-disable-line no-unused-vars // Retrieve Default Values from the default settings in the bot. const defaults = client.settings.get("default"); // Adding a new key adds it to every guild (it will be visible to all of them) if (action === "add") { if (!key) return message.reply("Please specify a key to add"); if (defaults[key]) return message.reply("This key already exists in the default settings"); if (value.length < 1) return message.reply("Please specify a value"); // `value` being an array, we need to join it first. defaults[key] = value.join(" "); // One the settings is modified, we write it back to the collection client.settings.set("default", defaults); message.reply(`${key} successfully added with the value of ${value.join(" ")}`); } else // Changing the default value of a key only modified it for guilds that did not change it to another value. if (action === "edit") { if (!key) return message.reply("Please specify a key to edit"); if (!defaults[key]) return message.reply("This key does not exist in the settings"); if (value.length < 1) return message.reply("Please specify a new value"); defaults[key] = value.join(" "); client.settings.set("default", defaults); message.reply(`${key} successfully edited to ${value.join(" ")}`); } else // WARNING: DELETING A KEY FROM THE DEFAULTS ALSO REMOVES IT FROM EVERY GUILD // MAKE SURE THAT KEY IS REALLY NO LONGER NEEDED! if (action === "del") { if (!key) return message.reply("Please specify a key to delete."); if (!defaults[key]) return message.reply("This key does not exist in the settings"); // Throw the 'are you sure?' text at them. const response = await client.awaitReply(message, `Are you sure you want to permanently delete ${key} from all guilds? This **CANNOT** be undone.`); // If they respond with y or yes, continue. if (["y", "yes"].includes(response)) { // We delete the default `key` here. delete defaults[key]; client.settings.set("default", defaults); // then we loop on all the guilds and remove this key if it exists. // "if it exists" is done with the filter (if the key is present and it's not the default config!) for (const [guildid, conf] of client.settings.filter((setting, id) => setting[key] && id !== "default")) { delete conf[key]; client.settings.set(guildid, conf); } message.reply(`${key} was successfully deleted.`); } else // If they respond with n or no, we inform them that the action has been cancelled. if (["n","no","cancel"].includes(response)) { message.reply("Action cancelled."); } } else // Display a key's default value if (action === "get") { if (!key) return message.reply("Please specify a key to view"); if (!defaults[key]) return message.reply("This key does not exist in the settings"); message.reply(`The value of ${key} is currently ${defaults[key]}`); // Display all default settings. } else { await message.channel.send(`***__Bot Default Settings__***\n\`\`\`json\n${inspect(defaults)}\n\`\`\``); } }; exports.conf = { enabled: true, guildOnly: true, aliases: ["defaults"], permLevel: "Bot Admin" }; exports.help = { name: "conf", category: "System", description: "Modify the default configuration for all guilds.", usage: "conf " };