Untitled

 avatar
unknown
plain_text
a year ago
4.8 kB
11
Indexable
const { Client, GatewayIntentBits, EmbedBuilder, ActionRowBuilder, ButtonBuilder, ButtonStyle,ChannelType, PermissionsBitField } = require('discord.js');
const client = new Client({ intents: [GatewayIntentBits.Guilds, GatewayIntentBits.GuildMessages, GatewayIntentBits.MessageContent, GatewayIntentBits.GuildMembers] });
const discordTranscripts = require('discord-html-transcripts');


const ticketPanelChannelId = '1225124137215852634';
const supportRoleId = '1208305738737262602'; // Replace with actual ID
const transcriptChannelId = '1225145709435687015'; // Replace with actual ID
const closeTicketTimeout = 10;

client.on('ready', () => {
    console.log(`Logged in as ${client.user.tag}!`);
    client.user.setStatus('dnd');

    
    sendTicketPanel();
});

client.on('interactionCreate', async interaction => {
    if (!interaction.isButton()) return;

    if (interaction.customId === 'createTicket') {
        const guild = interaction.guild;
        const ticketCreator = interaction.user;

        // Generate a channel name (customize as needed)
        const ticketName = `ticket-${ticketCreator.id}`;

        try {
            console.log('ticketName:', ticketName);
            const channel = await guild.channels.create({
                name: ticketName, 
                type: ChannelType.GuildText,
                permissionOverwrites: [
                    { 
                        id: ticketCreator.id,
                        allow: [PermissionsBitField.Flags.ViewChannel, PermissionsBitField.Flags.SendMessages, PermissionsBitField.Flags.ReadMessageHistory]
                    },
                    {
                        id: guild.id, 
                        deny: [PermissionsBitField.Flags.ViewChannel]
                    },
                    
                ]
            });
        

        // Welcome embed
        const embed = new EmbedBuilder()
            .setTitle(`Welcome to your Ticket, ${ticketCreator.username}!`)
            .setDescription('A support member will be with you shortly.')
            .setColor(0x00ffff) // Light blue color
            .setFooter({
                text: 'Please describe your issue in detail.',
        });

        const button = new ActionRowBuilder().addComponents(
            new ButtonBuilder()
            .setCustomId('closeTicket')
            .setLabel('Close Ticket')
            .setStyle(ButtonStyle.Danger) // Red colored button
        );

        await channel.send({ embeds: [embed], components: [button] });

      // Send DM to ticket opener
        await ticketCreator.send({
            content: `Your ticket has been created: ${channel}`,
        });
    } catch (error) {
        console.error('Error creating ticket channel:', error);
        interaction.reply({
        content: 'There was an error creating your ticket. Please try again, or contact a staff member.',
        ephemeral: true,
      });
    }
    }else if (interaction.customId === 'closeTicket') {
        const channel = interaction.channel;

        if (channel.type !== ChannelType.GuildText) return;

        // Generate Transcript
        const messages = await channel.messages.fetch({ limit: 100 }); 
        const attachment = await discordTranscripts.createTranscript(messages);

        // Send Transcript
        const transcriptChannel = client.channels.cache.get(transcriptChannelId);
        await transcriptChannel.send({
            content: `**Ticket Transcript for #${channel.name}**`,
            files: [attachment],
        }); 

        // Close Channel
        await channel.send({ content: 'This ticket will close in 5 seconds.' });

        setTimeout(async () => {
            await channel.delete(); 

            // Notify Ticket Opener
            const ticketCreator = await client.users.fetch(channel.name.split('-')[1]);
            await ticketCreator.send({
                content: `Your ticket (#${channel.name}) has been closed. A transcript has been sent to the transcript channel.`,
            });
        }, closeTicketTimeout * 1000); 
    }
});

function sendTicketPanel() {
    const ticketChannel = client.channels.cache.get(ticketPanelChannelId); 

    const embed = new EmbedBuilder()
        .setTitle('Create a Ticket')
        .setDescription('Need help? Click the button below to open a new support ticket!');

    const button = new ActionRowBuilder()
        .addComponents(
            new ButtonBuilder()
                .setCustomId('createTicket')
                .setLabel('Create Ticket')
                .setStyle(ButtonStyle.Primary) 
        );

    ticketChannel.send({ embeds: [embed], components: [button] });
}
client.login('Hiideno');
Editor is loading...
Leave a Comment