Added reason to close command

This commit is contained in:
Toastie (DCS Team) 2024-10-29 23:14:47 +13:00
parent 3e66a5659d
commit 8af3e0a2f4
Signed by: toastie_t0ast
GPG key ID: 27F3B6855AFD40A4

View file

@ -12,9 +12,11 @@ namespace SupportChild.Commands;
public class CloseCommand : ApplicationCommandModule public class CloseCommand : ApplicationCommandModule
{ {
private static Dictionary<ulong, string> closeReasons = new Dictionary<ulong, string>();
[SlashRequireGuild] [SlashRequireGuild]
[SlashCommand("close", "Closes a ticket.")] [SlashCommand("close", "Closes a ticket.")]
public async Task OnExecute(InteractionContext command) public async Task OnExecute(InteractionContext command, [Option("Reason", "Reason for closing the ticket.")] string reason = "")
{ {
// Check if ticket exists in the database // Check if ticket exists in the database
if (!Database.TryGetOpenTicket(command.Channel.Id, out Database.Ticket _)) if (!Database.TryGetOpenTicket(command.Channel.Id, out Database.Ticket _))
@ -35,8 +37,8 @@ public class CloseCommand : ApplicationCommandModule
}) })
.AddComponents(new DiscordButtonComponent(ButtonStyle.Danger, "supportchild_closeconfirm", "Confirm")); .AddComponents(new DiscordButtonComponent(ButtonStyle.Danger, "supportchild_closeconfirm", "Confirm"));
await command.CreateResponseAsync(confirmation); await command.CreateResponseAsync(confirmation);
closeReasons.Add(command.Channel.Id, reason);
} }
public static async Task OnConfirmed(DiscordInteraction interaction) public static async Task OnConfirmed(DiscordInteraction interaction)
@ -72,6 +74,12 @@ public class CloseCommand : ApplicationCommandModule
return; return;
} }
string closeReason = "";
if (closeReasons.TryGetValue(channelID, out string cachedReason))
{
closeReason = "\nReason: " + cachedReason + "\n";
}
// Log it if the log channel exists // Log it if the log channel exists
DiscordChannel logChannel = interaction.Guild.GetChannel(Config.logChannel); DiscordChannel logChannel = interaction.Guild.GetChannel(Config.logChannel);
if (logChannel != null) if (logChannel != null)
@ -79,7 +87,8 @@ public class CloseCommand : ApplicationCommandModule
DiscordEmbed embed = new DiscordEmbedBuilder DiscordEmbed embed = new DiscordEmbedBuilder
{ {
Color = DiscordColor.Green, Color = DiscordColor.Green,
Description = "Ticket " + ticket.id.ToString("00000") + " closed by " + interaction.User.Mention + ".\n", Description = "Ticket " + ticket.id.ToString("00000") + " closed by " +
interaction.User.Mention + ".\n" + closeReason,
Footer = new DiscordEmbedBuilder.EmbedFooter { Text = '#' + channelName } Footer = new DiscordEmbedBuilder.EmbedFooter { Text = '#' + channelName }
}; };
@ -96,7 +105,8 @@ public class CloseCommand : ApplicationCommandModule
DiscordEmbed embed = new DiscordEmbedBuilder DiscordEmbed embed = new DiscordEmbedBuilder
{ {
Color = DiscordColor.Green, Color = DiscordColor.Green,
Description = "Ticket " + ticket.id.ToString("00000") + " which you opened has now been closed, check the transcript for more info.\n", Description = "Ticket " + ticket.id.ToString("00000") + " which you opened has now been closed, " +
"check the transcript for more info.\n" + closeReason,
Footer = new DiscordEmbedBuilder.EmbedFooter { Text = '#' + channelName } Footer = new DiscordEmbedBuilder.EmbedFooter { Text = '#' + channelName }
}; };
@ -124,11 +134,13 @@ public class CloseCommand : ApplicationCommandModule
})); }));
await Task.Delay(3000); await Task.Delay(3000);
// Delete the channel and database entry // Delete the channel and database entry
await interaction.Channel.DeleteAsync("Ticket closed."); await interaction.Channel.DeleteAsync("Ticket closed.");
Database.DeleteOpenTicket(ticket.id); Database.DeleteOpenTicket(ticket.id);
closeReasons.Remove(channelID);
} }
} }