From 0f0f3f76143f5d5826e5ecc53ebd1c697fc3daa2 Mon Sep 17 00:00:00 2001 From: Cenk Ergen <57065323+Cenngo@users.noreply.github.com> Date: Wed, 17 Jan 2024 01:06:29 +0300 Subject: [PATCH] Log InteractionCommand execution exceptions in Wrapped Exception (#2584) * log command execution exceptions in wrapped obj * actually log the wrapped exception --------- Co-authored-by: Misha133 --- .../Builders/ModuleClassBuilder.cs | 5 +++-- .../Info/Commands/CommandInfo.cs | 3 ++- .../InteractionException.cs | 17 +++++++++++++++++ 3 files changed, 22 insertions(+), 3 deletions(-) create mode 100644 src/Discord.Net.Interactions/InteractionException.cs diff --git a/src/Discord.Net.Interactions/Builders/ModuleClassBuilder.cs b/src/Discord.Net.Interactions/Builders/ModuleClassBuilder.cs index 358bc44f..8d251941 100644 --- a/src/Discord.Net.Interactions/Builders/ModuleClassBuilder.cs +++ b/src/Discord.Net.Interactions/Builders/ModuleClassBuilder.cs @@ -413,8 +413,9 @@ namespace Discord.Interactions.Builders } catch (Exception ex) { - await commandService._cmdLogger.ErrorAsync(ex).ConfigureAwait(false); - return ExecuteResult.FromError(ex); + var interactionException = new InteractionException(commandInfo, context, ex); + await commandService._cmdLogger.ErrorAsync(interactionException).ConfigureAwait(false); + return ExecuteResult.FromError(interactionException); } finally { diff --git a/src/Discord.Net.Interactions/Info/Commands/CommandInfo.cs b/src/Discord.Net.Interactions/Info/Commands/CommandInfo.cs index 06a4a712..475d140e 100644 --- a/src/Discord.Net.Interactions/Info/Commands/CommandInfo.cs +++ b/src/Discord.Net.Interactions/Info/Commands/CommandInfo.cs @@ -165,7 +165,8 @@ namespace Discord.Interactions while (ex is TargetInvocationException) ex = ex.InnerException; - await Module.CommandService._cmdLogger.ErrorAsync(ex).ConfigureAwait(false); + var interactionException = new InteractionException(this, context, ex); + await Module.CommandService._cmdLogger.ErrorAsync(interactionException).ConfigureAwait(false); var result = ExecuteResult.FromError(ex); await InvokeModuleEvent(context, result).ConfigureAwait(false); diff --git a/src/Discord.Net.Interactions/InteractionException.cs b/src/Discord.Net.Interactions/InteractionException.cs new file mode 100644 index 00000000..c1d4c3f4 --- /dev/null +++ b/src/Discord.Net.Interactions/InteractionException.cs @@ -0,0 +1,17 @@ +using System; + +namespace Discord.Interactions +{ + public class InteractionException : Exception + { + public ICommandInfo CommandInfo { get; } + public IInteractionContext InteractionContext { get; } + + public InteractionException(ICommandInfo commandInfo, IInteractionContext context, Exception exception) + : base($"Error occurred executing {commandInfo}.", exception) + { + CommandInfo = commandInfo; + InteractionContext = context; + } + } +}