const { ButtonInteraction, MessageEmbed } = require('discord.js'); const { createTranscript} = require('discord-html-transcripts'); const DB = require('../../Models/Ticket'); const { TRANSCRIPTSID } = require('../../Structures/config.json'); module.exports = { name: 'interactionCreate', /** * * @param {ButtonInteraction} interaction */ async execute(interaction) { if(!interaction.isButton()) return; const {guild, customId, channel, member } = interaction; if(!member.permissions.has('MANAGE_CHANNELS')) return interaction.reply({content: 'You cant use that', ephemeral: true}) if(!['close', 'lock', 'unlock'].includes(customId)) return; const Embed = new MessageEmbed().setColor('DARK_BLUE'); DB.findOne({ChannelID: channel.id}, async(err, docs) => { if(err) throw err; if(!docs) return interaction.reply({content: 'No data was found for this ticket , please delete manually', ephemeral: true}); switch(customId) { case 'lock' : if(docs.Locked === true) return interaction.reply({content: 'The ticket is already locked', ephemeral: true}); await DB.updateOne({ChannelID: channel.id}, {Locked: true}); Embed.setDescription(`<:Lock:928252807520337931> This ticket is now locked`) channel.permissionOverwrites.edit(docs.MemberID, { SEND_MESSAGES: false }); return interaction.reply({embeds: [Embed]}); break; case 'unlock' : if(docs.Locked === false) return interaction.reply({content: 'The ticket is already unlocked', ephemeral: true}); await DB.updateOne({ChannelID: channel.id}, {Locked: false}); Embed.setDescription(`<:unLock:928252830630936577> This ticket is now unlocked`) channel.permissionOverwrites.edit(docs.MemberID, { SEND_MESSAGES: true }); return interaction.reply({embeds: [Embed]}); break; case 'close' : if(docs.Closed === true) return interaction.reply({content: 'This ticket is already closed, wait for it to be deleted', ephemeral: true}); const attachment = await createTranscript(channel, { limit: -1, returnBuffer: false, fileName: `${docs.Type} - ${docs.TicketID}.html` }); await DB.updateOne({ChannelID: channel.id}, {Closed: true}); const MEMBER = guild.members.cache.get(docs.MemberID); const Message = await guild.channels.cache.get(TRANSCRIPTSID).send({ embeds: [Embed.setAuthor(MEMBER.user.tag, MEMBER.user.displayAvatarURL({dynamic: true})).setTitle(`Transcript Type: ${docs.Type}\n ID: ${docs.TicketID}`)], files: [attachment] }); interaction.reply({embeds: [Embed.setDescription(`The transcript is now saved [TRANSCRIPT](${Message.url})`)]}); setTimeout(() => { channel.delete(); }, 10* 10000); } }); } };