mirror of
https://github.com/Hessenuk/DiscordTickets.git
synced 2025-09-04 09:21:25 +03:00
fix: ticket closing
This commit is contained in:
@@ -18,25 +18,32 @@ module.exports = class CloseButton extends Button {
|
||||
/** @type {import("client")} */
|
||||
const client = this.client;
|
||||
|
||||
// the close button on th opening message, the same as using /close
|
||||
if (id.accepted === undefined) {
|
||||
// the close button on the opening message, the same as using /close
|
||||
await client.tickets.beforeRequestClose(interaction);
|
||||
} else {
|
||||
await interaction.deferReply();
|
||||
const ticket = await client.prisma.ticket.findUnique({
|
||||
include: {
|
||||
category: true,
|
||||
guild: true,
|
||||
},
|
||||
where: { id: interaction.channel.id },
|
||||
});
|
||||
const ticket = await client.tickets.getTicket(interaction.channel.id);
|
||||
const getMessage = client.i18n.getLocale(ticket.guild.locale);
|
||||
const staff = await isStaff(interaction.guild, interaction.user.id);
|
||||
|
||||
if (id.expect === 'staff' && !staff) {
|
||||
return; // TODO: please wait for staff to close the ticket
|
||||
} else if (id.expect === 'user' && staff) {
|
||||
return; // TODO: please wait for the user to respond
|
||||
return await interaction.reply({
|
||||
embeds: [
|
||||
new ExtendedEmbedBuilder()
|
||||
.setColor(ticket.guild.errorColour)
|
||||
.setDescription(getMessage('ticket.close.wait_for_staff')),
|
||||
],
|
||||
ephemeral: true,
|
||||
});
|
||||
} else if (id.expect === 'user' && interaction.user.id !== ticket.createdById) {
|
||||
return await interaction.reply({
|
||||
embeds: [
|
||||
new ExtendedEmbedBuilder()
|
||||
.setColor(ticket.guild.errorColour)
|
||||
.setDescription(getMessage('ticket.close.wait_for_user')),
|
||||
],
|
||||
ephemeral: true,
|
||||
});
|
||||
} else {
|
||||
if (id.accepted) {
|
||||
if (
|
||||
@@ -46,25 +53,31 @@ module.exports = class CloseButton extends Button {
|
||||
) {
|
||||
return await interaction.showModal(client.tickets.buildFeedbackModal(ticket.guild.locale, { next: 'acceptClose' }));
|
||||
} else {
|
||||
await interaction.deferReply();
|
||||
await client.tickets.acceptClose(interaction);
|
||||
}
|
||||
} else {
|
||||
// TODO: reply
|
||||
if (client.tickets.$stale.has(ticket.id)) {
|
||||
await interaction.channel.messages.edit(
|
||||
client.tickets.$stale.get(ticket.id).message.id,
|
||||
{
|
||||
components: [],
|
||||
embeds: [
|
||||
new ExtendedEmbedBuilder({
|
||||
iconURL: interaction.guild.iconURL(),
|
||||
text: ticket.guild.footer,
|
||||
})
|
||||
.setColor(ticket.guild.errorColour)
|
||||
.setDescription(getMessage('ticket.close.rejected', { user: interaction.user.toString() })),
|
||||
],
|
||||
},
|
||||
);
|
||||
client.tickets.$stale.delete(ticket.id);
|
||||
try {
|
||||
await interaction.channel.messages.edit(
|
||||
client.tickets.$stale.get(ticket.id).message.id,
|
||||
{
|
||||
components: [],
|
||||
embeds: [
|
||||
new ExtendedEmbedBuilder({
|
||||
iconURL: interaction.guild.iconURL(),
|
||||
text: ticket.guild.footer,
|
||||
})
|
||||
.setColor(ticket.guild.errorColour)
|
||||
.setDescription(getMessage('ticket.close.rejected', { user: interaction.user.toString() }))
|
||||
.setFooter({ text: null }),
|
||||
],
|
||||
},
|
||||
);
|
||||
} finally { // this should run regardless of whatever happens above
|
||||
client.tickets.$stale.delete(ticket.id);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user