From 1fbcbb8a672f2ab27dcb8ec092581217e110e9fd Mon Sep 17 00:00:00 2001 From: Quin Lynch <49576606+quinchs@users.noreply.github.com> Date: Fri, 24 Dec 2021 10:38:22 -0400 Subject: [PATCH] Make HasResponded public and add it to IDiscordInteraction (#1994) --- .../Interactions/IDiscordInteraction.cs | 9 ++++++ .../CommandBase/RestCommandBase.cs | 26 ++++------------- .../MessageComponents/RestMessageComponent.cs | 29 +++++-------------- .../Entities/Interactions/RestInteraction.cs | 5 ++-- .../Interactions/RestPingInteraction.cs | 2 -- .../RestAutocompleteInteraction.cs | 8 ++--- .../SocketMessageComponent.cs | 12 ++------ .../SocketBaseCommand/SocketCommandBase.cs | 6 +--- 8 files changed, 31 insertions(+), 66 deletions(-) diff --git a/src/Discord.Net.Core/Entities/Interactions/IDiscordInteraction.cs b/src/Discord.Net.Core/Entities/Interactions/IDiscordInteraction.cs index 9988e238c..064d3c4da 100644 --- a/src/Discord.Net.Core/Entities/Interactions/IDiscordInteraction.cs +++ b/src/Discord.Net.Core/Entities/Interactions/IDiscordInteraction.cs @@ -35,6 +35,15 @@ namespace Discord /// int Version { get; } + /// + /// Gets whether or not this interaction has been responded to. + /// + /// + /// This property is locally set -- if you're running multiple bots + /// off the same token then this property won't be in sync with them. + /// + bool HasResponded { get; } + /// /// Gets the user who invoked the interaction. /// diff --git a/src/Discord.Net.Rest/Entities/Interactions/CommandBase/RestCommandBase.cs b/src/Discord.Net.Rest/Entities/Interactions/CommandBase/RestCommandBase.cs index 251a7cc28..2069b9913 100644 --- a/src/Discord.Net.Rest/Entities/Interactions/CommandBase/RestCommandBase.cs +++ b/src/Discord.Net.Rest/Entities/Interactions/CommandBase/RestCommandBase.cs @@ -32,9 +32,6 @@ namespace Discord.Rest /// internal new RestCommandBaseData Data { get; private set; } - - internal override bool _hasResponded { get; set; } - private object _lock = new object(); internal RestCommandBase(DiscordRestClient client, Model model) @@ -126,23 +123,15 @@ namespace Discord.Rest lock (_lock) { - if (_hasResponded) + if (HasResponded) { throw new InvalidOperationException("Cannot respond twice to the same interaction"); } - } - try - { - return SerializePayload(response); - } - finally - { - lock (_lock) - { - _hasResponded = true; - } + HasResponded = true; } + + return SerializePayload(response); } /// @@ -317,15 +306,12 @@ namespace Discord.Rest lock (_lock) { - if (_hasResponded) + if (HasResponded) { throw new InvalidOperationException("Cannot respond or defer twice to the same interaction"); } - } - lock (_lock) - { - _hasResponded = true; + HasResponded = true; } return SerializePayload(response); diff --git a/src/Discord.Net.Rest/Entities/Interactions/MessageComponents/RestMessageComponent.cs b/src/Discord.Net.Rest/Entities/Interactions/MessageComponents/RestMessageComponent.cs index 8d234169c..d9643079e 100644 --- a/src/Discord.Net.Rest/Entities/Interactions/MessageComponents/RestMessageComponent.cs +++ b/src/Discord.Net.Rest/Entities/Interactions/MessageComponents/RestMessageComponent.cs @@ -26,7 +26,6 @@ namespace Discord.Rest public RestUserMessage Message { get; private set; } private object _lock = new object(); - internal override bool _hasResponded { get; set; } = false; internal RestMessageComponent(BaseDiscordClient client, Model model) : base(client, model.Id) @@ -128,15 +127,12 @@ namespace Discord.Rest lock (_lock) { - if (_hasResponded) + if (HasResponded) { throw new InvalidOperationException("Cannot respond, update, or defer twice to the same interaction"); } - } - lock (_lock) - { - _hasResponded = true; + HasResponded = true; } return SerializePayload(response); @@ -223,15 +219,12 @@ namespace Discord.Rest lock (_lock) { - if (_hasResponded) + if (HasResponded) { throw new InvalidOperationException("Cannot respond, update, or defer twice to the same interaction"); } - } - lock (_lock) - { - _hasResponded = true; + HasResponded = true; } return SerializePayload(response); @@ -408,15 +401,12 @@ namespace Discord.Rest lock (_lock) { - if (_hasResponded) + if (HasResponded) { throw new InvalidOperationException("Cannot respond or defer twice to the same interaction"); } - } - lock (_lock) - { - _hasResponded = true; + HasResponded = true; } return SerializePayload(response); @@ -445,15 +435,12 @@ namespace Discord.Rest lock (_lock) { - if (_hasResponded) + if (HasResponded) { throw new InvalidOperationException("Cannot respond or defer twice to the same interaction"); } - } - lock (_lock) - { - _hasResponded = true; + HasResponded = true; } return SerializePayload(response); diff --git a/src/Discord.Net.Rest/Entities/Interactions/RestInteraction.cs b/src/Discord.Net.Rest/Entities/Interactions/RestInteraction.cs index 0011b9b62..de1fdb7c4 100644 --- a/src/Discord.Net.Rest/Entities/Interactions/RestInteraction.cs +++ b/src/Discord.Net.Rest/Entities/Interactions/RestInteraction.cs @@ -35,8 +35,6 @@ namespace Discord.Rest /// public DateTimeOffset CreatedAt { get; private set; } - internal abstract bool _hasResponded { get; set; } - /// /// if the token is valid for replying to, otherwise . /// @@ -53,6 +51,9 @@ namespace Discord.Rest /// public RestGuild Guild { get; private set; } + /// + public bool HasResponded { get; protected set; } + internal RestInteraction(BaseDiscordClient discord, ulong id) : base(discord, id) { diff --git a/src/Discord.Net.Rest/Entities/Interactions/RestPingInteraction.cs b/src/Discord.Net.Rest/Entities/Interactions/RestPingInteraction.cs index 5d27b491e..71d5a588c 100644 --- a/src/Discord.Net.Rest/Entities/Interactions/RestPingInteraction.cs +++ b/src/Discord.Net.Rest/Entities/Interactions/RestPingInteraction.cs @@ -13,8 +13,6 @@ namespace Discord.Rest /// public class RestPingInteraction : RestInteraction, IDiscordInteraction { - internal override bool _hasResponded { get => throw new NotImplementedException(); set => throw new NotImplementedException(); } - internal RestPingInteraction(BaseDiscordClient client, ulong id) : base(client, id) { diff --git a/src/Discord.Net.Rest/Entities/Interactions/SlashCommands/RestAutocompleteInteraction.cs b/src/Discord.Net.Rest/Entities/Interactions/SlashCommands/RestAutocompleteInteraction.cs index 12f07942f..44d0dc6ff 100644 --- a/src/Discord.Net.Rest/Entities/Interactions/SlashCommands/RestAutocompleteInteraction.cs +++ b/src/Discord.Net.Rest/Entities/Interactions/SlashCommands/RestAutocompleteInteraction.cs @@ -19,7 +19,6 @@ namespace Discord.Rest /// public new RestAutocompleteInteractionData Data { get; } - internal override bool _hasResponded { get; set; } private object _lock = new object(); internal RestAutocompleteInteraction(DiscordRestClient client, Model model) @@ -61,15 +60,12 @@ namespace Discord.Rest lock (_lock) { - if (_hasResponded) + if (HasResponded) { throw new InvalidOperationException("Cannot respond twice to the same interaction"); } - } - lock (_lock) - { - _hasResponded = true; + HasResponded = true; } var model = new API.InteractionResponse diff --git a/src/Discord.Net.WebSocket/Entities/Interaction/MessageComponents/SocketMessageComponent.cs b/src/Discord.Net.WebSocket/Entities/Interaction/MessageComponents/SocketMessageComponent.cs index 4fbab38b0..862c792a8 100644 --- a/src/Discord.Net.WebSocket/Entities/Interaction/MessageComponents/SocketMessageComponent.cs +++ b/src/Discord.Net.WebSocket/Entities/Interaction/MessageComponents/SocketMessageComponent.cs @@ -411,11 +411,7 @@ namespace Discord.WebSocket } await Discord.Rest.ApiClient.CreateInteractionResponseAsync(response, Id, Token, options).ConfigureAwait(false); - - lock (_lock) - { - HasResponded = true; - } + HasResponded = true; } /// @@ -439,11 +435,7 @@ namespace Discord.WebSocket } await Discord.Rest.ApiClient.CreateInteractionResponseAsync(response, Id, Token, options).ConfigureAwait(false); - - lock (_lock) - { - HasResponded = true; - } + HasResponded = true; } //IComponentInteraction diff --git a/src/Discord.Net.WebSocket/Entities/Interaction/SocketBaseCommand/SocketCommandBase.cs b/src/Discord.Net.WebSocket/Entities/Interaction/SocketBaseCommand/SocketCommandBase.cs index 439200d30..330d6d7a4 100644 --- a/src/Discord.Net.WebSocket/Entities/Interaction/SocketBaseCommand/SocketCommandBase.cs +++ b/src/Discord.Net.WebSocket/Entities/Interaction/SocketBaseCommand/SocketCommandBase.cs @@ -318,11 +318,7 @@ namespace Discord.WebSocket } await Discord.Rest.ApiClient.CreateInteractionResponseAsync(response, Id, Token, options).ConfigureAwait(false); - - lock (_lock) - { - HasResponded = true; - } + HasResponded = true; } } }