2022-04-18 10:52:03 +00:00
using System ;
2022-02-21 08:40:09 +00:00
using System.Collections.Generic ;
using System.Linq ;
using System.Threading.Tasks ;
using DSharpPlus.Entities ;
using DSharpPlus.Exceptions ;
2022-08-21 07:34:11 +00:00
using DSharpPlus.SlashCommands ;
using DSharpPlus.SlashCommands.Attributes ;
2022-02-21 08:40:09 +00:00
2022-08-21 07:34:11 +00:00
namespace SupportChild.Commands ;
public class MoveCommand : ApplicationCommandModule
2022-02-21 08:40:09 +00:00
{
2024-10-29 09:10:37 +00:00
[SlashRequireGuild]
[SlashCommand("move", "Moves a ticket to another category.")]
public async Task OnExecute ( InteractionContext command , [ Option ( "Category" , "The category to move the ticket to. Only has to be the beginning of the name." ) ] string category )
{
// Check if ticket exists in the database
if ( ! Database . TryGetOpenTicket ( command . Channel . Id , out Database . Ticket _ ) )
{
await command . CreateResponseAsync ( new DiscordEmbedBuilder
{
Color = DiscordColor . Red ,
Description = "This channel is not a ticket."
} , true ) ;
return ;
}
2022-02-21 08:40:09 +00:00
2024-10-29 09:10:37 +00:00
if ( string . IsNullOrEmpty ( category ) )
{
await command . CreateResponseAsync ( new DiscordEmbedBuilder
{
Color = DiscordColor . Red ,
Description = "Error: No category provided."
} , true ) ;
return ;
}
2022-02-21 08:40:09 +00:00
2024-10-29 09:10:37 +00:00
IReadOnlyList < DiscordChannel > channels = await command . Guild . GetChannelsAsync ( ) ;
IEnumerable < DiscordChannel > categories = channels . Where ( x = > x . IsCategory ) ;
DiscordChannel categoryChannel = categories . FirstOrDefault ( x = > x . Name . StartsWith ( category . Trim ( ) , StringComparison . OrdinalIgnoreCase ) ) ;
2022-02-21 08:40:09 +00:00
2024-10-29 09:10:37 +00:00
if ( categoryChannel = = null )
{
await command . CreateResponseAsync ( new DiscordEmbedBuilder
{
Color = DiscordColor . Red ,
Description = "Error: Could not find a category by that name."
} , true ) ;
return ;
}
2022-02-21 08:40:09 +00:00
2024-10-29 09:10:37 +00:00
if ( command . Channel . Id = = categoryChannel . Id )
{
await command . CreateResponseAsync ( new DiscordEmbedBuilder
{
Color = DiscordColor . Red ,
Description = "Error: The ticket is already in that category."
} , true ) ;
return ;
}
2022-02-21 08:40:09 +00:00
2024-10-29 09:10:37 +00:00
try
{
await command . Channel . ModifyAsync ( modifiedAttributes = > modifiedAttributes . Parent = categoryChannel ) ;
}
catch ( UnauthorizedException )
{
await command . CreateResponseAsync ( new DiscordEmbedBuilder
{
Color = DiscordColor . Red ,
Description = "Error: Not authorized to move this ticket to that category."
} , true ) ;
return ;
}
2022-08-21 07:34:11 +00:00
2024-10-29 09:10:37 +00:00
await command . CreateResponseAsync ( new DiscordEmbedBuilder
{
Color = DiscordColor . Green ,
Description = "Ticket was moved to " + categoryChannel . Mention
} ) ;
}
2022-05-19 11:38:59 +00:00
}