@@ -24,7 +24,7 @@ namespace Discord.Commands | |||||
private readonly HashSet<ModuleInfo> _moduleDefs; | private readonly HashSet<ModuleInfo> _moduleDefs; | ||||
private readonly CommandMap _map; | private readonly CommandMap _map; | ||||
internal readonly bool _caseSensitive; | |||||
internal readonly bool _caseSensitive, _throwOnError; | |||||
internal readonly char _separatorChar; | internal readonly char _separatorChar; | ||||
internal readonly RunMode _defaultRunMode; | internal readonly RunMode _defaultRunMode; | ||||
internal readonly Logger _cmdLogger; | internal readonly Logger _cmdLogger; | ||||
@@ -38,6 +38,7 @@ namespace Discord.Commands | |||||
public CommandService(CommandServiceConfig config) | public CommandService(CommandServiceConfig config) | ||||
{ | { | ||||
_caseSensitive = config.CaseSensitiveCommands; | _caseSensitive = config.CaseSensitiveCommands; | ||||
_throwOnError = config.ThrowOnError; | |||||
_separatorChar = config.SeparatorChar; | _separatorChar = config.SeparatorChar; | ||||
_defaultRunMode = config.DefaultRunMode; | _defaultRunMode = config.DefaultRunMode; | ||||
if (_defaultRunMode == RunMode.Default) | if (_defaultRunMode == RunMode.Default) | ||||
@@ -11,5 +11,11 @@ | |||||
/// <summary> Gets or sets the minimum log level severity that will be sent to the Log event. </summary> | /// <summary> Gets or sets the minimum log level severity that will be sent to the Log event. </summary> | ||||
public LogSeverity LogLevel { get; set; } = LogSeverity.Info; | public LogSeverity LogLevel { get; set; } = LogSeverity.Info; | ||||
/// <summary> | |||||
/// Gets or sets whether RunMode.Sync commands should push exceptions up to the caller. | |||||
/// If false or an RunMode.Async command, exceptions are only reported in the Log event. | |||||
///</summary> | |||||
public bool ThrowOnError { get; set; } = true; | |||||
} | } | ||||
} | } |
@@ -140,7 +140,7 @@ namespace Discord.Commands | |||||
switch (RunMode) | switch (RunMode) | ||||
{ | { | ||||
case RunMode.Sync: //Always sync | case RunMode.Sync: //Always sync | ||||
var t1 = ExecuteAsyncInternal(context, args, map); | |||||
await ExecuteAsyncInternal(context, args, map).ConfigureAwait(false); | |||||
break; | break; | ||||
case RunMode.Async: //Always async | case RunMode.Async: //Always async | ||||
var t2 = Task.Run(async () => | var t2 = Task.Run(async () => | ||||
@@ -168,7 +168,8 @@ namespace Discord.Commands | |||||
{ | { | ||||
ex = new CommandException(this, context, ex); | ex = new CommandException(this, context, ex); | ||||
await Module.Service._cmdLogger.ErrorAsync(ex).ConfigureAwait(false); | await Module.Service._cmdLogger.ErrorAsync(ex).ConfigureAwait(false); | ||||
throw; | |||||
if (Module.Service._throwOnError) | |||||
throw; | |||||
} | } | ||||
await Module.Service._cmdLogger.VerboseAsync($"Executed {GetLogText(context)}").ConfigureAwait(false); | await Module.Service._cmdLogger.VerboseAsync($"Executed {GetLogText(context)}").ConfigureAwait(false); | ||||
} | } | ||||