M
src/interactions/buttons/tickets/ticket.ts
→
src/interactions/buttons/tickets/ticket.ts
@@ -9,11 +9,9 @@ type ChatInputCommandInteraction,
type Client,
ContainerBuilder,
FileBuilder,
- FileComponent,
LabelBuilder,
type ModalSubmitInteraction,
PermissionFlagsBits,
- SectionBuilder,
SeparatorBuilder,
SlashCommandBuilder,
SlashCommandSubcommandBuilder,
@@ -36,7 +34,6 @@ import { makeComponentId, parseComponentId } from "@/utils/components";
import { formatMessage } from "@/utils/formatting";
import { loggers } from "@/utils/logging";
import {
- countTickets,
getGuild,
getManagerRoleIds,
getTicket,
@@ -126,15 +123,17 @@ modal.addLabelComponents(label);
return modal;
}
-function getTicketReasonModal() {
+function getTicketReasonModal(staff = false) {
const modal = new ModalBuilder()
.setCustomId(MODAL_IDS.reason)
- .setTitle("Close Ticket Reason");
+ .setTitle("Close Ticket");
const pubReason = new LabelBuilder()
.setLabel("Public Reason")
.setDescription(
- "Provide a reason for closing the ticket - this will be DMd to the user",
+ staff
+ ? "Provide a reason for closing the ticket - this will be visible to the user"
+ : "Provide a reason for closing the ticket",
)
.setTextInputComponent(
new TextInputBuilder()
@@ -159,7 +158,8 @@ .setMaxLength(2000)
.setRequired(false),
);
- modal.addLabelComponents(pubReason, privateReason);
+ modal.addLabelComponents(pubReason);
+ if (staff) modal.addLabelComponents(privateReason);
return modal;
}
@@ -216,7 +216,9 @@ });
return;
}
- return await interaction.showModal(getTicketReasonModal());
+ return await interaction.showModal(
+ getTicketReasonModal(interaction.user.id !== ticket.authorId),
+ );
}
await interaction.deferReply({ flags: ["Ephemeral"] });
@@ -259,7 +261,9 @@ return;
}
if (action === "close")
- return await interaction.showModal(getTicketReasonModal());
+ return await interaction.showModal(
+ getTicketReasonModal(interaction.user.id !== ticket.authorId),
+ );
await interaction.deferReply({ flags: ["Ephemeral"] });
if (action === "reopen") await handleReopen(client, interaction, ticket);
@@ -299,12 +303,12 @@ } else if (action === "reason") {
const publicReason = interaction.fields.getTextInputValue(
"ticket:reason_input",
);
- const privateReason = interaction.fields.getTextInputValue(
- "ticket:private_reason_input",
- );
-
- console.log(privateReason);
- console.log(publicReason);
+ let privateReason = "";
+ try {
+ privateReason = interaction.fields.getTextInputValue(
+ "ticket:private_reason_input",
+ );
+ } catch {}
const { data: ticket, exists } = await getTicket(
interaction.guildId,
@@ -434,6 +438,7 @@ if (ticket.status === "closed") {
await interaction.editReply("❌ This ticket is already closed.");
return;
}
+ const closedByReporter = interaction.user.id === ticket.authorId;
const channel = interaction.channel;
if (!channel || !("permissionOverwrites" in channel)) return;
@@ -512,7 +517,7 @@ .addTextDisplayComponents(
new TextDisplayBuilder().setContent(
[
`## Ticket #${ticket.anonymousId} closed`,
- `**Closed By**: <@${interaction.user.id}>`,
+ `**Closed By**: <@${interaction.user.id}> (${closedByReporter ? "reporter" : "staff"})`,
].join("\n"),
),
)