diff --git a/src/Discord.Net/Net/Rest/RequestEventArgs.cs b/src/Discord.Net/Net/Rest/RequestEventArgs.cs index 4f579bb57..ce6dadd83 100644 --- a/src/Discord.Net/Net/Rest/RequestEventArgs.cs +++ b/src/Discord.Net/Net/Rest/RequestEventArgs.cs @@ -6,6 +6,7 @@ namespace Discord.Net.Rest public class RequestEventArgs : EventArgs { public IRestRequest Request { get; set; } + public bool Cancel { get; set; } public RequestEventArgs(IRestRequest request) { diff --git a/src/Discord.Net/Net/Rest/RestClient.cs b/src/Discord.Net/Net/Rest/RestClient.cs index a32771e0d..0b6ed5de5 100644 --- a/src/Discord.Net/Net/Rest/RestClient.cs +++ b/src/Discord.Net/Net/Rest/RestClient.cs @@ -26,8 +26,12 @@ namespace Discord.Net.Rest public event EventHandler SendingRequest = delegate { }; public event EventHandler SentRequest = delegate { }; - private void OnSendingRequest(IRestRequest request) - => SendingRequest(this, new RequestEventArgs(request)); + private bool OnSendingRequest(IRestRequest request) + { + var eventArgs = new RequestEventArgs(request); + SendingRequest(this, eventArgs); + return !eventArgs.Cancel; + } private void OnSentRequest(IRestRequest request, object response, string responseJson, double milliseconds) => SentRequest(this, new CompletedRequestEventArgs(request, response, responseJson, milliseconds)); @@ -88,7 +92,7 @@ namespace Discord.Net.Rest { if (request == null) throw new ArgumentNullException(nameof(request)); - OnSendingRequest(request); + if (!OnSendingRequest(request)) throw new OperationCanceledException(); var results = await Send(request, true).ConfigureAwait(false); var response = Deserialize(results.Response); OnSentRequest(request, response, results.Response, results.Milliseconds); @@ -99,7 +103,7 @@ namespace Discord.Net.Rest { if (request == null) throw new ArgumentNullException(nameof(request)); - OnSendingRequest(request); + if (!OnSendingRequest(request)) throw new OperationCanceledException(); var results = await Send(request, false).ConfigureAwait(false); OnSentRequest(request, null, null, results.Milliseconds); } @@ -109,7 +113,7 @@ namespace Discord.Net.Rest { if (request == null) throw new ArgumentNullException(nameof(request)); - OnSendingRequest(request); + if (!OnSendingRequest(request)) throw new OperationCanceledException(); var results = await SendFile(request, true).ConfigureAwait(false); var response = Deserialize(results.Response); OnSentRequest(request, response, results.Response, results.Milliseconds); @@ -120,7 +124,7 @@ namespace Discord.Net.Rest { if (request == null) throw new ArgumentNullException(nameof(request)); - OnSendingRequest(request); + if (!OnSendingRequest(request)) throw new OperationCanceledException(); var results = await SendFile(request, false).ConfigureAwait(false); OnSentRequest(request, null, null, results.Milliseconds); }