Allow setting IgnoreExtraArgs on an individual basis (#998)
* Allow setting IgnoreExtraArgs on an individual basis
* Remove passing in the flag as a separate parameter
* VS plz
* Push the RunMode setting out to its own attribute, because fox wants consistency.
Bonus: Removes the need for that godawful 'RunMode.Default'.
* Revert previous commit
* Fox doesn't like module-wide switches 😒
This commit is contained in:
@@ -7,6 +7,7 @@ namespace Discord.Commands
|
|||||||
{
|
{
|
||||||
public string Text { get; }
|
public string Text { get; }
|
||||||
public RunMode RunMode { get; set; } = RunMode.Default;
|
public RunMode RunMode { get; set; } = RunMode.Default;
|
||||||
|
public bool? IgnoreExtraArgs { get; set; }
|
||||||
|
|
||||||
public CommandAttribute()
|
public CommandAttribute()
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -1,8 +1,7 @@
|
|||||||
using System;
|
using System;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
using System.Threading.Tasks;
|
using System.Threading.Tasks;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using Microsoft.Extensions.DependencyInjection;
|
|
||||||
|
|
||||||
namespace Discord.Commands.Builders
|
namespace Discord.Commands.Builders
|
||||||
{
|
{
|
||||||
@@ -22,6 +21,7 @@ namespace Discord.Commands.Builders
|
|||||||
public string PrimaryAlias { get; set; }
|
public string PrimaryAlias { get; set; }
|
||||||
public RunMode RunMode { get; set; }
|
public RunMode RunMode { get; set; }
|
||||||
public int Priority { get; set; }
|
public int Priority { get; set; }
|
||||||
|
public bool IgnoreExtraArgs { get; set; }
|
||||||
|
|
||||||
public IReadOnlyList<PreconditionAttribute> Preconditions => _preconditions;
|
public IReadOnlyList<PreconditionAttribute> Preconditions => _preconditions;
|
||||||
public IReadOnlyList<ParameterBuilder> Parameters => _parameters;
|
public IReadOnlyList<ParameterBuilder> Parameters => _parameters;
|
||||||
@@ -140,4 +140,4 @@ namespace Discord.Commands.Builders
|
|||||||
return new CommandInfo(this, info, service);
|
return new CommandInfo(this, info, service);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -2,7 +2,6 @@ using System;
|
|||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.Reflection;
|
using System.Reflection;
|
||||||
using System.Threading.Tasks;
|
using System.Threading.Tasks;
|
||||||
using Microsoft.Extensions.DependencyInjection;
|
|
||||||
|
|
||||||
namespace Discord.Commands.Builders
|
namespace Discord.Commands.Builders
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -158,6 +158,7 @@ namespace Discord.Commands
|
|||||||
builder.AddAliases(command.Text);
|
builder.AddAliases(command.Text);
|
||||||
builder.RunMode = command.RunMode;
|
builder.RunMode = command.RunMode;
|
||||||
builder.Name = builder.Name ?? command.Text;
|
builder.Name = builder.Name ?? command.Text;
|
||||||
|
builder.IgnoreExtraArgs = command.IgnoreExtraArgs ?? service._ignoreExtraArgs;
|
||||||
break;
|
break;
|
||||||
case NameAttribute name:
|
case NameAttribute name:
|
||||||
builder.Name = name.Text;
|
builder.Name = name.Text;
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
using System;
|
using System;
|
||||||
using System.Collections.Immutable;
|
using System.Collections.Immutable;
|
||||||
using System.Text;
|
using System.Text;
|
||||||
using System.Threading.Tasks;
|
using System.Threading.Tasks;
|
||||||
@@ -14,7 +14,7 @@ namespace Discord.Commands
|
|||||||
QuotedParameter
|
QuotedParameter
|
||||||
}
|
}
|
||||||
|
|
||||||
public static async Task<ParseResult> ParseArgsAsync(CommandInfo command, ICommandContext context, bool ignoreExtraArgs, IServiceProvider services, string input, int startPos)
|
public static async Task<ParseResult> ParseArgsAsync(CommandInfo command, ICommandContext context, IServiceProvider services, string input, int startPos)
|
||||||
{
|
{
|
||||||
ParameterInfo curParam = null;
|
ParameterInfo curParam = null;
|
||||||
StringBuilder argBuilder = new StringBuilder(input.Length);
|
StringBuilder argBuilder = new StringBuilder(input.Length);
|
||||||
@@ -110,7 +110,7 @@ namespace Discord.Commands
|
|||||||
{
|
{
|
||||||
if (curParam == null)
|
if (curParam == null)
|
||||||
{
|
{
|
||||||
if (ignoreExtraArgs)
|
if (command.IgnoreExtraArgs)
|
||||||
break;
|
break;
|
||||||
else
|
else
|
||||||
return ParseResult.FromError(CommandError.BadArgCount, "The input text has too many parameters.");
|
return ParseResult.FromError(CommandError.BadArgCount, "The input text has too many parameters.");
|
||||||
|
|||||||
@@ -6,7 +6,6 @@ using System.Linq;
|
|||||||
using System.Reflection;
|
using System.Reflection;
|
||||||
using System.Threading;
|
using System.Threading;
|
||||||
using System.Threading.Tasks;
|
using System.Threading.Tasks;
|
||||||
using Microsoft.Extensions.DependencyInjection;
|
|
||||||
using Discord.Commands.Builders;
|
using Discord.Commands.Builders;
|
||||||
using Discord.Logging;
|
using Discord.Logging;
|
||||||
|
|
||||||
|
|||||||
@@ -20,11 +20,5 @@ namespace Discord.Commands
|
|||||||
|
|
||||||
/// <summary> Determines whether extra parameters should be ignored. </summary>
|
/// <summary> Determines whether extra parameters should be ignored. </summary>
|
||||||
public bool IgnoreExtraArgs { get; set; } = false;
|
public bool IgnoreExtraArgs { get; set; } = false;
|
||||||
|
|
||||||
///// <summary> Gets or sets the <see cref="IServiceProvider"/> to use. </summary>
|
|
||||||
//public IServiceProvider ServiceProvider { get; set; } = null;
|
|
||||||
|
|
||||||
///// <summary> Gets or sets a factory function for the <see cref="IServiceProvider"/> to use. </summary>
|
|
||||||
//public Func<CommandService, IServiceProvider> ServiceProviderFactory { get; set; } = null;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -27,6 +27,7 @@ namespace Discord.Commands
|
|||||||
public string Remarks { get; }
|
public string Remarks { get; }
|
||||||
public int Priority { get; }
|
public int Priority { get; }
|
||||||
public bool HasVarArgs { get; }
|
public bool HasVarArgs { get; }
|
||||||
|
public bool IgnoreExtraArgs { get; }
|
||||||
public RunMode RunMode { get; }
|
public RunMode RunMode { get; }
|
||||||
|
|
||||||
public IReadOnlyList<string> Aliases { get; }
|
public IReadOnlyList<string> Aliases { get; }
|
||||||
@@ -63,6 +64,7 @@ namespace Discord.Commands
|
|||||||
|
|
||||||
Parameters = builder.Parameters.Select(x => x.Build(this)).ToImmutableArray();
|
Parameters = builder.Parameters.Select(x => x.Build(this)).ToImmutableArray();
|
||||||
HasVarArgs = builder.Parameters.Count > 0 ? builder.Parameters[builder.Parameters.Count - 1].IsMultiple : false;
|
HasVarArgs = builder.Parameters.Count > 0 ? builder.Parameters[builder.Parameters.Count - 1].IsMultiple : false;
|
||||||
|
IgnoreExtraArgs = builder.IgnoreExtraArgs;
|
||||||
|
|
||||||
_action = builder.Callback;
|
_action = builder.Callback;
|
||||||
_commandService = service;
|
_commandService = service;
|
||||||
@@ -119,7 +121,7 @@ namespace Discord.Commands
|
|||||||
return ParseResult.FromError(preconditionResult);
|
return ParseResult.FromError(preconditionResult);
|
||||||
|
|
||||||
string input = searchResult.Text.Substring(startIndex);
|
string input = searchResult.Text.Substring(startIndex);
|
||||||
return await CommandParser.ParseArgsAsync(this, context, _commandService._ignoreExtraArgs, services, input, 0).ConfigureAwait(false);
|
return await CommandParser.ParseArgsAsync(this, context, services, input, 0).ConfigureAwait(false);
|
||||||
}
|
}
|
||||||
|
|
||||||
public Task<IResult> ExecuteAsync(ICommandContext context, ParseResult parseResult, IServiceProvider services)
|
public Task<IResult> ExecuteAsync(ICommandContext context, ParseResult parseResult, IServiceProvider services)
|
||||||
|
|||||||
@@ -2,7 +2,6 @@ using System;
|
|||||||
using System.Linq;
|
using System.Linq;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.Collections.Immutable;
|
using System.Collections.Immutable;
|
||||||
using System.Reflection;
|
|
||||||
using Discord.Commands.Builders;
|
using Discord.Commands.Builders;
|
||||||
|
|
||||||
namespace Discord.Commands
|
namespace Discord.Commands
|
||||||
@@ -23,8 +22,6 @@ namespace Discord.Commands
|
|||||||
public ModuleInfo Parent { get; }
|
public ModuleInfo Parent { get; }
|
||||||
public bool IsSubmodule => Parent != null;
|
public bool IsSubmodule => Parent != null;
|
||||||
|
|
||||||
//public TypeInfo TypeInfo { get; }
|
|
||||||
|
|
||||||
internal ModuleInfo(ModuleBuilder builder, CommandService service, IServiceProvider services, ModuleInfo parent = null)
|
internal ModuleInfo(ModuleBuilder builder, CommandService service, IServiceProvider services, ModuleInfo parent = null)
|
||||||
{
|
{
|
||||||
Service = service;
|
Service = service;
|
||||||
@@ -35,8 +32,6 @@ namespace Discord.Commands
|
|||||||
Group = builder.Group;
|
Group = builder.Group;
|
||||||
Parent = parent;
|
Parent = parent;
|
||||||
|
|
||||||
//TypeInfo = builder.TypeInfo;
|
|
||||||
|
|
||||||
Aliases = BuildAliases(builder, service).ToImmutableArray();
|
Aliases = BuildAliases(builder, service).ToImmutableArray();
|
||||||
Commands = builder.Commands.Select(x => x.Build(this, service)).ToImmutableArray();
|
Commands = builder.Commands.Select(x => x.Build(this, service)).ToImmutableArray();
|
||||||
Preconditions = BuildPreconditions(builder).ToImmutableArray();
|
Preconditions = BuildPreconditions(builder).ToImmutableArray();
|
||||||
|
|||||||
Reference in New Issue
Block a user