public ChatCommand GetCommandForMessage(string command, List <string> parameters, string uniqueId) //command param1 param2 param3 { foreach (ChatCommand cmd in ChatCommands) { if (cmd.CommandPrefix == command || cmd.CommandAliases.Contains(command)) { ChatCommand chatCommand = (ChatCommand)Activator.CreateInstance(cmd.GetType()); chatCommand.Parent = Parent; chatCommand.Settings = Settings; try { if (!chatCommand.CanExecute(uniqueId, command, parameters)) { throw new NoPermissionException(); } if (!chatCommand.IsValidCommandSyntax(command, parameters)) { throw new ChatCommandInvalidSyntaxException(chatCommand.GetUsageSyntax(command, parameters)); } return(chatCommand); } catch (CommandParameterInvalidFormatException ex) { ex.UsageHelp = chatCommand.GetUsageSyntax(command, parameters); throw ex; } } } throw new ChatCommandNotFoundException(); }
public override void HandleCommand(NotifyTextMessageEvent evt, string command, List <string> parameters, Action <string> messageCallback) { if (parameters.Count == 0) { string toPrint = $"All commands are listed below ({ChatCommandHandler.ChatCommands.Count}):"; foreach (ChatCommand cmd in ChatCommandHandler.ChatCommands.OrderBy((cmd) => cmd.CommandPrefix)) { string commandHelp = $"\n{ColorCoder.Bold($"{Settings.ChatCommandPrefix}{cmd.CommandPrefix}")}:\t-\t{cmd.GetUsageDescription(cmd.CommandPrefix, parameters)}"; if (!cmd.CanExecute(evt.InvokerUniqueId, cmd.CommandPrefix, parameters)) { commandHelp = ColorCoder.ColorText(Color.LightRed, commandHelp); } toPrint += commandHelp; } messageCallback.Invoke(toPrint); } else { string requestedCommand = parameters[0]; parameters = parameters.Skip(1).ToList(); foreach (ChatCommand cmd in ChatCommandHandler.ChatCommands) { if (cmd.CommandPrefix == requestedCommand || cmd.CommandAliases.Contains(requestedCommand)) { ChatCommand chatCommand = (ChatCommand)Activator.CreateInstance(cmd.GetType()); chatCommand.Parent = Parent; chatCommand.Settings = Settings; try { if (!chatCommand.CanExecute(evt.InvokerUniqueId, requestedCommand, parameters)) { messageCallback.Invoke(ColorCoder.ErrorBright($"You don't have access to view the help of this command")); break; } if (!chatCommand.IsValidCommandSyntax(requestedCommand, parameters)) { //parameters = new List<string>(); } } catch (CommandParameterInvalidFormatException) {} string helpUsage = Settings.ChatCommandPrefix + chatCommand.GetUsageSyntax(requestedCommand, parameters); string helpDescription = chatCommand.GetUsageDescription(requestedCommand, parameters); string aliases = string.Join(", ", chatCommand.CommandAliases); aliases = string.IsNullOrEmpty(aliases) ? "<None>" : aliases; messageCallback.Invoke($"Help for command {ColorCoder.Bold($"'{chatCommand.CommandPrefix}'")}:\n\t{ColorCoder.Bold("Aliases:")} {aliases}\n\t{ColorCoder.Bold("Usage:")} {helpUsage}\n\t{ColorCoder.Bold("Description:")} {helpDescription}"); break; } } } }