/// <summary> /// Executes this command or its subcommand with specified context. /// </summary> /// <param name="ctx">Context to execute the command in.</param> /// <returns>Command's execution results.</returns> public override async Task <CommandResult> ExecuteAsync(CommandContext ctx) { var findpos = 0; var cn = CommandsNextUtilities.ExtractNextArgument(ctx.RawArgumentString, ref findpos); if (cn != null) { Command cmd = null; if (ctx.Config.CaseSensitive) { cmd = this.Children.FirstOrDefault(xc => xc.Name == cn || (xc.Aliases != null && xc.Aliases.Contains(cn))); } else { cmd = this.Children.FirstOrDefault(xc => xc.Name.ToLowerInvariant() == cn.ToLowerInvariant() || (xc.Aliases != null && xc.Aliases.Select(xs => xs.ToLowerInvariant()).Contains(cn.ToLowerInvariant()))); } if (cmd != null) { // pass the execution on var xctx = new CommandContext { Client = ctx.Client, Message = ctx.Message, Command = cmd, Config = ctx.Config, RawArgumentString = ctx.RawArgumentString.Substring(findpos), Prefix = ctx.Prefix, CommandsNext = ctx.CommandsNext, Services = ctx.Services }; var fchecks = await cmd.RunChecksAsync(xctx, false).ConfigureAwait(false); if (fchecks.Any()) { return new CommandResult { IsSuccessful = false, Exception = new ChecksFailedException(cmd, xctx, fchecks), Context = xctx } } ; return(await cmd.ExecuteAsync(xctx).ConfigureAwait(false)); } } if (!this.IsExecutableWithoutSubcommands) { return new CommandResult { IsSuccessful = false, Exception = new InvalidOperationException("No matching subcommands were found, and this group is not executable."), Context = ctx } } ; return(await base.ExecuteAsync(ctx).ConfigureAwait(false)); } } }
/// <summary> /// Executes this command or its subcommand with specified context. /// </summary> /// <param name="ctx">Context to execute the command in.</param> /// <returns>Command's execution results.</returns> public override async Task <CommandResult> ExecuteAsync(CommandContext ctx) { //var cn = ctx.RawArguments.FirstOrDefault(); var cn = CommandsNextUtilities.ExtractNextArgument(ctx.RawArgumentString, out var x); if (x != null) { var xi = 0; for (; xi < x.Length; xi++) { if (!char.IsWhiteSpace(x[xi])) { break; } } if (xi > 0) { x = x.Substring(xi); } } if (cn != null) { Command cmd = null; if (ctx.Config.CaseSensitive) { cmd = this.Children.FirstOrDefault(xc => xc.Name == cn || (xc.Aliases != null && xc.Aliases.Contains(cn))); } else { cmd = this.Children.FirstOrDefault(xc => xc.Name.ToLowerInvariant() == cn.ToLowerInvariant() || (xc.Aliases != null && xc.Aliases.Select(xs => xs.ToLowerInvariant()).Contains(cn.ToLowerInvariant()))); } if (cmd != null) { // pass the execution on var xctx = new CommandContext { Client = ctx.Client, Message = ctx.Message, Command = cmd, Config = ctx.Config, RawArgumentString = x, CommandsNext = ctx.CommandsNext, Dependencies = ctx.Dependencies }; var fchecks = await cmd.RunChecksAsync(xctx, false); if (fchecks.Any()) { return new CommandResult { IsSuccessful = false, Exception = new ChecksFailedException(cmd, xctx, fchecks), Context = xctx } } ; return(await cmd.ExecuteAsync(xctx)); } } if (this.Callable == null) { return new CommandResult { IsSuccessful = false, Exception = new InvalidOperationException("No matching subcommands were found, and this group is not executable."), Context = ctx } } ; return(await base.ExecuteAsync(ctx)); } } }