Browse Source

Make HasResponded public and add it to IDiscordInteraction (#1994)

tags/3.1.0
Quin Lynch GitHub 3 years ago
parent
commit
1fbcbb8a67
No known key found for this signature in database GPG Key ID: 4AEE18F83AFDEB23
8 changed files with 31 additions and 66 deletions
  1. +9
    -0
      src/Discord.Net.Core/Entities/Interactions/IDiscordInteraction.cs
  2. +6
    -20
      src/Discord.Net.Rest/Entities/Interactions/CommandBase/RestCommandBase.cs
  3. +8
    -21
      src/Discord.Net.Rest/Entities/Interactions/MessageComponents/RestMessageComponent.cs
  4. +3
    -2
      src/Discord.Net.Rest/Entities/Interactions/RestInteraction.cs
  5. +0
    -2
      src/Discord.Net.Rest/Entities/Interactions/RestPingInteraction.cs
  6. +2
    -6
      src/Discord.Net.Rest/Entities/Interactions/SlashCommands/RestAutocompleteInteraction.cs
  7. +2
    -10
      src/Discord.Net.WebSocket/Entities/Interaction/MessageComponents/SocketMessageComponent.cs
  8. +1
    -5
      src/Discord.Net.WebSocket/Entities/Interaction/SocketBaseCommand/SocketCommandBase.cs

+ 9
- 0
src/Discord.Net.Core/Entities/Interactions/IDiscordInteraction.cs View File

@@ -35,6 +35,15 @@ namespace Discord
/// </summary>
int Version { get; }

/// <summary>
/// Gets whether or not this interaction has been responded to.
/// </summary>
/// <remarks>
/// 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.
/// </remarks>
bool HasResponded { get; }

/// <summary>
/// Gets the user who invoked the interaction.
/// </summary>


+ 6
- 20
src/Discord.Net.Rest/Entities/Interactions/CommandBase/RestCommandBase.cs View File

@@ -32,9 +32,6 @@ namespace Discord.Rest
/// </summary>
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);
}

/// <inheritdoc/>
@@ -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);


+ 8
- 21
src/Discord.Net.Rest/Entities/Interactions/MessageComponents/RestMessageComponent.cs View File

@@ -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);


+ 3
- 2
src/Discord.Net.Rest/Entities/Interactions/RestInteraction.cs View File

@@ -35,8 +35,6 @@ namespace Discord.Rest
/// <inheritdoc/>
public DateTimeOffset CreatedAt { get; private set; }

internal abstract bool _hasResponded { get; set; }

/// <summary>
/// <see langword="true"/> if the token is valid for replying to, otherwise <see langword="false"/>.
/// </summary>
@@ -53,6 +51,9 @@ namespace Discord.Rest
/// </summary>
public RestGuild Guild { get; private set; }

/// <inheritdoc/>
public bool HasResponded { get; protected set; }

internal RestInteraction(BaseDiscordClient discord, ulong id)
: base(discord, id)
{


+ 0
- 2
src/Discord.Net.Rest/Entities/Interactions/RestPingInteraction.cs View File

@@ -13,8 +13,6 @@ namespace Discord.Rest
/// </summary>
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)
{


+ 2
- 6
src/Discord.Net.Rest/Entities/Interactions/SlashCommands/RestAutocompleteInteraction.cs View File

@@ -19,7 +19,6 @@ namespace Discord.Rest
/// </summary>
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


+ 2
- 10
src/Discord.Net.WebSocket/Entities/Interaction/MessageComponents/SocketMessageComponent.cs View File

@@ -411,11 +411,7 @@ namespace Discord.WebSocket
}

await Discord.Rest.ApiClient.CreateInteractionResponseAsync(response, Id, Token, options).ConfigureAwait(false);

lock (_lock)
{
HasResponded = true;
}
HasResponded = true;
}

/// <inheritdoc/>
@@ -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


+ 1
- 5
src/Discord.Net.WebSocket/Entities/Interaction/SocketBaseCommand/SocketCommandBase.cs View File

@@ -318,11 +318,7 @@ namespace Discord.WebSocket
}

await Discord.Rest.ApiClient.CreateInteractionResponseAsync(response, Id, Token, options).ConfigureAwait(false);

lock (_lock)
{
HasResponded = true;
}
HasResponded = true;
}
}
}

Loading…
Cancel
Save