92 lines
2.6 KiB
C#
92 lines
2.6 KiB
C#
|
using System.Collections.Generic;
|
|||
|
using System.Linq;
|
|||
|
using KamiLib.Interfaces;
|
|||
|
using KamiLib.Localization;
|
|||
|
|
|||
|
namespace KamiLib.ChatCommands;
|
|||
|
|
|||
|
public class HelpCommands: IPluginCommand
|
|||
|
{
|
|||
|
public string CommandArgument => "help";
|
|||
|
|
|||
|
public IEnumerable<ISubCommand> SubCommands { get; } = new List<ISubCommand>
|
|||
|
{
|
|||
|
new SubCommand
|
|||
|
{
|
|||
|
CommandKeyword = null,
|
|||
|
CommandAction = () =>
|
|||
|
{
|
|||
|
foreach (var command in KamiCommon.CommandManager.Commands)
|
|||
|
{
|
|||
|
PrintSubCommands(command);
|
|||
|
}
|
|||
|
},
|
|||
|
GetHelpText = () => Strings.Command_ShowThisMessage
|
|||
|
}
|
|||
|
};
|
|||
|
|
|||
|
private static void PrintSubCommands(IPluginCommand command)
|
|||
|
{
|
|||
|
foreach (var subCommand in command.SubCommands.GroupBy(subCommand => subCommand.GetCommand()))
|
|||
|
{
|
|||
|
var selectedSubCommand = subCommand.First();
|
|||
|
|
|||
|
if (!selectedSubCommand.Hidden)
|
|||
|
{
|
|||
|
PrintHelpText(command, selectedSubCommand);
|
|||
|
|
|||
|
if (selectedSubCommand.GetAliases() is { } aliases)
|
|||
|
{
|
|||
|
foreach (var alias in aliases)
|
|||
|
{
|
|||
|
PrintAliasHelpText(command, alias, selectedSubCommand);
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
private static void PrintHelpText(IPluginCommand mainCommand, ISubCommand subCommand)
|
|||
|
{
|
|||
|
var commandString = $"/{KamiCommon.PluginName.ToLower()} ";
|
|||
|
|
|||
|
if (mainCommand.CommandArgument is not null)
|
|||
|
{
|
|||
|
commandString += mainCommand.CommandArgument + " ";
|
|||
|
}
|
|||
|
|
|||
|
if (subCommand.GetCommand() is not null)
|
|||
|
{
|
|||
|
commandString += subCommand.GetCommand() + " ";
|
|||
|
}
|
|||
|
|
|||
|
if (subCommand.HasParameterAction)
|
|||
|
{
|
|||
|
commandString += $"[{Strings.Common_Value}] ";
|
|||
|
}
|
|||
|
|
|||
|
Chat.PrintHelp(commandString, subCommand.GetHelpText());
|
|||
|
}
|
|||
|
|
|||
|
private static void PrintAliasHelpText(IPluginCommand mainCommand, string? alias, ISubCommand subCommand)
|
|||
|
{
|
|||
|
var commandString = $"/{KamiCommon.PluginName.ToLower()} ";
|
|||
|
|
|||
|
if (mainCommand.CommandArgument is not null)
|
|||
|
{
|
|||
|
commandString += mainCommand.CommandArgument + " ";
|
|||
|
}
|
|||
|
|
|||
|
if (alias is not null)
|
|||
|
{
|
|||
|
commandString += alias + " ";
|
|||
|
}
|
|||
|
|
|||
|
if (subCommand.HasParameterAction)
|
|||
|
{
|
|||
|
commandString += $"[{Strings.Common_Value}] ";
|
|||
|
}
|
|||
|
|
|||
|
Chat.PrintHelp(commandString, subCommand.GetHelpText());
|
|||
|
}
|
|||
|
}
|