2019-06-09 23:52:41 +01:00
|
|
|
// SupportBot
|
2020-01-26 22:35:45 +00:00
|
|
|
// Created by © 2020 Emerald Services
|
|
|
|
|
// Command: Say
|
2019-06-09 23:52:41 +01:00
|
|
|
|
|
|
|
|
const Discord = require("discord.js");
|
2020-01-26 22:35:45 +00:00
|
|
|
const bot = new Discord.Client();
|
2019-06-09 23:52:41 +01:00
|
|
|
|
2020-01-26 22:35:45 +00:00
|
|
|
const fs = require("fs");
|
|
|
|
|
const yaml = require('js-yaml');
|
|
|
|
|
|
|
|
|
|
const supportbot = yaml.load(fs.readFileSync('./supportbot-config.yml', 'utf8'));
|
2019-06-09 23:52:41 +01:00
|
|
|
|
2019-07-24 16:52:30 -06:00
|
|
|
exports.run = (bot, message, args) => {
|
2020-01-26 22:35:45 +00:00
|
|
|
|
|
|
|
|
console.log(`\u001b[33m`, `[${supportbot.Bot_Name}] > `, `\u001b[31;1m`, `${message.author.tag}`, `\u001b[32;1m`, `has executed`, `\u001b[31;1m`, `${supportbot.Prefix}${supportbot.Ticket_Command}`);
|
2019-06-09 23:52:41 +01:00
|
|
|
|
|
|
|
|
const ID = Math.floor(Math.random() * 10) + 2000;
|
2020-01-26 22:35:45 +00:00
|
|
|
const subject = args.join(" ") || `${supportbot.Default_Ticket_Reason}`;
|
2019-07-24 16:52:30 -06:00
|
|
|
|
2019-06-09 23:52:41 +01:00
|
|
|
const alreadyopen = new Discord.RichEmbed()
|
2020-01-26 22:35:45 +00:00
|
|
|
.setDescription(`:x: Cannot create a ticket because **${supportbot.Ticket_Channel_Name}-${ID}** already exists.`)
|
|
|
|
|
.setColor(supportbot.EmbedColour)
|
2020-01-05 15:33:23 +00:00
|
|
|
|
2020-01-26 22:35:45 +00:00
|
|
|
if (message.guild.channels.find(TicketChannel => TicketChannel.name === `${supportbot.Ticket_Channel_Name}-` + message.author.username)) return message.channel.send(alreadyopen);
|
2020-01-05 16:33:31 +00:00
|
|
|
|
2020-01-26 22:35:45 +00:00
|
|
|
message.guild.createChannel(`${supportbot.Ticket_Channel_Name}-${ID}`, {
|
2019-07-24 16:52:30 -06:00
|
|
|
type: 'text',
|
|
|
|
|
}).then(TicketChannel => {
|
|
|
|
|
|
2019-06-09 23:52:41 +01:00
|
|
|
// Roles
|
2020-01-26 22:35:45 +00:00
|
|
|
let staff = message.guild.roles.find(supportRole => supportRole.name === `${supportbot.StaffRole}`)
|
2019-08-16 18:45:18 +01:00
|
|
|
let everyone = message.guild.roles.find(everyoneRole => everyoneRole.name === "@everyone")
|
2020-01-26 22:35:45 +00:00
|
|
|
let department = message.guild.roles.find(DepartmentRole => DepartmentRole.name === `${supportbot.Department_Role_1}`)
|
|
|
|
|
let department2 = message.guild.roles.find(DepartmentRole => DepartmentRole.name === `${supportbot.Department_Role_2}`)
|
|
|
|
|
let department3 = message.guild.roles.find(DepartmentRole => DepartmentRole.name === `${supportbot.Department_Role_3}`)
|
2019-06-09 23:52:41 +01:00
|
|
|
|
|
|
|
|
// Permissions
|
|
|
|
|
TicketChannel.overwritePermissions(everyone, { SEND_MESSAGES: false, READ_MESSAGES: false })
|
2019-08-16 18:45:18 +01:00
|
|
|
TicketChannel.overwritePermissions(department, { SEND_MESSAGES: false, READ_MESSAGES: false })
|
|
|
|
|
TicketChannel.overwritePermissions(department2, { SEND_MESSAGES: false, READ_MESSAGES: false })
|
|
|
|
|
TicketChannel.overwritePermissions(department3, { SEND_MESSAGES: false, READ_MESSAGES: false })
|
|
|
|
|
TicketChannel.overwritePermissions(staff, { SEND_MESSAGES: true, READ_MESSAGES: true })
|
2019-06-09 23:52:41 +01:00
|
|
|
TicketChannel.overwritePermissions(message.author, { SEND_MESSAGES: true, READ_MESSAGES: true })
|
|
|
|
|
TicketChannel.overwritePermissions(bot.user, { SEND_MESSAGES: true, READ_MESSAGES: true })
|
|
|
|
|
|
|
|
|
|
// Category
|
2020-01-26 22:35:45 +00:00
|
|
|
let category = message.guild.channels.find(c => c.name === supportbot.category);
|
2019-06-09 23:52:41 +01:00
|
|
|
if (category) {
|
|
|
|
|
TicketChannel.setParent(category.id);
|
|
|
|
|
} else {
|
2020-01-26 22:35:45 +00:00
|
|
|
if (message.guild.channels.get(supportbot.category)) {
|
|
|
|
|
TicketChannel.setParent(message.guild.channels.get(supportbot.category).id);
|
2019-06-09 23:52:41 +01:00
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
const ticketopened = new Discord.RichEmbed()
|
2019-11-17 22:24:05 +00:00
|
|
|
.setTitle(":white_check_mark: Support Ticket Created")
|
|
|
|
|
.setDescription(`<@${message.author.id}> your support ticket created successfully`)
|
|
|
|
|
.addField("Your Ticket:", `<#${TicketChannel.id}>`)
|
2020-01-26 22:35:45 +00:00
|
|
|
.setColor(supportbot.Ticket_Colour)
|
2019-06-09 23:52:41 +01:00
|
|
|
message.channel.send({embed: ticketopened});
|
|
|
|
|
// Ticket Message - ( Able to edit this message via the settings.json file )
|
2020-01-26 22:35:45 +00:00
|
|
|
const ticketMessage = `Hi! <@${message.author.id}>\n${supportbot.Ticket_Message}`;
|
2019-06-09 23:52:41 +01:00
|
|
|
|
2020-01-26 22:35:45 +00:00
|
|
|
const Department_1 = supportbot.Ticket_Department_1;
|
|
|
|
|
const Department_2 = supportbot.Ticket_Department_2;
|
|
|
|
|
const Department_3 = supportbot.Ticket_Department_3;
|
2019-08-16 18:45:18 +01:00
|
|
|
|
2020-01-26 22:35:45 +00:00
|
|
|
const Emoji_1 = supportbot.Ticket_Department_Emoji_1;
|
|
|
|
|
const Emoji_2 = supportbot.Ticket_Department_Emoji_2;
|
|
|
|
|
const Emoji_3 = supportbot.Ticket_Department_Emoji_3;
|
2019-08-16 18:45:18 +01:00
|
|
|
|
2019-06-09 23:52:41 +01:00
|
|
|
const TicketMessage = new Discord.RichEmbed()
|
2019-08-16 18:45:18 +01:00
|
|
|
.setDescription(ticketMessage, true)
|
|
|
|
|
.addField("Available Departments", `${Emoji_1} ${Department_1}\n${Emoji_2} ${Department_2}\n${Emoji_3} ${Department_3}`)
|
2020-01-26 22:35:45 +00:00
|
|
|
.setColor(supportbot.Ticket_Colour)
|
|
|
|
|
.setFooter(supportbot.EmbedFooter)
|
2019-06-09 23:52:41 +01:00
|
|
|
|
2019-08-16 18:45:18 +01:00
|
|
|
if (subject != 'No Subject.') {
|
2019-12-03 23:17:47 +00:00
|
|
|
TicketMessage.addField("Reason", subject);
|
2019-08-16 18:45:18 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
TicketChannel.send({embed: TicketMessage}).then(function(msg) {
|
|
|
|
|
|
|
|
|
|
msg.react(Emoji_1).then(() => msg.react(Emoji_2)).then(() => msg.react(Emoji_3));
|
|
|
|
|
|
|
|
|
|
const filter = (reaction, user) => {
|
|
|
|
|
return [Emoji_1, Emoji_2, Emoji_3].includes(reaction.emoji.name) && user.id !== msg.author.id;
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
msg.awaitReactions(filter, { max: 1, time: 60000, errors: ['time'] })
|
|
|
|
|
.then(collected => {
|
|
|
|
|
const reaction = collected.first();
|
|
|
|
|
|
|
|
|
|
if (reaction.emoji.name === `${Emoji_1}`) {
|
2019-08-17 00:00:48 +01:00
|
|
|
TicketChannel.overwritePermissions(staff, { SEND_MESSAGES: true, READ_MESSAGES: true })
|
2019-08-16 18:45:18 +01:00
|
|
|
TicketChannel.overwritePermissions(department, { SEND_MESSAGES: true, READ_MESSAGES: true })
|
|
|
|
|
|
2020-01-05 16:33:31 +00:00
|
|
|
msg.channel.send("You have contacted out " + department + "\nPlease wait patiently for someone to reach out to you.")
|
2019-08-16 18:45:18 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (reaction.emoji.name === `${Emoji_2}`) {
|
2019-08-17 00:00:48 +01:00
|
|
|
TicketChannel.overwritePermissions(staff, { SEND_MESSAGES: true, READ_MESSAGES: true })
|
2019-08-16 18:45:18 +01:00
|
|
|
TicketChannel.overwritePermissions(department2, { SEND_MESSAGES: true, READ_MESSAGES: true })
|
|
|
|
|
|
2020-01-05 16:33:31 +00:00
|
|
|
msg.channel.send("You have contacted out " + department2 + "\nPlease wait patiently for someone to reach out to you.")
|
2019-08-16 18:45:18 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (reaction.emoji.name === `${Emoji_3}`) {
|
2019-08-17 00:00:48 +01:00
|
|
|
TicketChannel.overwritePermissions(staff, { SEND_MESSAGES: true, READ_MESSAGES: true })
|
2019-08-16 18:45:18 +01:00
|
|
|
TicketChannel.overwritePermissions(department3, { SEND_MESSAGES: true, READ_MESSAGES: true })
|
|
|
|
|
|
2020-01-05 16:33:31 +00:00
|
|
|
msg.channel.send("You have contacted out " + department3 + "\nPlease wait patiently for someone to reach out to you.")
|
2019-08-16 18:45:18 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
});
|
|
|
|
|
|
2019-06-09 23:52:41 +01:00
|
|
|
// Ticket Logging
|
|
|
|
|
const logEmbed = new Discord.RichEmbed()
|
|
|
|
|
.setTitle(":ticket: Logistics of your Ticket")
|
|
|
|
|
.addField("Ticket ID", ID, true)
|
|
|
|
|
.addField("User", `<@${message.author.id}>`, true)
|
|
|
|
|
.addField("Channel", `ticket#${ID}`, true)
|
2020-01-26 22:35:45 +00:00
|
|
|
.setColor(supportbot.EmbedColour)
|
|
|
|
|
.setFooter(supportbot.EmbedFooter)
|
2019-06-09 23:52:41 +01:00
|
|
|
|
|
|
|
|
if (subject != 'No Subject.') {
|
|
|
|
|
logEmbed.addField('Subject', subject, true);
|
|
|
|
|
}
|
|
|
|
|
|
2020-01-26 22:35:45 +00:00
|
|
|
let logChannel = message.guild.channels.find(TicketChannel => TicketChannel.name === `${supportbot.Ticket_Logs}`);
|
|
|
|
|
if(!logChannel) return message.channel.send(`:x: Error! Could not find the logs channel **${supportbot.Ticket_Logs}**`);
|
2019-06-09 23:52:41 +01:00
|
|
|
|
|
|
|
|
logChannel.send({embed: logEmbed})
|
|
|
|
|
|
|
|
|
|
}).catch(err=>{console.error(err)});
|
|
|
|
|
|
2020-01-26 22:35:45 +00:00
|
|
|
};
|
2019-06-09 23:52:41 +01:00
|
|
|
|
|
|
|
|
exports.help = {
|
2020-01-26 22:35:45 +00:00
|
|
|
name: supportbot.Ticket_Command,
|
|
|
|
|
};
|