2019-06-09 23:52:41 +01:00
// SupportBot
// Command: Close Ticket
2019-11-15 20:27:10 +00:00
2019-11-17 21:27:13 +00:00
const Discord = require ( "discord.js" );
2019-06-09 23:52:41 +01:00
const bot = new Discord . Client ()
2019-11-17 21:27:13 +00:00
bot . settings = require ( "../settings.json" );
2019-06-09 23:52:41 +01:00
2019-11-17 21:27:13 +00:00
/**
* @param {Discord.Message} message
*/
exports . run = ( bot , message , args ) => {
2019-06-09 23:52:41 +01:00
message . delete ();
2019-11-17 21:27:13 +00:00
2019-12-03 23:22:54 +00:00
if ( ! message . channel . name . startsWith ( ` ${ bot . settings . Ticket_Channel_Name } -` ) ) {
2019-11-17 21:27:13 +00:00
const embed = new Discord . RichEmbed ()
. setDescription ( `:x: Cannot use this command becase you are outside a ticket channel.` )
. setColor ( bot . settings . colour );
message . channel . send ( embed );
return ;
}
const closeRequestEmbed = new Discord . RichEmbed ()
. setDescription ( `Looks like you have come to the end of your support ticket\nPlease confirm that you want to close your ticket by saying ||**confirm**||` )
. setFooter ( "Your request will be avoided in 20 seconds" )
. setColor ( bot . settings . colour )
message . channel . send ( closeRequestEmbed ). then ( m => {
message . channel . awaitMessages ( response => response . content . toLowerCase () === `confirm` , {
max : 1 ,
time : 20 * 1000 ,
errors : [ 'time' ],
} ). then ( collected => {
let logChannel = message . guild . channels . find ( channel => channel . name === bot . settings . Transcript_Logs );
let user = message . author ;
let reason = args . join ( " " ) || "No reason provided." ;
let name = message . channel . name ;
let ticketChannel = message . channel ;
message . channel . send ( bot . settings . Ticket_Closing )
. then ( () => {
const logEmbed = new Discord . RichEmbed ()
. setTitle ( bot . settings . Transcript_Title )
. setColor ( bot . settings . colour )
. setFooter ( bot . settings . footer )
. addField ( "Ticket Author" , user )
. addField ( "Closed By" , message . author . tag )
. addField ( "Reason" , reason );
message . channel . fetchMessages ( { limit : 100 } )
. then ( msgs => {
let txt = '' ;
msgs = msgs . sort ( ( a , b ) => a . createdTimestamp - b . createdTimestamp );
txt += ` ${ message . guild . name } \n` ;
txt += `# ${ ticketChannel . name } \n` ;
txt += ` ${ msgs . size } messages\n\n\n` ;
msgs . forEach ( msg => {
if ( msg . content ) {
txt += `----- ${ msg . author . tag } at ${ msg . createdAt } \n` ;
txt += ` ${ msg . content } \n` ;
txt += `-----\n\n` ;
}
} );
2020-01-05 15:22:50 +00:00
// message.author.send( `A transcript has been generated for the ticket you closed.` );
// message.author.send( new Discord.Attachment( Buffer.from( txt ), `${name}.txt` ) );
2019-11-17 21:27:13 +00:00
logChannel . send ( logEmbed );
logChannel . send ( new Discord . Attachment ( Buffer . from ( txt ), ` ${ name } .txt` ) );
message . channel . delete ();
// message.channel.fetchMessages( { limit: 100, before: msgs.last().id } )
// .then( msg => {
// const merged = msgs.concat( msg );
// const output = merged.reduce( ( out, msg ) => {
// out += `[${message.createdAt}] ${message.author.tag}: ${message.cleanContent ? message.cleanContent.replace( /\n/g, '\r\n' ) : ''}\r\n`;
// return out;
// }, '' );
// log.send( { files: [ { attachment: Buffer.from( output, 'utf8' ), name: `${name}.txt` } ] } ).then( c.delete() ).catch( console.error ); // sends the file to logs
// return log.send( embed1 ).catch( console.error );
// } )
} );
} )
} ). catch ( () => {
m . edit ( 'The request to close the ticket has timed out.' ). then ( m2 => m2 . delete ( 3000 ) );
} );
} );
console . log ( `\x1b[36m` , ` ${ message . author } has executed ${ bot . settings . prefix }${ bot . settings . Close_Command } ` )
2019-06-09 23:52:41 +01:00
2019-07-24 16:52:30 -06:00
const CMDLog = new Discord . RichEmbed ()
2019-11-17 21:27:13 +00:00
. setTitle ( bot . settings . Commands_Log_Title )
. addField ( `User` , `<@ ${ message . author . id } >` )
. addField ( `Command` , bot . settings . Close_Command , true )
. addField ( `Channel` , message . channel , true )
. addField ( `Executed At` , message . createdAt , true )
. setColor ( bot . settings . colour )
. setFooter ( bot . settings . footer )
let CommandLog = message . guild . channels . find ( LogsChannel => LogsChannel . name === ` ${ bot . settings . Command_Log_Channel } ` );
if ( ! CommandLog ) return message . channel . send ( `:x: Error! Could not find the logs channel. ** ${ bot . settings . Command_Log_Channel } **\nThis can be changed via ``settings.json``` );
CommandLog . send ( CMDLog );
2019-07-24 16:52:30 -06:00
2019-06-09 23:52:41 +01:00
}
2019-11-15 21:53:39 +00:00
2019-06-09 23:52:41 +01:00
exports . help = {
name : bot . settings . Close_Command ,
2019-11-15 13:58:24 -06:00
}