using System; using System.Collections.Generic; using KamiLib.Interfaces; namespace KamiLib.ChatCommands; public class SubCommand : ISubCommand { public string? CommandKeyword { get; init; } public List? Aliases { get; init; } public Action? CommandAction { get; init; } public Action? ParameterAction { get; init; } public Func? CanExecute { get; init; } public Func? GetHelpText { get; init; } public bool Hidden { get; init; } public bool HasParameterAction => ParameterAction is not null; public string? GetCommand() => CommandKeyword; public IEnumerable? GetAliases() => Aliases; string? ISubCommand.GetHelpText() => GetHelpText?.Invoke(); public bool Execute(CommandData commandData) { if (CanExecute?.Invoke() is null or true) { if (CommandAction is not null) { CommandAction.Invoke(); return true; } if (ParameterAction is not null) { ParameterAction.Invoke(commandData.Arguments); return true; } } return false; } }