const { PermissionFlagsBits, ButtonInteraction, EmbedBuilder } = require("discord.js"); const { createTranscript } = require("discord-html-transcripts"); const { transcripts } = require("../../config.json"); const ticketSchema = require("../../Models/Ticket"); module.exports = { name: "interactionCreate", async execute(interaction) { const { guild, member, customId, channel } = interaction; const { ManageChannels, SendMessages } = PermissionFlagsBits; if (!interaction.isButton()) return; if (!["close", "lock", "unlock"].includes(customId)) return; if(!guild.members.me.permissions.has(ManageChannels)) return interaction.reply({ content: "I don't have permisions to execute this command", ephemeral: true }); const embed = new EmbedBuilder() .setColor(0x00FFEC); ticketSchema.findOne({ ChannelId: channel.id }, async (err, data) => { if (err) throw err; if (!data) return; const fetchedMember = guild.members.cache.get(data.MemberID); switch (customId) { case "close": if (data.Closed === true) return interaction.reply({ content: "Ticked is already getting deleted...", ephemeral: true }); const transcript = await createTranscript(channel, { limit: -1, returnBuffer: false, fileName: `${member.user.username}-ticket${data.Type}-${data.ticketID}.html` }); await ticketSchema.updateOne({ ChannelId: channel.id }, { closed: true }); const transcriptEmbed = new EmbedBuilder() .setTitle(`Transcript type: ${data.Type}\nId: ${data.ticketID}`) .setColor(0x7CFF7A) .setFooter({ text: member.user.tag, iconURL: member.displayAvatarURL({ dynamic: true }) }) .setTimestamp(); const savingProccess = new EmbedBuilder() .setTitle("Saving transcript...") .setDescription("Ticket wil closed on 10 seconds. Enable DM's for the ticket transcript") .setColor(0xFF6969) .setFooter({ text: member.user.tag, iconURL: member.displayAvatarURL({ dynamic: true }) }) .setTimestamp(); const res = await guild.channels.cache.get(transcripts).send({ embeds: [transcriptEmbed], files: [transcript], }); channel.send({ embeds: [savingProccess] }); setTimeout(function () { member.send({ embeds: [transcriptEmbed.setDescription(`Acces your ticket transcript: ${res.url}`)] }).catch(() => channel.send("Cloudn't send transcript to Direct Messages.")); channel.delete(); }, 10000); break; case "lock": if (member.permissions.has(ManageChannels)) return interaction.reply({ content: "Only our team can close tickets!", ephemeral: true }); if (data.Locked === true) return interaction.reply({ content: "This ticked is already locked", ephemeral: true }); await ticketSchema.updateOne({ ChannelId: channel.id }, { locked: true }); embed.setDescription("Ticket was locked succesfully 🔐"); channel.permissionOverwrites.edit(fetchedMember, { SendMessages: false }); return interaction.reply({ embeds: [embed] }); case "unlock": if (member.permissions.has(ManageChannels)) return interaction.reply({ content: "Only our team can unlock tickets!", ephemeral: true }); if (data.Unlocked === true) return interaction.reply({ content: "This ticked is already unlocked", ephemeral: true }); await ticketSchema.updateOne({ ChannelId: channel.id }, { unlocked: true }); embed.setDescription("Ticket was unlocked succesfully 🔓"); channel.permissionOverwrites.edit(fetchedMember, { SendMessages: true }); return interaction.reply({ embeds: [embed] }); }; }); }, };