UNPKG

@skybloxsystems/ticket-bot

Version:
483 lines (401 loc) 27.6 kB
const BaseCommand = require('../../utils/structures/BaseCommand'); const { MessageEmbed } = require('discord.js'); const bot = require('discord.js'); const discord = require('discord.js'); const fs = require('fs').promises; const jsdom = require('jsdom'); const { JSDOM } = jsdom; const dom = new JSDOM(); const document = dom.window.document; const CloseSchema = require('../../schemas/TicketLogs-schema'); const mongo = require('../../mongo'); const ClaimTicket = require('../../schemas/ticketclaim') const MainDatabase = require('../../schemas/TicketData'); const { mainModule } = require('process'); const { response } = require('express'); module.exports = class CloseCommand extends BaseCommand { constructor() { super('close', 'Main', []); } async run(client, message, args) { ClaimTicket.findOne({ ChannelID: message.channel.id }, async (err2001, data2001) => { if (err2001) throw err2001; if (data2001) { if (data2001.Locked === 'Yes') { const cannotclose = new MessageEmbed() .setTitle('Can not close') .setDescription('This ticket can not be closed because it is currently locked. Please unlock it by one of the staff members.') return message.channel.send({ embeds: [cannotclose] }) } else { if (data2001.Locked === 'No') { MainDatabase.findOne({ ServerID: message.guildId }, async (err01, data01) => { if (err01) throw err01; if (data01) { ClaimTicket.findOne({ ChannelID: message.channel.id }, async (err200, data200) => { if (err200) throw err200; if (data200) { if (data200.ClaimUserID === "") { if (!message.member.roles.cache.some(r => r.id === `${data01.SupportRoleID}`)) { const NoPerms2 = new MessageEmbed() .setTitle('Error') .setDescription('The command you tried to run is only allowed to be used on Ticket staff members only') return message.channel.send({ embeds: [NoPerms2] }) } const NoClaimer = new MessageEmbed() .setTitle('Error') .setDescription('No staff member has not claimed the ticket. This ticket can not be closed') message.channel.send({ embeds: [NoClaimer] }) } else { if (data01.Transcript === "Yes") { if (!message.member.roles.cache.some(r => r.id === `${data01.SupportRoleID}`)) { const NoPerms3 = new MessageEmbed() .setTitle('Error') .setDescription('The command you tried to run is only allowed to be used on Ticket staff members only') return message.channel.send({ embeds: [NoPerms3] }) } function makeURL(length) { var result = ''; var characters = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789'; var charactersLength = characters.length; for (var i = 0; i < length; i++) { result += characters.charAt(Math.floor(Math.random() * charactersLength)); } return result; } const generators = makeURL(20) const ticketembed = new MessageEmbed() .setColor('#f6f7f8') .setTimestamp() .setTitle(`Ticket`) .setDescription(`<@${message.author.id}>, are you sure you want to close this ticket? **yes**. If not, it will cancel the command within 10 seconds.`) const closed = new MessageEmbed() .setColor('#f6f7f8') .setTimestamp() .setTitle(`Ticket`) .setDescription(`You have closed the following ticket: ${message.channel.name}.`) const Logs = new MessageEmbed() .setColor('#f6f7f8') .setTimestamp() .setTitle('Ticket-logs') .setDescription(`<@${message.author.id}> has close the following ticket: ${message.channel.name} successfully. \n\n All tickets are removed of our server within 24 hours.`) const notclosed = new MessageEmbed() .setColor('#f6f7f8') .setTimestamp() .setTitle(`Ticket`) .setDescription(`Close cancelled.`) const closing = new MessageEmbed() .setColor('#f6f7f8') .setTimestamp() .setTitle(`Ticket`) .setDescription(`Your ticket will be closed in 5 seconds`) .setFooter(`Making a transcript....`) // async function Transcriptmain() { // let messageCollection = new discord.Collection(); // let channelMessages = await message.channel.messages.fetch({ // limit: 100 // }).catch(err => console.log(err)); // messageCollection = messageCollection.concat(channelMessages); // while (channelMessages.size === 100) { // let lastMessageId = channelMessages.lastKey(); // channelMessages = await message.channel.messages.fetch({ limit: 100, before: lastMessageId }).catch(err => console.log(err)); // if (channelMessages) // messageCollection = messageCollection.concat(channelMessages); // } // let msgs = [messageCollection.values()]; // let data = await fs.readFile('./src/dashboard/template.html', 'utf8').catch(err => console.log(err)); // if (data) { // await fs.writeFile(`./src/dashboard/Tickets/${message.guild.id}/${generators}.html`, data).catch(err => console.log(err)); // let guildElement = document.createElement('div'); // let guildText = document.createTextNode(message.guild.name); // let guildImg = document.createElement('img'); // guildImg.setAttribute('src', message.guild.iconURL()); // guildImg.setAttribute('width', '150'); // guildElement.appendChild(guildImg); // guildElement.appendChild(guildText); // console.log(guildElement.outerHTML); // await fs.appendFile(`./src/dashboard/Tickets/${message.guild.id}/${generators}.html`, guildElement.outerHTML).catch(err => console.log(err)); // msgs.forEach(async msg => { // let parentContainer = document.createElement("div"); // parentContainer.className = "parent-container"; // let avatarDiv = document.createElement("div"); // avatarDiv.className = "avatar-container"; // let img = document.createElement('img'); // img.setAttribute('src', msg.author.displayAvatarURL()); // img.className = "avatar"; // avatarDiv.appendChild(img); // parentContainer.appendChild(avatarDiv); // let messageContainer = document.createElement('div'); // messageContainer.className = "message-container"; // let nameElement = document.createElement("span"); // let name = document.createTextNode(msg.author.tag + " " + msg.createdAt.toDateString() + " " + msg.createdAt.toLocaleTimeString() + " UTC"); // nameElement.appendChild(name); // messageContainer.append(nameElement); // if (msg.content.startsWith("```")) { // let m = msg.content.replace(/```/g, ""); // let codeNode = document.createElement("code"); // let textNode = document.createTextNode(m); // codeNode.appendChild(textNode); // messageContainer.appendChild(codeNode); // } // else { // let msgNode = document.createElement('span'); // let textNode = document.createTextNode(msg.content); // msgNode.append(textNode); // messageContainer.appendChild(msgNode); // } // parentContainer.appendChild(messageContainer); // await fs.appendFile(`./src/dashboard/Tickets/${message.guild.id}/${generators}.html`, parentContainer.outerHTML).catch(err => console.log(err)); // }); // } // } if (!message.channel.name.startsWith("ticket-")) return message.channel.send("This is not a valid ticket") if (!message.member.permissions.has("MANAGE_CHANNELS")) return message.channel.send("You need MANAGE_CHANNELS permission to use this command") message.channel.send({ embeds: [ticketembed] }) .then((m) => { message.channel.awaitMessages({ filter: response => response.content == "yes", max: 1, time: 10000, errors: ['time'] }).then(() => { message.channel.send({ embeds: [closing] }) // fs.mkdir(`./src/dashboard/Tickets/${message.guildId}`, function (err) { // if (err) { // console.log(err) // } else { // console.log("New directory successfully created.") // } // }) // Transcriptmain(); setTimeout(() => { ClaimTicket.findOne({ ChannelID: message.channel.id }, async (err, data) => { if (err) throw err; if (data) { const DMTicketCreatorClosed = new MessageEmbed() .setColor('#f5f5f5') .setTimestamp() .setTitle(`Ticket`) .setDescription(`<@${data.ClaimUserID}> ${data01.CloseMessage}.`) const DMTicketClaimClosed = new MessageEmbed() .setColor('#f5f5f5') .setTimestamp() .setTitle(`Ticket`) .setDescription(`You have closed the following ticket-${data.ChannelID} for the following user <@${data.id}>.`) const ticketttcreator = client.users.cache.get(data.id) ticketttcreator.send({ embeds: [DMTicketCreatorClosed] }) const ticketttClaimer = client.users.cache.get(`${data.ClaimUserID}`) ticketttClaimer.send({ embeds: [DMTicketClaimClosed] }) setTimeout(() => { ClaimTicket.findOneAndDelete({ ChannelID: data.ChannelID }, async (err02, data02) => { if (err02) throw err02; if (data02) { console.log(`${data.id} ticket has been removed from the database`) } }) }, 5000); } MainDatabase.findOne({ ServerID: message.guild.id }, async (err30, data30) => { if (err30) throw err30; if (data30) { const MainTicketTrackerChannel = message.guild.channels.cache.get(`${data01.TicketTrackerChannelID}`) MainTicketTrackerChannel.setName(`Tickets: ${data30.TicketNumber - 1}`) } }) message.channel.delete() const SupportLogs = message.guild.channels.cache.find(ch => ch.name.toLowerCase() == "ticket-logs" && ch.type == "GUILD_TEXT") const TranscriptLogs = message.guild.channels.cache.find(ch => ch.name.toLowerCase() == "transcript" && ch.type == "GUILD_TEXT") const UserName = client.users.cache.find(user => user.id === data.id) console.log(UserName) SupportLogs.send({ embeds: [Logs] }) const CloseEmbed = new MessageEmbed() .setTitle('Transcript') .setDescription(`${data01.TranscriptMessage} ${message.channel.name}`) .addField('Transcript', `Disabled in v3.0 testing`) // .addField('Transcript', `[Click Me](https://shard1.ticketbots.tk/Tickets/${message.guild.id}/${generators}.html)`) .addField('Reason', `${data.Reason}`) .addField('Time', `${data.Time}`) .addField('Claim User', `<@${data.ClaimUserID}>`) const discordTranscripts = require('discord-html-transcripts'); const channelsss = message.channel; const attachment = await discordTranscripts.createTranscript(channelsss, { limit: -1, // Max amount of messages to fetch. returnBuffer: false, // Return a buffer instead of a MessageAttachment fileName: `${generators}.html` // Only valid with returnBuffer false. Name of attachment. }); TranscriptLogs.send({ embeds: [CloseEmbed] }) TranscriptLogs.send({ files: [attachment] }) }) }, 5000); }).catch(() => { m.edit({ embeds: [notclosed] }) }) }).catch(() => { m.edit({ embeds: [notclosed] }) }) } else { if (!message.member.roles.cache.some(r => r.id === `${data01.SupportRoleID}`)) { const NoPerms = new MessageEmbed() .setTitle('Error') .setDescription('The command you tried to run is only allowed to be used on Ticket staff members only') return message.channel.send({ embeds: [NoPerms] }) } const ticketembed2 = new MessageEmbed() .setColor('#f6f7f8') .setTimestamp() .setTitle(`Ticket`) .setDescription(`<@${message.author.id}>, are you sure you want to close this ticket? **yes**. If not, it will automatticaly close within 10 seconds.`) const closed2 = new MessageEmbed() .setColor('#f6f7f8') .setTimestamp() .setTitle(`Ticket`) .setDescription(`You have closed the following ticket: ${message.channel.name}.`) const Logs2 = new MessageEmbed() .setColor('#f6f7f8') .setTimestamp() .setTitle('Ticket-logs') .setDescription(`<@${message.author.id}> has close the following ticket: ${message.channel.name} successfully.`) const notclosed2 = new MessageEmbed() .setColor('#f6f7f8') .setTimestamp() .setTitle(`Ticket`) .setDescription(`Close cancelled.`) const closing2 = new MessageEmbed() .setColor('#f6f7f8') .setTimestamp() .setTitle(`Ticket`) .setDescription(`Your ticket will be closed in 5 seconds`) // async function Transcriptmain() { // let messageCollection = new discord.Collection(); // let channelMessages = await message.channel.messages.fetch({ // limit: 100 // }).catch(err => console.log(err)); // messageCollection = messageCollection.concat(channelMessages); // while (channelMessages.size === 100) { // let lastMessageId = channelMessages.lastKey(); // channelMessages = await message.channel.messages.fetch({ limit: 100, before: lastMessageId }).catch(err => console.log(err)); // if (channelMessages) // messageCollection = messageCollection.concat({ embeds: [channelMessages]}); // } // let msgs = messageCollection.array().reverse(); // let data = await fs.readFile('./src/dashboard/template.html', 'utf8').catch(err => console.log(err)); // if (data) { // await fs.writeFile(`./src/dashboard/Tickets/${message.guildId}/${generators}.html`, data).catch(err => console.log(err)); // let guildElement = document.createElement('div'); // let guildText = document.createTextNode(message.guild.name); // let guildImg = document.createElement('img'); // guildImg.setAttribute('src', message.guild.iconURL()); // guildImg.setAttribute('width', '150'); // guildElement.appendChild(guildImg); // guildElement.appendChild(guildText); // console.log(guildElement.outerHTML); // await fs.appendFile(`./src/dashboard/Tickets/${message.guildId}/${generators}.html`, guildElement.outerHTML).catch(err => console.log(err)); // msgs.forEach(async msg => { // let parentContainer = document.createElement("div"); // parentContainer.className = "parent-container"; // let avatarDiv = document.createElement("div"); // avatarDiv.className = "avatar-container"; // let img = document.createElement('img'); // img.setAttribute('src', msg.author.displayAvatarURL()); // img.className = "avatar"; // avatarDiv.appendChild(img); // parentContainer.appendChild(avatarDiv); // let messageContainer = document.createElement('div'); // messageContainer.className = "message-container"; // let nameElement = document.createElement("span"); // let name = document.createTextNode(msg.author.tag + " " + msg.createdAt.toDateString() + " " + msg.createdAt.toLocaleTimeString() + " UTC"); // nameElement.appendChild(name); // messageContainer.append(nameElement); // if (msg.content.startsWith("```")) { // let m = msg.content.replace(/```/g, ""); // let codeNode = document.createElement("code"); // let textNode = document.createTextNode(m); // codeNode.appendChild(textNode); // messageContainer.appendChild(codeNode); // } // else { // let msgNode = document.createElement('span'); // let textNode = document.createTextNode(msg.content); // msgNode.append(textNode); // messageContainer.appendChild(msgNode); // } // parentContainer.appendChild(messageContainer); // // await fs.appendFile(`./src/dashboard/Tickets/${message.guildId}/${generators}.html`, parentContainer.outerHTML).catch(err => console.log(err)); // }); // } // } if (!message.channel.name.startsWith("ticket-")) return message.channel.send("This is not a valid ticket") if (!message.member.permissions.has("MANAGE_CHANNELS")) return message.channel.send("You need MANAGE_CHANNELS permission to use this command") message.channel.send({ embeds: [ticketembed2] }).then((m) => { message.channel.awaitMessages({ filter: response => response.content == "yes", max: 1, time: 10000, errors: ['time'] }).then(() => { message.channel.send(closing2) Transcriptmain(); setTimeout(() => { ClaimTicket.findOne({ ChannelID: message.channel.id }, async (err, data) => { if (err) throw err; if (data) { const DMTicketCreatorClosed = new MessageEmbed() .setColor('#f5f5f5') .setTimestamp() .setTitle(`Ticket`) .setDescription(`<@${data.ClaimUserID}> has closed your ticket! If you think this was a mistake, please contact one of the admins. Thank you.`) const DMTicketClaimClosed = new MessageEmbed() .setColor('#f5f5f5') .setTimestamp() .setTitle(`Ticket`) .setDescription(`You have closed the following ticket ${data.ChannelID} for the following user <@${data.id}>.`) const ticketttcreator = client.users.cache.get(data.id) ticketttcreator.send({ embeds: [DMTicketCreatorClosed] }) const ticketttClaimer = client.users.cache.get(`${data.ClaimUserID}`) ticketttClaimer.send({ embeds: [DMTicketClaimClosed] }) setTimeout(() => { ClaimTicket.findOneAndDelete({ ChannelID: message.channel.id }, async (err02, data02) => { if (err02) throw err02; if (data02) { console.log(`${data.id} ticket has been removed from the database`) } }) }, 5000); } MainDatabase.findOne({ ServerID: message.guildId }, async (err300, data300) => { if (err300) throw err300; if (data300) { const MainTicketTrackerChannel = message.guild.channels.cache.get(`${data01.TicketTrackerChannelID}`) MainTicketTrackerChannel.setName(`Tickets: ${data300.TicketNumber - 1}`) } }) message.channel.delete() const SupportLogs = message.guild.channels.cache.find(ch => ch.name.toLowerCase() == "ticket-logs" && ch.type == "text") const TranscriptLogs = message.guild.channels.cache.find(ch => ch.name.toLowerCase() == "transcript" && ch.type == "text") const UserName = client.users.cache.find(user => user.id === data.id) console.log(UserName) SupportLogs.send({ embeds: [Logs2] }) }) }, 5000); }).catch(() => { m.edit({ embeds: [notclosed2] }) }) }).catch(() => { m.edit({ embeds: [notclosed2] }) }) } } } }) } else { const NoData = new MessageEmbed() .setTitle('Not updated') .setDescription(`The server is not updated with the latest version of the bot. This server is currently running version **v2.0** and the latest update is **v2.1** Please get the owner to run ${client.prefix}update`) message.channel.send({ embeds: [NoData] }) } }) } } } }) } }