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();
        }
Example #2
0
        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;
                    }
                }
            }
        }