tickets-djs
Version:
Easily make tickets with Discord.js!
259 lines (187 loc) • 7.71 kB
JavaScript
const db = require('quick.db')
class DiscordTicket {
async setRole(message, role) {
let content = {
embed: {
color: "#00ff00",
title: ":white_check_mark: | Ticket Role Set",
description: `Ticket role has been successfully set to ${role}. This is the role which will be pinged whenever a ticket is made.`
}
};
message.channel.send(content)
db.delete(`ticketRole_${message.guild.id}`)
db.set(`ticketRole_${message.guild.id}`, role)
}
async resetRole(message) {
db.delete(`ticketRole_${message.guild.id}`)
}
async editEmbed(message, input) {
if (!input) {
db.delete(`ticEmbed_${message.guild.id}`)
db.set(`ticEmbed_${message.guild.id}`, "Support will be here shortly.\nThe support team has been notified!")
const msge = await db.fetch(`ticEmbed_${message.guild.id}`)
message.channel.send(":white_check_maek: | The embed message was successfully set to `" + msge + "`")
} else {
db.delete(`ticEmbed_${message.guild.id}`)
db.set(`ticEmbed_${message.guild.id}`, input)
message.channel.send(":white_check_mark: | The embed message was successfully set to `" + input + "`")
}
}
async Category(message, ID,) {
db.delete(`ticCategory_${message.guild.id}`)
db.set(`ticCategory_${message.guild.id}`, ID)
message.channel.send(`:white_check_mark: | Successfully set the category to <#${ID}>`)
}
async makeTicket(message, reason, options) {
const category = await db.fetch(`ticCategory_${message.guild.id}`)
const ot = await db.fetch(`ticID_${message.guild.id}_${message.author.id}`)
const ticketRole = await db.fetch(`ticketRole_${message.guild.id}`)
let embedmsg = await db.fetch(`ticEmbed_${message.guild.id}`)
if(!embedmsg) embedmsg = "Please wait until the support team is here. They have been notified!"
const exEmbed = await db.fetch(`exEmbed_${message.guild.id}`)
if (message.guild.channels.cache.find(c => c.id == ot)) {
const channel = message.guild.channels.cache.find(c => c.id == ot)
let content = {
embed: {
color: "#ff0000",
title: "❌ | You already have a ticket open!",
description: `You already have ${channel} open! Make sure to close it to create another.`
}
}
message.reply(content)
} else {
db.add(`ticketNumber_${message.guild.id}`, 1)
const ticNum = await db.fetch(`ticketNumber_${message.guild.id}`)
const ticName = `Ticket-${ticNum}`
message.guild.channels.create(ticName).then(chan => {
db.set(`ticID_${message.guild.id}_${message.author.id}`, chan.id)
db.set(`chown_${chan.id}`, message.author.id)
db.set(`open_${chan.id}`, "open")
db.set(`chanID_${chan.id}`, chan.id)
chan.updateOverwrite(message.guild.roles.everyone, {
SEND_MESSAGES: false,
VIEW_CHANNEL: false,
READ_MESSAGES: false
})
chan.updateOverwrite(message.author.id, {
SEND_MESSAGES: true,
VIEW_CHANNEL: true,
READ_MESSAGES: true
})
let content = {
embed: {
color: "#00ff00",
title: `${message.author.tag} has created a ticket with the reason - ${reason}.\nTicket ID - ${ticNum}`,
description: `${embedmsg}`
}
}
let content2 = {
embed: {
color: "#00ff00",
title: ":white_check_mark: | Ticket Created",
description: `Ticket ${chan} has been created for you.`
}
}
if (ticketRole) {
chan.updateOverwrite(ticketRole.id, {
SEND_MESSAGES: true,
VIEW_CHANNEL: true,
READ_MESSAGES: true
})
const ROLE = chan.guild.roles.cache.find(r => r.id == ticketRole.id || r.name == ticketRole.name)
if (ROLE) {
chan.send(`${ROLE}`, content)
}
} else {
chan.send(content)
}
if (options) {
message.author.send(content2)
message.react('✅')
} else {
message.channel.send(content2)
}
if (!category) {
return;
} else {
chan.setParent(category)
}
})
}
}
async closeTicket(message, channel) {
const ot = await db.fetch(`open_${channel.id}`)
const messager = db.fetch(`chown_${channel.id}`)
const receiver = message.client.users.cache.find(member => member.id === messager)
if (ot === "open") {
receiver.send("Ticket Transcript", { files: [`src/commands/TICKETS/transcripts/${channel.name}_${channel.id}.txt`] });
channel.delete()
receiver.send(`:white_check_mark: | Ticket - ${channel.name} has been successfully closed!`)
}
else {
return;
}
}
async msgTicketChannel(channel, args) {
const ot = await db.fetch(`open_${channel.id}`)
if (ot === "open") {
let content = {
embed: {
description: `${args}`
}
}
channel.send(content)
} else {
return;
}
}
async ticketAddUser(channel, user) {
const ot = await db.fetch(`open_${channel.id}`)
if (ot === "open") {
channel.updateOverwrite(user.id, {
SEND_MESSAGES: true,
READ_MESSAGES: true,
VIEW_CHANNEL: true
})
let content = {
embed: {
color: "GREEN",
title: `New Member`,
description: `${user} has been added to the ticket!`
}
}
channel.send(content)
} else {
return;
}
}
async addEmbed(message, input) {
db.delete(`exEmbed_${message.guild.id}`)
db.set(`exEmbed_${message.guild.id}`, input)
}
async fetchChanID(message) {
const ID = await db.fetch(`chanID_${message.channel.id}`)
return ID;
}
async ticketRemoveUser(channel, user) {
const ot = await db.fetch(`open_${channel.id}`)
if (ot === "open") {
channel.updateOverwrite(user.id, {
SEND_MESSAGES: false,
READ_MESSAGES: false,
VIEW_CHANNEL: false
})
let content = {
embed: {
color: "GREEN",
title: `Removed Member!`,
description: `${user} has been removed from this ticket!`
}
}
channel.send(content)
} else {
return;
}
}
}
module.exports = DiscordTicket;