From 58eb37124e2c891fe8dda26d2f24a55cc8b68d87 Mon Sep 17 00:00:00 2001 From: 1tzEmerald Date: Sat, 9 Nov 2024 02:44:39 +0000 Subject: [PATCH] Update close.js --- Commands/close.js | 191 ++++++++++++++++++++++++++++++++-------------- 1 file changed, 133 insertions(+), 58 deletions(-) diff --git a/Commands/close.js b/Commands/close.js index 3922671..a412414 100644 --- a/Commands/close.js +++ b/Commands/close.js @@ -179,7 +179,6 @@ async function collectReviewComment(interaction, ticketUserId) { const comment = commentCollection.first()?.content; return comment && comment.toLowerCase() !== "no" ? comment : "No Comment Provided"; } - async function handleCloseTicket(interaction, reason, ticket, TicketData) { const { getChannel } = interaction.client; @@ -200,7 +199,49 @@ async function handleCloseTicket(interaction, reason, ticket, TicketData) { } try { + // Fetch all messages from the channel + let allMessages = []; + let lastId = null; + + while (true) { + const options = { limit: 100 }; + if (lastId) { + options.before = lastId; + } + + const messages = await interaction.channel.messages.fetch(options); + if (messages.size === 0) break; + + allMessages = [...allMessages, ...messages.values()]; + lastId = messages.last().id; + + if (messages.size < 100) break; + } + + // Sort messages by timestamp + allMessages.sort((a, b) => a.createdTimestamp - b.createdTimestamp); + + // Create transcript data + const transcriptData = allMessages.map(msg => ({ + content: msg.content || "No content", + username: msg.author.username, + userId: msg.author.id, + avatar: msg.author.displayAvatarURL(), + timestamp: msg.createdAt.toISOString(), + attachments: Array.from(msg.attachments.values()).map(att => ({ + url: att.url, + name: att.name + })), + embeds: msg.embeds.map(embed => ({ + title: embed.title, + description: embed.description, + fields: embed.fields + })) + })); + + // Update ticket status tickets.tickets[TicketData].open = false; + tickets.tickets[TicketData].messages = transcriptData; fs.writeFileSync("./Data/TicketData.json", JSON.stringify(tickets, null, 4)); const transcriptEmbed = new Discord.EmbedBuilder() @@ -210,25 +251,34 @@ async function handleCloseTicket(interaction, reason, ticket, TicketData) { .setDescription( `> **Ticket:** ${interaction.channel.name} (\`${interaction.channel.id}\`)\n` + `> **User:** ${tUser?.tag || "Unknown User"} (\`${tUser?.id || ticket.user}\`)\n` + - `> **Closed by:** <@${interaction.user.id}>` + `> **Closed by:** <@${interaction.user.id}>\n` + + `> **Message Count:** ${transcriptData.length}` ) .addFields({ name: "Reason", value: `\`\`\`${reason}\`\`\``, inline: true }); - let msgs = await interaction.channel.messages.fetch({ limit: 100 }); - let html = createTranscriptHTML(ticket, msgs); + const html = createTranscriptHTML( + { + id: interaction.channel.id, + messages: transcriptData, + name: interaction.channel.name + }, + reason + ); const fileName = `${interaction.channel.id}-transcript.html`; fs.writeFileSync(`./Data/Transcripts/${fileName}`, html); await transcriptChannel.send({ embeds: [transcriptEmbed], - files: [`./Data/Transcripts/${fileName}`], - spoiler: true, + files: [{ + attachment: `./Data/Transcripts/${fileName}`, + name: fileName, + spoiler: true + }] }); - if (interaction.channel.type === Discord.ChannelType.GuildText) { - await interaction.channel.delete(); - } else if (interaction.channel.type === Discord.ChannelType.PrivateThread) { + if (interaction.channel.type === Discord.ChannelType.GuildText || + interaction.channel.type === Discord.ChannelType.PrivateThread) { await interaction.channel.delete(); } } catch (err) { @@ -238,10 +288,12 @@ async function handleCloseTicket(interaction, reason, ticket, TicketData) { } function createTranscriptHTML(ticket, reason) { - const messages = ticket.messages || []; return ` + + +
-

Ticket Transcript

-

Server Name: Emerald Services

-

Ticket: ${ticket.id}

-

Messages: ${messages.length} Messages

-
- ${messages.map(msg => ` -
- User Avatar -
-

${msg.username}

-

${msg.content}

-

${msg.timestamp}

-
-
`).join('')} +
+

Ticket Transcript

+

Channel: ${ticket.name}

+

Ticket ID: ${ticket.id}

+

Message Count: ${ticket.messages.length}

+

Close Reason: ${reason}

+
+ +
+ ${ticket.messages.map(msg => ` +
+
+ Avatar + ${msg.username} + ${new Date(msg.timestamp).toLocaleString()} +
+
+ ${msg.content} + + ${msg.embeds.map(embed => ` +
+ ${embed.title ? `
${embed.title}
` : ''} + ${embed.description ? `
${embed.description}
` : ''} + ${embed.fields.map(field => ` +
+ ${field.name}: +
${field.value}
+
+ `).join('')} +
+ `).join('')} + + ${msg.attachments.map(att => ` + + 📎 ${att.name} + + `).join('')} +
+
+ `).join('')}
- Download Transcript
`; } - -