From 76dc46db245cb61273d2e72b6a9baeca0c11dbf6 Mon Sep 17 00:00:00 2001 From: Schlauer-Hax Date: Sun, 15 Oct 2023 12:26:53 +0200 Subject: [PATCH] feat: check for existing ticket --- interactions.ts | 119 +++++++++++++++++++++++++----------------------- 1 file changed, 63 insertions(+), 56 deletions(-) diff --git a/interactions.ts b/interactions.ts index c85f77b..4fa8034 100644 --- a/interactions.ts +++ b/interactions.ts @@ -108,66 +108,73 @@ export async function handleInteraction(interaction: Interaction) { const ticket_user_reason = interaction.fields.getTextInputValue("ticket_reason"); const dbuser = await finduser(interaction.user.id); const ticketname = `ticket-${interaction.user.id}`; - await interaction.guild!.channels - .create({ - name: ticketname, - type: ChannelType.GuildText, - topic: `ticket of ${interaction.user.tag}`, - parent: "1081347349462405221", - + const possibleChannel = interaction.guild?.channels.cache.find(ch => ch.name === ticketname); + if (possibleChannel) { + interaction.reply({ + content: `> You already have a ticket here: ${possibleChannel}`, + ephemeral: true, + }); + return; + } + const ch = await interaction.guild!.channels.create({ + name: ticketname, + type: ChannelType.GuildText, + topic: `ticket of ${interaction.user.tag}`, + parent: "1081347349462405221", + }); + + const fields = [ + { + name: `Reason:`, + value: `> ${ticket_user_reason}`, + } + ]; + const embed = new EmbedBuilder() + .setColor("#5539cc") + .setTitle(`Ticket of ${interaction.user.username}`) + .addFields(fields); + if (dbuser) { + const login = await lastLogin(interaction.user.id) || []; + embed.addFields({ + name: `User ID:`, + value: `> ${dbuser.toHexString()}`, + }, { + name: `Server URLs:`, + value: `> ${await getServerURLs(interaction.user.id)}`, + }, { + name: `Last Login:`, + value: `\`\`\`${JSON.stringify(login[ 0 ] ?? "none")}\`\`\``, + }); + embed.setFooter({ + text: login[ 1 ] ?? "No Login" as string, + iconURL: interaction.user.displayAvatarURL(), }) - .then(async (ch: TextChannel) => { - const fields = [ - { - name: `Reason:`, - value: `> ${ticket_user_reason}`, - } - ]; - const embed = new EmbedBuilder() - .setColor("#5539cc") - .setTitle(`Ticket of ${interaction.user.username}`) - .addFields(fields); - if (dbuser) { - const login = await lastLogin(interaction.user.id) || []; - embed.addFields({ - name: `User ID:`, - value: `> ${dbuser.toHexString()}`, - }, { - name: `Server URLs:`, - value: `> ${await getServerURLs(interaction.user.id)}`, - }, { - name: `Last Login:`, - value: `\`\`\`${JSON.stringify(login[ 0 ] ?? "none")}\`\`\``, - }); - embed.setFooter({ - text: login[ 1 ] ?? "No Login" as string, - iconURL: interaction.user.displayAvatarURL(), - }) - embed.setTimestamp(new Date(new Date().toLocaleString('en-US', { timeZone: login[ 2 ] ?? "UTC" }))) - } + embed.setTimestamp(new Date(new Date().toLocaleString('en-US', { timeZone: login[ 2 ] ?? "UTC" }))) + } - await delay(5000) - ch.permissionOverwrites.create(interaction.user.id, { - "ViewChannel": true - }); - - const btnrow = new ActionRowBuilder().addComponents([ - new ButtonBuilder() - .setCustomId(`close_ticket`) - .setStyle(ButtonStyle.Danger) - .setLabel(`Close Ticket`), - ]); - await ch.send({ - content: `${interaction.member} || <@&1120392307087261787>`, - embeds: [ embed ], - components: [ btnrow ], - }); - await interaction.reply({ - content: `> Successfully created your ticket here: ${ch}`, - ephemeral: true, - }); + setTimeout(() => { + ch.permissionOverwrites.create(interaction.user.id, { + "ViewChannel": true }); + }, 5000); + + const btnrow = new ActionRowBuilder().addComponents([ + new ButtonBuilder() + .setCustomId(`close_ticket`) + .setStyle(ButtonStyle.Danger) + .setLabel(`Close Ticket`), + ]); + await ch.send({ + content: `${interaction.member} || <@&1120392307087261787>`, + embeds: [ embed ], + components: [ btnrow ], + }); + await interaction.reply({ + content: `> Successfully created your ticket here: ${ch}`, + ephemeral: true, + }); + } catch (e) { console.error(e); }