From c2599977a517acb9b7cc72e84ad7683dd08dc5d6 Mon Sep 17 00:00:00 2001 From: Joe4evr Date: Mon, 30 Jan 2017 03:14:12 +0100 Subject: [PATCH 1/2] Add BeforeExecute/AfterExecute methods to ModuleBase --- .../Builders/ModuleClassBuilder.cs | 2 ++ src/Discord.Net.Commands/IModuleBase.cs | 4 ++++ src/Discord.Net.Commands/ModuleBase.cs | 12 ++++++++++++ 3 files changed, 18 insertions(+) diff --git a/src/Discord.Net.Commands/Builders/ModuleClassBuilder.cs b/src/Discord.Net.Commands/Builders/ModuleClassBuilder.cs index 1663b3dba..2962b517f 100644 --- a/src/Discord.Net.Commands/Builders/ModuleClassBuilder.cs +++ b/src/Discord.Net.Commands/Builders/ModuleClassBuilder.cs @@ -166,10 +166,12 @@ namespace Discord.Commands instance.SetContext(ctx); try { + instance.BeforeExecute(); return method.Invoke(instance, args) as Task ?? Task.Delay(0); } finally { + instance.AfterExecute(); (instance as IDisposable)?.Dispose(); } }; diff --git a/src/Discord.Net.Commands/IModuleBase.cs b/src/Discord.Net.Commands/IModuleBase.cs index e65a059e3..fda768b53 100644 --- a/src/Discord.Net.Commands/IModuleBase.cs +++ b/src/Discord.Net.Commands/IModuleBase.cs @@ -3,5 +3,9 @@ internal interface IModuleBase { void SetContext(ICommandContext context); + + void BeforeExecute(); + + void AfterExecute(); } } diff --git a/src/Discord.Net.Commands/ModuleBase.cs b/src/Discord.Net.Commands/ModuleBase.cs index 4b8e1727d..f2e885ac8 100644 --- a/src/Discord.Net.Commands/ModuleBase.cs +++ b/src/Discord.Net.Commands/ModuleBase.cs @@ -15,6 +15,14 @@ namespace Discord.Commands return await Context.Channel.SendMessageAsync(message, isTTS, embed, options).ConfigureAwait(false); } + protected void BeforeExecute() + { + } + + protected void AfterExecute() + { + } + //IModuleBase void IModuleBase.SetContext(ICommandContext context) { @@ -23,5 +31,9 @@ namespace Discord.Commands throw new InvalidOperationException($"Invalid context type. Expected {typeof(T).Name}, got {context.GetType().Name}"); Context = newValue; } + + void IModuleBase.BeforeExecute() => BeforeExecute(); + + void IModuleBase.AfterExecute() => AfterExecute(); } } From ea298875af19177afd721de158555ce5ebf4b773 Mon Sep 17 00:00:00 2001 From: Joe4evr Date: Mon, 30 Jan 2017 03:17:57 +0100 Subject: [PATCH 2/2] Actually mark the methods virtual #derp --- src/Discord.Net.Commands/ModuleBase.cs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/Discord.Net.Commands/ModuleBase.cs b/src/Discord.Net.Commands/ModuleBase.cs index f2e885ac8..a38ffce06 100644 --- a/src/Discord.Net.Commands/ModuleBase.cs +++ b/src/Discord.Net.Commands/ModuleBase.cs @@ -15,11 +15,11 @@ namespace Discord.Commands return await Context.Channel.SendMessageAsync(message, isTTS, embed, options).ConfigureAwait(false); } - protected void BeforeExecute() + protected virtual void BeforeExecute() { } - protected void AfterExecute() + protected virtual void AfterExecute() { }