Bonus: Removes the need for that godawful 'RunMode.Default'.pull/998/head
| @@ -6,7 +6,6 @@ namespace Discord.Commands | |||||
| public class CommandAttribute : Attribute | public class CommandAttribute : Attribute | ||||
| { | { | ||||
| public string Text { get; } | public string Text { get; } | ||||
| public RunMode RunMode { get; set; } = RunMode.Default; | |||||
| public CommandAttribute() | public CommandAttribute() | ||||
| { | { | ||||
| @@ -0,0 +1,15 @@ | |||||
| using System; | |||||
| namespace Discord.Commands | |||||
| { | |||||
| [AttributeUsage(AttributeTargets.Class | AttributeTargets.Method, AllowMultiple = false, Inherited = true)] | |||||
| public sealed class SetRunModeAttribute : Attribute | |||||
| { | |||||
| public RunMode RunMode { get; } | |||||
| public SetRunModeAttribute(RunMode runMode) | |||||
| { | |||||
| RunMode = runMode; | |||||
| } | |||||
| } | |||||
| } | |||||
| @@ -20,6 +20,7 @@ namespace Discord.Commands.Builders | |||||
| public string Remarks { get; set; } | public string Remarks { get; set; } | ||||
| public string Group { get; set; } | public string Group { get; set; } | ||||
| public bool IgnoreExtraArgs { get; set; } | public bool IgnoreExtraArgs { get; set; } | ||||
| public RunMode RunMode { get; set; } | |||||
| public IReadOnlyList<CommandBuilder> Commands => _commands; | public IReadOnlyList<CommandBuilder> Commands => _commands; | ||||
| public IReadOnlyList<ModuleBuilder> Modules => _submodules; | public IReadOnlyList<ModuleBuilder> Modules => _submodules; | ||||
| @@ -35,6 +36,7 @@ namespace Discord.Commands.Builders | |||||
| Service = service; | Service = service; | ||||
| Parent = parent; | Parent = parent; | ||||
| IgnoreExtraArgs = service._ignoreExtraArgs; | IgnoreExtraArgs = service._ignoreExtraArgs; | ||||
| RunMode = service._defaultRunMode; | |||||
| _commands = new List<CommandBuilder>(); | _commands = new List<CommandBuilder>(); | ||||
| _submodules = new List<ModuleBuilder>(); | _submodules = new List<ModuleBuilder>(); | ||||
| @@ -126,6 +126,9 @@ namespace Discord.Commands | |||||
| case IgnoreExtraArgsAttribute ignoreExtra: | case IgnoreExtraArgsAttribute ignoreExtra: | ||||
| builder.IgnoreExtraArgs = ignoreExtra.IgnoreValue; | builder.IgnoreExtraArgs = ignoreExtra.IgnoreValue; | ||||
| break; | break; | ||||
| case SetRunModeAttribute runmode: | |||||
| builder.RunMode = runmode.RunMode; | |||||
| break; | |||||
| default: | default: | ||||
| builder.AddAttributes(attribute); | builder.AddAttributes(attribute); | ||||
| break; | break; | ||||
| @@ -159,7 +162,6 @@ namespace Discord.Commands | |||||
| { | { | ||||
| case CommandAttribute command: | case CommandAttribute command: | ||||
| builder.AddAliases(command.Text); | builder.AddAliases(command.Text); | ||||
| builder.RunMode = command.RunMode; | |||||
| builder.Name = builder.Name ?? command.Text; | builder.Name = builder.Name ?? command.Text; | ||||
| break; | break; | ||||
| case NameAttribute name: | case NameAttribute name: | ||||
| @@ -183,6 +185,9 @@ namespace Discord.Commands | |||||
| case IgnoreExtraArgsAttribute ignoreExtra: | case IgnoreExtraArgsAttribute ignoreExtra: | ||||
| builder.IgnoreExtraArgs = ignoreExtra.IgnoreValue; | builder.IgnoreExtraArgs = ignoreExtra.IgnoreValue; | ||||
| break; | break; | ||||
| case SetRunModeAttribute runmode: | |||||
| builder.RunMode = runmode.RunMode; | |||||
| break; | |||||
| default: | default: | ||||
| builder.AddAttributes(attribute); | builder.AddAttributes(attribute); | ||||
| break; | break; | ||||
| @@ -45,8 +45,6 @@ namespace Discord.Commands | |||||
| _ignoreExtraArgs = config.IgnoreExtraArgs; | _ignoreExtraArgs = config.IgnoreExtraArgs; | ||||
| _separatorChar = config.SeparatorChar; | _separatorChar = config.SeparatorChar; | ||||
| _defaultRunMode = config.DefaultRunMode; | _defaultRunMode = config.DefaultRunMode; | ||||
| if (_defaultRunMode == RunMode.Default) | |||||
| throw new InvalidOperationException("The default run mode cannot be set to Default."); | |||||
| _logManager = new LogManager(config.LogLevel); | _logManager = new LogManager(config.LogLevel); | ||||
| _logManager.Message += async msg => await _logEvent.InvokeAsync(msg).ConfigureAwait(false); | _logManager.Message += async msg => await _logEvent.InvokeAsync(msg).ConfigureAwait(false); | ||||
| @@ -43,7 +43,7 @@ namespace Discord.Commands | |||||
| Summary = builder.Summary; | Summary = builder.Summary; | ||||
| Remarks = builder.Remarks; | Remarks = builder.Remarks; | ||||
| RunMode = (builder.RunMode == RunMode.Default ? service._defaultRunMode : builder.RunMode); | |||||
| RunMode = builder.RunMode; | |||||
| Priority = builder.Priority; | Priority = builder.Priority; | ||||
| Aliases = module.Aliases | Aliases = module.Aliases | ||||
| @@ -14,6 +14,7 @@ namespace Discord.Commands | |||||
| public string Remarks { get; } | public string Remarks { get; } | ||||
| public string Group { get; } | public string Group { get; } | ||||
| public bool IgnoreExtraArgs { get; } | public bool IgnoreExtraArgs { get; } | ||||
| public RunMode RunMode { get; } | |||||
| public IReadOnlyList<string> Aliases { get; } | public IReadOnlyList<string> Aliases { get; } | ||||
| public IReadOnlyList<CommandInfo> Commands { get; } | public IReadOnlyList<CommandInfo> Commands { get; } | ||||
| @@ -32,6 +33,7 @@ namespace Discord.Commands | |||||
| Remarks = builder.Remarks; | Remarks = builder.Remarks; | ||||
| Group = builder.Group; | Group = builder.Group; | ||||
| IgnoreExtraArgs = builder.IgnoreExtraArgs; | IgnoreExtraArgs = builder.IgnoreExtraArgs; | ||||
| RunMode = builder.RunMode; | |||||
| Parent = parent; | Parent = parent; | ||||
| Aliases = BuildAliases(builder, service).ToImmutableArray(); | Aliases = BuildAliases(builder, service).ToImmutableArray(); | ||||
| @@ -1,8 +1,7 @@ | |||||
| namespace Discord.Commands | |||||
| namespace Discord.Commands | |||||
| { | { | ||||
| public enum RunMode | public enum RunMode | ||||
| { | { | ||||
| Default, | |||||
| Sync, | Sync, | ||||
| Async | Async | ||||
| } | } | ||||