2021-06-12 12:53:51 +02:00
const Discord = require ( "discord.js" ) ;
const db = require ( "../../models/custom-commands" ) ;
module . exports = {
2021-11-18 18:56:42 +01:00
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 } **. \n What 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 } ` ) ;
2021-06-12 12:53:51 +02:00
2021-11-18 18:56:42 +01:00
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 \` \n If 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 } ** \n Do 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 ;
}
} ) ;
}
} ) ;
} ) ;
}
} ,
2021-06-12 12:53:51 +02:00
} ;