nyx/commands/Config/create.js
2021-06-24 15:53:19 +08:00

429 lines
16 KiB
JavaScript

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) {
let nameFilter = m => m.author.id === message.author.id;
let nameCollector = new Discord.MessageCollector(
message.channel,
nameFilter,
{ max: 999 }
);
nameCollector.on("collect", async msg => {
let name = msg.content.toLowerCase();
const data = await db.findOne({
Guild: message.guild.id,
Command: name,
});
if (data) {
nameCollector.stop();
return message.inlineReply("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();
}
let responseFilter = m => m.author.id === message.author.id;
let responseCollector = new Discord.MessageCollector(
message.channel,
responseFilter,
{ max: 999 }
);
responseCollector.on("collect", async msg => {
let 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.`
)
);
let randomFilter = m => m.author.id === message.author.id;
let 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}`);
let deleteeeFilter = m => m.author.id === message.author.id;
let 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.inlineReply(
`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.inlineReply(
`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);
}
}
);
let deleteeFilter = m => m.author.id === message.author.id;
let 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.inlineReply(
`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.inlineReply(
`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();
let deleteFilter = m => m.author.id === message.author.id;
let 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.inlineReply(
`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.inlineReply(
`Saved **${data.Command}** as a custom command`
);
}
}
);
}
if (msg.content.toLowerCase() === "cancel") {
msg.channel.send("The setup has been cancelled.");
deleteCollector.stop();
return;
}
});
}
});
});
}
},
};