const { MessageActionRow, MessageButton } = require('discord.js'); const { MessageEmbed } = require('discord.js') const client = require('../../index.js') const discordTranscripts = require('discord-html-transcripts') const DB = require('../../Structures/Models/ticketSystem') client.on("interactionCreate", async (interaction) => { if(!interaction.isButton()) return if (interaction.isButton()) { const ID = Math.floor(Math.random() * 90000) + 10000 if (interaction.customId === 'tic') { DB.findOne({ MemberID: interaction.member.id }, async(err, data) => { if(err) throw err if(data) { return interaction.reply({content: `:x: Tu as déjà un ticket d\'ouvert! :x:`, ephemeral: true}) } if(!data) { interaction.message.edit({embeds: [ new MessageEmbed() .setColor('#0085ec') .setAuthor(interaction.guild.name, interaction.guild.iconURL({ dynamic: true })) .setDescription( "Pour créer un ticket, clique sur le bouton ci-dessous \n ⬇" ) .setTitle('Support Ticket') ], components: [ new MessageActionRow() .addComponents( new MessageButton() .setCustomId('tic') .setLabel('🔖 Create Ticket!') .setStyle('PRIMARY') .setDisabled(true) ) ] }) setTimeout(() => { interaction.message.edit({embeds: [ new MessageEmbed() .setColor('#0085ec') .setAuthor(interaction.guild.name, interaction.guild.iconURL({ dynamic: true })) .setDescription( "Pour créer un ticket, clique sur le bouton ci-dessous \n ⬇" ) .setTitle('Support Ticket') ], components: [ new MessageActionRow() .addComponents( new MessageButton() .setCustomId('tic') .setLabel('🔖 Create Ticket!') .setStyle('PRIMARY') .setDisabled(false) ) ] }) }, 5 * 1000) // const supportRole = interaction.guild.roles.cache.find(supportRole => supportRole.name.toLowerCase() === 'Support') // if(!supportRole){ // await interaction.guild.roles.create({ // name: 'Support', // color: 'YELLOW', // hoist: true, // permissions: ['MANAGE_CHANNELS', 'VIEW_CHANNEL', 'SEND_MESSAGES', 'MANAGE_MESSAGES'], // mentionable: true // }) // } // const supportRole2 = interaction.guild.roles.cache.find(r => r.name.toLowerCase() === 'Support') // const roleSupport = interaction.guild.roles.cache.get(supportRole2) await interaction.guild.channels.create(`ticket-${ID}`, { type: 'GUILD_TEXT', permissionOverwrites: [ { id: interaction.member.id, allow: ['VIEW_CHANNEL', 'SEND_MESSAGES', 'READ_MESSAGE_HISTORY'] }, { id: interaction.guild.id, deny: ['VIEW_CHANNEL'] }, // { // id: roleSupport, // allow: ['VIEW_CHANNEL', 'SEND_MESSAGES', 'MANAGE_MESSAGES', 'MANAGE_CHANNELS', 'READ_MESSAGE_HISTORY'] // } ] }) .then(async (channel) => { await DB.create({ GuildID: interaction.guild.id, MemberID: interaction.member.id, TicketMember: interaction.user.username, TicketID: ID, ChannelID: channel.id, Closed: false, }) const embed = new MessageEmbed() .setTitle('Support Ticket') .setDescription('Le staff arrive bientôt ! Pendant ce temps, je t\'invite à nous décrire ton problème ;) \n Si tu veux fermer le ticket, réagis avec le bouton ci-dessous \n ⬇') .setColor('#0085ec') .setAuthor(`Ticket ・ ${ID}`, interaction.guild.iconURL({ dynamic: true })); const del = new MessageActionRow() .addComponents( new MessageButton() .setCustomId('del') .setLabel('🗑️ Close Ticket') .setStyle('DANGER'), ); channel.send({ content: `Bienvenue <@${interaction.user.id}>`, embeds: [embed], components: [del] }).then(interaction.reply({ content: '🔖 Votre ticket est prêt!', ephemeral: true })) // const logChannel = interaction.guild.channels.cache.find(logChannel => logChannel.name.toLowerCase() === 'ticket-logs') // if(!logChannel){ // await interaction.guild.channels.create('ticket-logs', { // type: 'GUILD_TEXT', // permissionOverwrites: [ // { // id: interaction.guild.id, // deny: ['VIEW_CHANNEL'] // } // ] // }) // } // const logChannel2 = interaction.guild.channels.cache.find(logChannel => logChannel.name.toLowerCase() === 'ticket-logs') interaction.guild.channels.cache.get('922536500984426547').send({embeds: [ new MessageEmbed() .setColor('GREEN') .setAuthor(interaction.member.user.tag, interaction.member.user.displayAvatarURL({dynamic: true})) .setTitle('Ticket Created') .setDescription(`Un nouveau ticket a été crée par: ${interaction.user}\n Voici le ticket -> ${channel} -> \`${channel.name}\``) .setTimestamp() ]}) }) } }) } else if (interaction.customId === 'del') { DB.findOne({ChannelID: interaction.channel.id}, async (err, data) => { if(err) throw err if(!data){ return interaction.reply({content: 'No data was found', ephemeral: true}) } await DB.updateOne({ChannelID: interaction.channel.id}, {Closed: true}) interaction.channel.permissionOverwrites.edit(data.MemberID, { SEND_MESSAGES: false, }) const Embed = new MessageEmbed() .setTitle('Ticket Closed') .setDescription(`Le ticket a été fermé par ${interaction.user}`) .setColor('RED') interaction.channel.send({ embeds: [Embed] }) const Embed2 = new MessageEmbed() .setDescription(`📑 Sauvegarder et supprimer le ticket \n🔓 Ré-ouvrir le ticket \n🗑️ Supprimer le ticket`) .setColor('RED') const Buttons = new MessageActionRow() .addComponents( new MessageButton() .setCustomId('save-del') .setLabel('📑 Close and Save Ticket') .setStyle('PRIMARY'), new MessageButton() .setCustomId('reopen') .setLabel('🔓 Open Ticket') .setStyle('SUCCESS'), new MessageButton() .setCustomId('delete') .setLabel('🗑️ Delete Ticket') .setStyle('DANGER') ); interaction.channel.send({embeds: [Embed2], components: [Buttons]}).then( interaction.reply( {content: '🔒 Ticket fermé!', ephemeral: true } )) const Embed3 = new MessageEmbed() .setTitle('Ticket Closed') .setAuthor(interaction.user.tag, interaction.user.displayAvatarURL({dynamic: true})) .setDescription(`Le ticket -> ${interaction.channel} \`${interaction.channel.name}\` a été fermé`) .setColor('RED') .setTimestamp() // const logChannel = interaction.guild.channels.cache.find(logChannel => logChannel.name.toLowerCase() === 'ticket-logs') // if(!logChannel){ // await interaction.guild.channels.create('ticket-logs', { // type: 'GUILD_TEXT', // permissionOverwrites: [ // { // id: interaction.guild.id, // deny: ['VIEW_CHANNEL'] // } // ] // }) // } // const logChannel2 = interaction.guild.channels.cache.find(logChannel => logChannel.name.toLowerCase() === 'ticket-logs') interaction.guild.channels.cache.get('922536500984426547').send({embeds: [Embed3]}) interaction.message.edit({embeds: [interaction.message.embeds[0]], components: [ new MessageActionRow() .addComponents( new MessageButton() .setCustomId('del') .setLabel('🗑️ Close Ticket') .setStyle('DANGER') .setDisabled(true), ) ] }) }) // interaction.message.edit({content: `Voulez-vous vraiment fermer le ticket ?`, embeds: [], components: [ // new MessageActionRow().addComponents( // new MessageButton() // .setCustomId('yes-close') // .setLabel('🗑️ Yes Close It!') // .setStyle('SUCCESS'), // new MessageButton() // .setCustomId('no-close') // .setLabel('🛑 No Don\'t!!!') // .setStyle('DANGER') // ) // ]}).then(interaction.reply({content: 'Verification en cours...', ephemeral: true})) } else if (interaction.customId === 'save-del'){ if(!interaction.member.permissions.has('MANAGE_MESSAGES')) return interaction.reply({content: `Vous n'avez pas la permission d'utiliser ce bouton !`}) DB.deleteOne({ChannelID: interaction.channel.id}, function(err) { if(err) return console.log(err) }) const attachment = await discordTranscripts.createTranscript(interaction.channel) // const tranChannel = interaction.guild.channels.cache.find(tranChannel => tranChannel.name.toLowerCase() === 'ticket-transcripts') // if(!tranChannel){ // await interaction.guild.channels.create('ticket-transcripts', { // type: 'GUILD_TEXT', // permissionOverwrites: [ // { // id: interaction.guild.id, // deny: ['VIEW_CHANNEL'] // } // ] // }) // } // const tranChannel2 = interaction.guild.channels.cache.find(tranChannel => tranChannel.name.toLowerCase() === 'ticket-transcripts') interaction.guild.channels.cache.get('922487773632544809').send({embeds: [ new MessageEmbed() .setColor('#0085ec') .setAuthor(interaction.member.user.tag, interaction.member.user.displayAvatarURL({dynamic: true})) .setTitle('Transcript Ticket') .setDescription(`Voici la sauvegarde du ticket \`${interaction.channel.name}\``) ], files: [attachment]}) // const logChannel = interaction.guild.channels.cache.find(logChannel => logChannel.name.toLowerCase() === 'ticket-logs') // if(!logChannel){ // await interaction.guild.channels.create('ticket-logs', { // type: 'GUILD_TEXT', // permissionOverwrites: [ // { // id: interaction.guild.id, // deny: ['VIEW_CHANNEL'] // } // ] // }) // } // const logChannel2 = interaction.guild.channels.cache.find(logChannel => logChannel.name.toLowerCase() === 'ticket-logs') interaction.guild.channels.cache.get('922536500984426547').send({embeds: [ new MessageEmbed() .setColor('RED') .setAuthor(interaction.member.user.tag, interaction.member.user.displayAvatarURL({dynamic: true})) .setTitle('Ticket Saved and Deleted') .setDescription(`\`${interaction.channel.name}\` a été supprimé et sauvegardé -> ${interaction.guild.channels.cache.get('922487773632544809')}`) .setTimestamp() ]}) interaction.channel.delete() } else if (interaction.customId === 'reopen') { DB.findOne({ChannelID: interaction.channel.id}, async (err, data) => { if (err) throw err if(!data) { return interaction.reply({content: 'No data was found', ephemeral: true}) } await DB.updateOne({ChannelID: interaction.channel.id}, {Closed: false}) interaction.channel.permissionOverwrites.edit(data.MemberID, { SEND_MESSAGES: true, }) interaction.message.edit({embeds: [interaction.message.embeds[0]], components: [ new MessageActionRow() .addComponents( new MessageButton() .setCustomId('del') .setLabel('🗑️ Close Ticket') .setStyle('DANGER') .setDisabled(true), ) ] }) interaction.channel.send({embeds: [ new MessageEmbed() .setColor('GREEN') .setDescription(`${interaction.user} Ton ticket a été ré-ouvert ! Si tu veux le re-fermer, appuie sur le bouton ci-dessous\n⬇ `) ], components: [ new MessageActionRow() .addComponents( new MessageButton() .setCustomId('del') .setLabel('🗑️ Close Ticket') .setStyle('DANGER'), ) ] }).then( interaction.reply({content: `🔓 Ticket ré-ouvert!`, ephemeral: true}) ) // const logChannel = interaction.guild.channels.cache.find(logChannel => logChannel.name.toLowerCase() === 'ticket-logs') // if(!logChannel){ // await interaction.guild.channels.create('ticket-logs', { // type: 'GUILD_TEXT', // permissionOverwrites: [ // { // id: interaction.guild.id, // deny: ['VIEW_CHANNEL'] // } // ] // }) // } // const logChannel2 = interaction.guild.channels.cache.find(logChannel => logChannel.name.toLowerCase() === 'ticket-logs') interaction.guild.channels.cache.get('922536500984426547').send({embeds: [ new MessageEmbed() .setColor('GREEN') .setAuthor(interaction.member.user.tag, interaction.member.user.displayAvatarURL({dynamic: true})) .setTitle('Ticket Re-Opened') .setDescription(`Le ticket -> ${interaction.channel} \`${interaction.channel.name}\` a été ré-ouvert`) .setTimestamp() ]}) }) } else if (interaction.customId === 'delete') { if(!interaction.member.permissions.has('MANAGE_MESSAGES')) return interaction.reply({content: `Vous n'avez pas la permission d'utiliser ce bouton !`}) DB.deleteOne({ChannelID: interaction.channel.id}, function(err) { if(err) return console.log(err) }) // const logChannel = interaction.guild.channels.cache.find(logChannel => logChannel.name.toLowerCase() === 'ticket-logs') // if(!logChannel){ // await interaction.guild.channels.create('ticket-logs', { // type: 'GUILD_TEXT', // permissionOverwrites: [ // { // id: interaction.guild.id, // deny: ['VIEW_CHANNEL'] // } // ] // }) // } // const logChannel2 = interaction.guild.channels.cache.find(logChannel => logChannel.name.toLowerCase() === 'ticket-logs') interaction.guild.channels.cache.get('922536500984426547').send({embeds: [ new MessageEmbed() .setColor('RED') .setAuthor(interaction.member.user.tag, interaction.member.user.displayAvatarURL({dynamic: true})) .setTitle('Ticket Deleted') .setDescription(`Le ticket \`${interaction.channel.name}\` a été supprimé sans être sauvegardé`) .setTimestamp() ]}) interaction.channel.delete() } } }) module.exports = { name: 'ticketSystem' }