import type { ButtonInteraction, Client, GuildMember } from "discord.js"; import { getTicketById } from "@/database/queries"; import { hasManagerPermissions } from "@/utils/discord/permissions"; import { generateTranscript } from "@/utils/tickets/transcripts"; import { db, ticketAccessLogs } from "@/database"; export default { buttonExecute: async (_client: Client, interaction: ButtonInteraction) => { const [, id] = interaction.customId.split(":"); const { data: ticket, exists } = await getTicketById(null, Number(id)); if (!exists) { await interaction.reply({ content: "Ticket not found.", ephemeral: true, }); return; } if ( interaction.member && (await hasManagerPermissions(interaction.member as GuildMember)) ) { await db.insert(ticketAccessLogs).values({ ticketId: ticket.id, userId: interaction.user.id, action: "view_transcript", }); } const [transcriptText] = await generateTranscript(ticket); await interaction.reply({ files: [ { attachment: Buffer.from(transcriptText, "utf-8"), name: `transcript-${ticket.id}.txt`, }, ], flags: ["Ephemeral"], }); }, };