const Discord = require("discord.js"); const db = require("../../models/custom-commands"); module.exports = { name: "cc-create", UserPerm: "ADMINISTRATOR", description: "Crate custom commands for a server", category: "Config", run: async (client, message, args) => { message.delete(); message.channel.send( new Discord.MessageEmbed() .setTitle(`Setup | 1/3`) .setDescription( "What is the name of the command?\nYou can cancel the setup at any time by sending `cancel`.", ) .setColor(client.color), ); await startMessageCollectors(client, message, args); function startMessageCollectors(client, message, args) { const nameFilter = m => m.author.id === message.author.id; const nameCollector = new Discord.MessageCollector( message.channel, nameFilter, { max: 999 }, ); nameCollector.on("collect", async msg => { const name = msg.content.toLowerCase(); const data = await db.findOne({ Guild: message.guild.id, Command: name, }); if (data) { nameCollector.stop(); return message.reply("This command has already exist."); } if (name === "cancel") { msg.channel.send("The setup has been cancelled."); db.findOneAndDelete({ Guild: message.guild.id, Command: name }); nameCollector.stop(); return; } if (!name) { await msg.channel.send("You don't specify a name. Cancelled setup."); nameCollector.stop(); return; } else { const newDB = new db({ Guild: message.guild.id, Command: name, }); await newDB.save(); console.log(newDB); msg.channel.send( new Discord.MessageEmbed() .setTitle(`Setup | 2/3`) .setDescription( `The command name will be **${name}**.\nWhat is the response for the command? You can have mutliple response by joning them with differnt lines.`, ) .setColor(client.color), ); nameCollector.stop(); } const responseFilter = m => m.author.id === message.author.id; const responseCollector = new Discord.MessageCollector( message.channel, responseFilter, { max: 999 }, ); responseCollector.on("collect", async msg => { const response = msg.content.split("\n"); console.log(`Response: ${response}`); if (msg.content.toLowerCase() === "cancel") { msg.channel.send("The setup has been cancelled."); responseCollector.stop(); return; } if (!response) { msg.channel.send(`You didn't specify a response. Setup cancelled.`); responseCollector.stop(); } if (response.length > 1) { responseCollector.stop(); await db.findOne( { Guild: message.guild.id, Command: name }, async (err, data) => { if (data) { data.Response = response; await db.findOneAndUpdate( { Guild: message.guild.id, Command: name }, data, ); console.log(data); } }, ); msg.channel.send( new Discord.MessageEmbed() .setTitle(`Setup | 3/4`) .setColor(client.color) .setDescription( `Ok so there will be ${response.length} responses. Do you want the response be randomized?\n\`Type yes or no\` \nIf you choose no, accumlative responses may let the command can\'t be sent out.`, ), ); const randomFilter = m => m.author.id === message.author.id; const randomCollector = new Discord.MessageCollector( message.channel, randomFilter, { max: 999 }, ); randomCollector.on("collect", async msg => { let maybe; if (msg.content.toLowerCase() === "yes") { msg.channel.send( new Discord.MessageEmbed() .setColor(client.color) .setTitle(`Setup | 4/4`) .setDescription( `The responses will be randomized. Do you want to have delete command usage? \`Type yes or no\``, ), ); randomCollector.stop(); maybe = true; await db.findOne( { Guild: message.guild.id, Response: response, Command: name, }, async (err, data) => { if (data) { data.Random = maybe; await db.findOneAndUpdate( { Guild: message.guild.id, Command: name, Response: response, }, data, ); console.log(data); } }, ); console.log(`Random: ${maybe}`); const deleteeeFilter = m => m.author.id === message.author.id; const deleteeeCollector = new Discord.MessageCollector( message.channel, deleteeeFilter, { max: 999 }, ); deleteeeCollector.on("collect", async msg => { let idkwor; if (msg.content.toLowerCase() === "yes") { deleteeeCollector.stop(); idkwor = true; await db.findOne( { Guild: message.guild.id, Command: name, Response: response, Random: maybe, }, async (err, data) => { if (data) { data.Delete = idkwor; await db.findOneAndUpdate( { Guild: message.guild.id, Command: name, Response: response, Random: maybe, }, data, ); console.log(data); msg.reply( `Saved **${data.Command}** as a custom command`, ); } }, ); console.log(`Usage Delete: ${idkwor}`); } if (msg.content.toLowerCase() === "no") { deleteeeCollector.stop(); idkwor = false; await db.findOne( { Guild: message.guild.id, Command: name, Response: response, Random: maybe, }, async (err, data) => { if (data) { data.Delete = idkwor; await db.findOneAndUpdate( { Guild: message.guild.id, Command: name, Response: response, Random: maybe, }, data, ); console.log(data); msg.reply( `Saved **${data.Command}** as a custom command`, ); } }, ); } if (msg.content.toLowerCase() === "cancel") { msg.channel.send("The setup has been cancelled."); deleteeeCollector.stop(); return; } }); } if (msg.content.toLowerCase() === "no") { msg.channel.send( new Discord.MessageEmbed() .setColor(client.color) .setTitle(`Setup | 4/4`) .setDescription( `The responses won't be randomized. Do you want to have delete command usage? \`Type yes or no\``, ), ); randomCollector.stop(); maybe = false; await db.findOne( { Guild: message.guild.id, Command: name, Response: response, }, async (err, data) => { if (data) { data.Random = maybe; await db.findOneAndUpdate( { Guild: message.guild.id, Command: name, Response: response, }, data, ); console.log(data); } }, ); const deleteeFilter = m => m.author.id === message.author.id; const deleteeCollector = new Discord.MessageCollector( message.channel, deleteeFilter, { max: 999 }, ); deleteeCollector.on("collect", async msg => { let idkwor; if (msg.content.toLowerCase() === "yes") { deleteeCollector.stop(); idkwor = true; await db.findOne( { Guild: message.guild.id, Command: name, Response: response, }, async (err, data) => { if (data) { data.Delete = idkwor; await db.findOneAndUpdate( { Guild: message.guild.id, Command: name, Response: response, Random: maybe, }, data, ); msg.reply( `Saved **${data.Command}** as a custom command`, ); } }, ); console.log(`Usage Delete: ${idkwor}`); } if (msg.content.toLowerCase() === "no") { deleteeCollector.stop(); idkwor = false; await db.findOne( { Guild: message.guild.id, Command: name, Response: response, Random: maybe, }, async (err, data) => { if (data) { data.Delete = idkwor; await db.findOneAndUpdate( { Guild: message.guild.id, Command: name, Response: response, }, data, ); msg.reply( `Saved **${data.Command}** as a custom command`, ); } }, ); } if (msg.content.toLowerCase() === "cancel") { msg.channel.send("The setup has been cancelled."); deleteeCollector.stop(); return; } }); } if (msg.content.toLowerCase() === "cancel") { msg.channel.send("The setup has been cancelled."); randomCollector.stop(); return; } }); } else { await db.findOne( { Guild: message.guild.id, Command: name }, async (err, data) => { if (data) { data.Response = response; await db.findOneAndUpdate( { Guild: message.guild.id, Command: name }, data, ); console.log(data); } }, ); msg.channel.send( new Discord.MessageEmbed() .setTitle(`Setup | 3/3`) .setColor(client.color) .setDescription( `The response is \n**${response}**\nDo you to want have delete command usage?`, ), ); responseCollector.stop(); const deleteFilter = m => m.author.id === message.author.id; const deleteCollector = new Discord.MessageCollector( message.channel, deleteFilter, { max: 999 }, ); deleteCollector.on("collect", async msg => { let idkwor; if (msg.content.toLowerCase() === "yes") { deleteCollector.stop(); idkwor = true; await db.findOne( { Guild: message.guild.id, Command: name, Response: response, }, async (err, data) => { if (data) { data.Delete = idkwor; await db.findOneAndUpdate( { Guild: message.guild.id, Command: name, Response: response, }, data, ); msg.reply( `Saved **${data.Command}** as a custom command`, ); } }, ); } if (msg.content.toLowerCase() === "no") { deleteCollector.stop(); idkwor = false; await db.findOne( { Guild: message.guild.id, Command: name, Response: response, }, async (err, data) => { if (data) { data.Delete = idkwor; await db.findOneAndUpdate( { Guild: message.guild.id, Command: name, Response: response, }, data, ); msg.reply( `Saved **${data.Command}** as a custom command`, ); } }, ); } if (msg.content.toLowerCase() === "cancel") { msg.channel.send("The setup has been cancelled."); deleteCollector.stop(); return; } }); } }); }); } }, };