const { ActionRowBuilder, ButtonBuilder, ButtonStyle, ChannelType } = require('discord.js'); module.exports.run = async (bot, message) => { if (message.channel.id !== 'channel_id') return; let clicks = 0; let user = message.author; let already = await message.guild.channels.cache.find((c) => c.name === `ticket-${user.username}-${user.discriminator}`); if (already) return await message.reply({ content: "❌ You already have an open ticket!\nAsk a moderator to close it first.", allowedMentions: { replied_user: false } }); let buttons = new ActionRowBuilder() .addComponents( new ButtonBuilder() .setLabel('No') .setCustomId('no') .setStyle(ButtonStyle.Danger), new ButtonBuilder() .setLabel('Yes') .setCustomId('yes') .setStyle(ButtonStyle.Success)); let buttonsDisabled = new ActionRowBuilder() .addComponents( new ButtonBuilder() .setLabel('No') .setCustomId('no-disabled') .setDisabled(true) .setStyle(ButtonStyle.Danger), new ButtonBuilder() .setLabel('Yes') .setCustomId('yes-disabled') .setDisabled(true) .setStyle(ButtonStyle.Success)); let reply = await message.reply({ content: "Are you sure you want to create a ticket?", components: [buttons], allowedMentions: { replied_user: false } }); let collector = await reply.createMessageComponentCollector({ time: 30000 }); collector.on('collect', async (i) => { if (i.user.id !== user.id) return await i.reply({ content: "❌ You cannot use these buttons!", ephemeral: true }); if (i.customId === 'no') { clicks = 1; return await i.update({ content: "🚫 Cancelled your ticket!", components: [] }); } else if (i.customId === 'yes') { clicks = 1; await i.deferUpdate(); let member = await message.guild.members.cache.get(user.id); let everyone = await message.guild.roles.cache.find((r) => r.name.toLowerCase().trim() === '@everyone'); let channel = await message.guild.channels.create({ name: `ticket-${user.username}-${user.discriminator}`, type: ChannelType.GuildText, parent: 'category_id' }); await channel.permissionOverwrites.edit(everyone, { ViewChannel: false, SendMessages: false }); await channel.permissionOverwrites.edit(member, { ViewChannel: true, SendMessages: true }); await i.editReply({ content: `✅ Successfully created your ticket! Please check ${channel}`, components: [] }); await channel.send({ content: `${user} Please type your issue here!\nSoon, a server moderator will be here for support.` }); } }); collector.on('end', async () => { if (clicks == 0) { await reply.edit({ content: "You did not respond in time!", components: [buttonsDisabled], allowedMentions: { replied_user: false } }); } else return; }); }; module.exports.name = 'ticket';