diff --git a/src/Discord.Net.Commands/Attributes/CommandAttribute.cs b/src/Discord.Net.Commands/Attributes/CommandAttribute.cs index 5f8e9ceaf..eec3e36c6 100644 --- a/src/Discord.Net.Commands/Attributes/CommandAttribute.cs +++ b/src/Discord.Net.Commands/Attributes/CommandAttribute.cs @@ -6,7 +6,6 @@ namespace Discord.Commands public class CommandAttribute : Attribute { public string Text { get; } - public RunMode RunMode { get; set; } = RunMode.Default; public CommandAttribute() { diff --git a/src/Discord.Net.Commands/Attributes/SetRunModeAttribute.cs b/src/Discord.Net.Commands/Attributes/SetRunModeAttribute.cs new file mode 100644 index 000000000..607df1b4d --- /dev/null +++ b/src/Discord.Net.Commands/Attributes/SetRunModeAttribute.cs @@ -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; + } + } +} diff --git a/src/Discord.Net.Commands/Builders/ModuleBuilder.cs b/src/Discord.Net.Commands/Builders/ModuleBuilder.cs index d774de716..8215e0232 100644 --- a/src/Discord.Net.Commands/Builders/ModuleBuilder.cs +++ b/src/Discord.Net.Commands/Builders/ModuleBuilder.cs @@ -20,6 +20,7 @@ namespace Discord.Commands.Builders public string Remarks { get; set; } public string Group { get; set; } public bool IgnoreExtraArgs { get; set; } + public RunMode RunMode { get; set; } public IReadOnlyList Commands => _commands; public IReadOnlyList Modules => _submodules; @@ -35,6 +36,7 @@ namespace Discord.Commands.Builders Service = service; Parent = parent; IgnoreExtraArgs = service._ignoreExtraArgs; + RunMode = service._defaultRunMode; _commands = new List(); _submodules = new List(); diff --git a/src/Discord.Net.Commands/Builders/ModuleClassBuilder.cs b/src/Discord.Net.Commands/Builders/ModuleClassBuilder.cs index 58e55d76d..ee2920fa3 100644 --- a/src/Discord.Net.Commands/Builders/ModuleClassBuilder.cs +++ b/src/Discord.Net.Commands/Builders/ModuleClassBuilder.cs @@ -126,6 +126,9 @@ namespace Discord.Commands case IgnoreExtraArgsAttribute ignoreExtra: builder.IgnoreExtraArgs = ignoreExtra.IgnoreValue; break; + case SetRunModeAttribute runmode: + builder.RunMode = runmode.RunMode; + break; default: builder.AddAttributes(attribute); break; @@ -159,7 +162,6 @@ namespace Discord.Commands { case CommandAttribute command: builder.AddAliases(command.Text); - builder.RunMode = command.RunMode; builder.Name = builder.Name ?? command.Text; break; case NameAttribute name: @@ -183,6 +185,9 @@ namespace Discord.Commands case IgnoreExtraArgsAttribute ignoreExtra: builder.IgnoreExtraArgs = ignoreExtra.IgnoreValue; break; + case SetRunModeAttribute runmode: + builder.RunMode = runmode.RunMode; + break; default: builder.AddAttributes(attribute); break; diff --git a/src/Discord.Net.Commands/CommandService.cs b/src/Discord.Net.Commands/CommandService.cs index 611693cc1..620d540fa 100644 --- a/src/Discord.Net.Commands/CommandService.cs +++ b/src/Discord.Net.Commands/CommandService.cs @@ -45,8 +45,6 @@ namespace Discord.Commands _ignoreExtraArgs = config.IgnoreExtraArgs; _separatorChar = config.SeparatorChar; _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.Message += async msg => await _logEvent.InvokeAsync(msg).ConfigureAwait(false); diff --git a/src/Discord.Net.Commands/Info/CommandInfo.cs b/src/Discord.Net.Commands/Info/CommandInfo.cs index 7c570bae3..f6958db32 100644 --- a/src/Discord.Net.Commands/Info/CommandInfo.cs +++ b/src/Discord.Net.Commands/Info/CommandInfo.cs @@ -43,7 +43,7 @@ namespace Discord.Commands Summary = builder.Summary; Remarks = builder.Remarks; - RunMode = (builder.RunMode == RunMode.Default ? service._defaultRunMode : builder.RunMode); + RunMode = builder.RunMode; Priority = builder.Priority; Aliases = module.Aliases diff --git a/src/Discord.Net.Commands/Info/ModuleInfo.cs b/src/Discord.Net.Commands/Info/ModuleInfo.cs index 02cac00a6..68dcd32bb 100644 --- a/src/Discord.Net.Commands/Info/ModuleInfo.cs +++ b/src/Discord.Net.Commands/Info/ModuleInfo.cs @@ -14,6 +14,7 @@ namespace Discord.Commands public string Remarks { get; } public string Group { get; } public bool IgnoreExtraArgs { get; } + public RunMode RunMode { get; } public IReadOnlyList Aliases { get; } public IReadOnlyList Commands { get; } @@ -32,6 +33,7 @@ namespace Discord.Commands Remarks = builder.Remarks; Group = builder.Group; IgnoreExtraArgs = builder.IgnoreExtraArgs; + RunMode = builder.RunMode; Parent = parent; Aliases = BuildAliases(builder, service).ToImmutableArray(); diff --git a/src/Discord.Net.Commands/RunMode.cs b/src/Discord.Net.Commands/RunMode.cs index ecb6a4b58..37e044933 100644 --- a/src/Discord.Net.Commands/RunMode.cs +++ b/src/Discord.Net.Commands/RunMode.cs @@ -1,8 +1,7 @@ -namespace Discord.Commands +namespace Discord.Commands { public enum RunMode { - Default, Sync, Async }