From 2ee77c89aff9b2978217f60ea916916580eea45e Mon Sep 17 00:00:00 2001 From: Toastie Date: Fri, 27 Dec 2024 02:07:42 +1300 Subject: [PATCH] Promoted listinvalid to a top level command --- Commands/AdminCommands.cs | 85 --------------------------- Commands/ListInvalidCommand.cs | 102 +++++++++++++++++++++++++++++++++ SupportChild.cs | 1 + 3 files changed, 103 insertions(+), 85 deletions(-) create mode 100644 Commands/ListInvalidCommand.cs diff --git a/Commands/AdminCommands.cs b/Commands/AdminCommands.cs index 1c8686b..4dc5bc9 100644 --- a/Commands/AdminCommands.cs +++ b/Commands/AdminCommands.cs @@ -21,91 +21,6 @@ namespace SupportChild.Commands; [Description("Administrative commands.")] public class AdminCommands { - [RequireGuild] - [Command("listinvalid")] - [Description("List tickets which channels have been deleted. Use /admin unsetticket to remove them.")] - public async Task ListInvalid(SlashCommandContext command) - { - if (!Database.TryGetOpenTickets(out List openTickets)) - { - await command.RespondAsync(new DiscordEmbedBuilder - { - Color = DiscordColor.Red, - Description = "Could not get any open tickets from database." - }, true); - } - - // Get all channels in all guilds the bot is part of - List allChannels = new List(); - foreach (KeyValuePair guild in SupportChild.client.Guilds) - { - try - { - allChannels.AddRange(await guild.Value.GetChannelsAsync()); - } - catch (Exception) { /*ignored*/ } - } - - // Check which tickets channels no longer exist - List invalidTickets = new List(); - foreach (Database.Ticket ticket in openTickets) - { - DiscordChannel channel = allChannels.FirstOrDefault(c => c.Id == ticket.channelID); - if (channel == null) - { - invalidTickets.Add("**`ticket-" + ticket.id.ToString("00000") + ":`** Channel no longer exists (<#" + ticket.channelID + ">)\n"); - continue; - } - - try - { - await channel.Guild.GetMemberAsync(ticket.creatorID); - } - catch (NotFoundException) - { - invalidTickets.Add("**`ticket-" + ticket.id.ToString("00000") + ":`** Creator has left (<#" + ticket.channelID + ">)\n"); - } - } - - if (invalidTickets.Count == 0) - { - await command.RespondAsync(new DiscordEmbedBuilder - { - Color = DiscordColor.Green, - Description = "All tickets are valid!" - }, true); - return; - } - - List embeds = new List(); - foreach (string message in Utilities.ParseListIntoMessages(invalidTickets)) - { - embeds.Add(new DiscordEmbedBuilder - { - Title = "Invalid tickets:", - Color = DiscordColor.Red, - Description = message - }); - } - - // Add the footers - for (int i = 0; i < embeds.Count; i++) - { - embeds[i].Footer = new DiscordEmbedBuilder.EmbedFooter - { - Text = $"Page {i + 1} / {embeds.Count}" - }; - } - - List listPages = new List(); - foreach (DiscordEmbedBuilder embed in embeds) - { - listPages.Add(new Page("", embed)); - } - - await command.Interaction.SendPaginatedResponseAsync(true, command.User, listPages); - } - [RequireGuild] [Command("setticket")] [Description("Turns a channel into a ticket. WARNING: Anyone will be able to delete the channel using /close.")] diff --git a/Commands/ListInvalidCommand.cs b/Commands/ListInvalidCommand.cs new file mode 100644 index 0000000..cdcaca2 --- /dev/null +++ b/Commands/ListInvalidCommand.cs @@ -0,0 +1,102 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Linq; +using System.Threading.Tasks; +using DSharpPlus.Commands; +using DSharpPlus.Commands.ContextChecks; +using DSharpPlus.Commands.Processors.SlashCommands; +using DSharpPlus.Entities; +using DSharpPlus.Exceptions; +using DSharpPlus.Interactivity; +using DSharpPlus.Interactivity.Extensions; + +namespace SupportChild.Commands; + +public class ListInvalidCommand +{ + [RequireGuild] + [Command("listinvalid")] + [Description("List tickets which channels have been deleted. Use /admin unsetticket to remove them.")] + public async Task ListInvalid(SlashCommandContext command) + { + if (!Database.TryGetOpenTickets(out List openTickets)) + { + await command.RespondAsync(new DiscordEmbedBuilder + { + Color = DiscordColor.Red, + Description = "Could not get any open tickets from database." + }, true); + } + + // Get all channels in all guilds the bot is part of + List allChannels = new List(); + foreach (KeyValuePair guild in SupportChild.client.Guilds) + { + try + { + allChannels.AddRange(await guild.Value.GetChannelsAsync()); + } + catch (Exception) { /*ignored*/ } + } + + // Check which tickets channels no longer exist + List invalidTickets = new List(); + foreach (Database.Ticket ticket in openTickets) + { + DiscordChannel channel = allChannels.FirstOrDefault(c => c.Id == ticket.channelID); + if (channel == null) + { + invalidTickets.Add("**`ticket-" + ticket.id.ToString("00000") + ":`** Channel no longer exists (<#" + ticket.channelID + ">)\n"); + continue; + } + + try + { + await channel.Guild.GetMemberAsync(ticket.creatorID); + } + catch (NotFoundException) + { + invalidTickets.Add("**`ticket-" + ticket.id.ToString("00000") + ":`** Creator has left (<#" + ticket.channelID + ">)\n"); + } + } + + if (invalidTickets.Count == 0) + { + await command.RespondAsync(new DiscordEmbedBuilder + { + Color = DiscordColor.Green, + Description = "All tickets are valid!" + }, true); + return; + } + + List embeds = new List(); + foreach (string message in Utilities.ParseListIntoMessages(invalidTickets)) + { + embeds.Add(new DiscordEmbedBuilder + { + Title = "Invalid tickets:", + Color = DiscordColor.Red, + Description = message + }); + } + + // Add the footers + for (int i = 0; i < embeds.Count; i++) + { + embeds[i].Footer = new DiscordEmbedBuilder.EmbedFooter + { + Text = $"Page {i + 1} / {embeds.Count}" + }; + } + + List listPages = new List(); + foreach (DiscordEmbedBuilder embed in embeds) + { + listPages.Add(new Page("", embed)); + } + + await command.Interaction.SendPaginatedResponseAsync(true, command.User, listPages); + } +} \ No newline at end of file diff --git a/SupportChild.cs b/SupportChild.cs index f56f00d..039fa65 100644 --- a/SupportChild.cs +++ b/SupportChild.cs @@ -184,6 +184,7 @@ internal static class SupportChild typeof(CreateSelectionBoxPanelCommand), typeof(ListAssignedCommand), typeof(ListCommand), + typeof(ListInvalidCommand), typeof(ListOpen), typeof(ListUnassignedCommand), typeof(MoveCommand),