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;
}
}
}