diff --git a/src/Discord.Net.Core/DiscordConfig.cs b/src/Discord.Net.Core/DiscordConfig.cs index 4056484e..c98b7c44 100644 --- a/src/Discord.Net.Core/DiscordConfig.cs +++ b/src/Discord.Net.Core/DiscordConfig.cs @@ -205,6 +205,14 @@ namespace Discord /// public bool UseInteractionSnowflakeDate { get; set; } = true; + /// + /// Gets or sets whether or not any responses to Discord will make an internal expiration check. + /// + /// + /// This should generally be set to in a development environment due to potential latency issues. + /// + public bool ResponseInternalTimeCheck { get; set; } = true; + /// /// Gets or sets if the Rest/Socket user override formats the string in respect to bidirectional unicode. /// diff --git a/src/Discord.Net.Rest/BaseDiscordClient.cs b/src/Discord.Net.Rest/BaseDiscordClient.cs index d369050e..372dea35 100644 --- a/src/Discord.Net.Rest/BaseDiscordClient.cs +++ b/src/Discord.Net.Rest/BaseDiscordClient.cs @@ -45,6 +45,7 @@ namespace Discord.Rest public TokenType TokenType => ApiClient.AuthTokenType; internal bool UseInteractionSnowflakeDate { get; private set; } internal bool FormatUsersInBidirectionalUnicode { get; private set; } + internal bool ResponseInternalTimeCheck { get; private set; } /// Creates a new REST-only Discord client. internal BaseDiscordClient(DiscordRestConfig config, API.DiscordRestApiClient client) @@ -59,6 +60,7 @@ namespace Discord.Rest UseInteractionSnowflakeDate = config.UseInteractionSnowflakeDate; FormatUsersInBidirectionalUnicode = config.FormatUsersInBidirectionalUnicode; + ResponseInternalTimeCheck = config.ResponseInternalTimeCheck; ApiClient.RequestQueue.RateLimitTriggered += async (id, info, endpoint) => { diff --git a/src/Discord.Net.Rest/Entities/Interactions/CommandBase/RestCommandBase.cs b/src/Discord.Net.Rest/Entities/Interactions/CommandBase/RestCommandBase.cs index ab51adda..dae9b890 100644 --- a/src/Discord.Net.Rest/Entities/Interactions/CommandBase/RestCommandBase.cs +++ b/src/Discord.Net.Rest/Entities/Interactions/CommandBase/RestCommandBase.cs @@ -86,7 +86,7 @@ namespace Discord.Rest if (!IsValidToken) throw new InvalidOperationException("Interaction token is no longer valid"); - if (!InteractionHelper.CanSendResponse(this)) + if (!InteractionHelper.CanSendResponse(this) && Discord.ResponseInternalTimeCheck) throw new TimeoutException($"Cannot respond to an interaction after {InteractionHelper.ResponseTimeLimit} seconds!"); embeds ??= Array.Empty(); @@ -317,7 +317,7 @@ namespace Discord.Rest /// public override string Defer(bool ephemeral = false, RequestOptions options = null) { - if (!InteractionHelper.CanSendResponse(this)) + if (!InteractionHelper.CanSendResponse(this) && Discord.ResponseInternalTimeCheck) throw new TimeoutException($"Cannot defer an interaction after {InteractionHelper.ResponseTimeLimit} seconds!"); var response = new API.InteractionResponse @@ -352,7 +352,7 @@ namespace Discord.Rest /// public override string RespondWithModal(Modal modal, RequestOptions options = null) { - if (!InteractionHelper.CanSendResponse(this)) + if (!InteractionHelper.CanSendResponse(this) && Discord.ResponseInternalTimeCheck) throw new TimeoutException($"Cannot defer an interaction after {InteractionHelper.ResponseTimeLimit} seconds of no response/acknowledgement"); var response = new API.InteractionResponse diff --git a/src/Discord.Net.Rest/Entities/Interactions/MessageComponents/RestMessageComponent.cs b/src/Discord.Net.Rest/Entities/Interactions/MessageComponents/RestMessageComponent.cs index c3d0ded3..434be40d 100644 --- a/src/Discord.Net.Rest/Entities/Interactions/MessageComponents/RestMessageComponent.cs +++ b/src/Discord.Net.Rest/Entities/Interactions/MessageComponents/RestMessageComponent.cs @@ -82,7 +82,7 @@ namespace Discord.Rest if (!IsValidToken) throw new InvalidOperationException("Interaction token is no longer valid"); - if (!InteractionHelper.CanSendResponse(this)) + if (!InteractionHelper.CanSendResponse(this) && Discord.ResponseInternalTimeCheck) throw new TimeoutException($"Cannot respond to an interaction after {InteractionHelper.ResponseTimeLimit} seconds!"); embeds ??= Array.Empty(); @@ -153,7 +153,7 @@ namespace Discord.Rest if (!IsValidToken) throw new InvalidOperationException("Interaction token is no longer valid"); - if (!InteractionHelper.CanSendResponse(this)) + if (!InteractionHelper.CanSendResponse(this) && Discord.ResponseInternalTimeCheck) throw new TimeoutException($"Cannot respond to an interaction after {InteractionHelper.ResponseTimeLimit} seconds!"); if (args.AllowedMentions.IsSpecified) @@ -424,7 +424,7 @@ namespace Discord.Rest /// public string DeferLoading(bool ephemeral = false, RequestOptions options = null) { - if (!InteractionHelper.CanSendResponse(this)) + if (!InteractionHelper.CanSendResponse(this) && Discord.ResponseInternalTimeCheck) throw new TimeoutException($"Cannot defer an interaction after {InteractionHelper.ResponseTimeLimit} seconds of no response/acknowledgement"); var response = new API.InteractionResponse @@ -458,7 +458,7 @@ namespace Discord.Rest /// public override string Defer(bool ephemeral = false, RequestOptions options = null) { - if (!InteractionHelper.CanSendResponse(this)) + if (!InteractionHelper.CanSendResponse(this) && Discord.ResponseInternalTimeCheck) throw new TimeoutException($"Cannot defer an interaction after {InteractionHelper.ResponseTimeLimit} seconds of no response/acknowledgement"); var response = new API.InteractionResponse @@ -490,7 +490,7 @@ namespace Discord.Rest /// public override string RespondWithModal(Modal modal, RequestOptions options = null) { - if (!InteractionHelper.CanSendResponse(this)) + if (!InteractionHelper.CanSendResponse(this) && Discord.ResponseInternalTimeCheck) throw new TimeoutException($"Cannot defer an interaction after {InteractionHelper.ResponseTimeLimit} seconds of no response/acknowledgement"); var response = new API.InteractionResponse diff --git a/src/Discord.Net.Rest/Entities/Interactions/Modals/RestModal.cs b/src/Discord.Net.Rest/Entities/Interactions/Modals/RestModal.cs index 182e9bc7..edeeea0b 100644 --- a/src/Discord.Net.Rest/Entities/Interactions/Modals/RestModal.cs +++ b/src/Discord.Net.Rest/Entities/Interactions/Modals/RestModal.cs @@ -51,7 +51,7 @@ namespace Discord.Rest /// public override string Defer(bool ephemeral = false, RequestOptions options = null) { - if (!InteractionHelper.CanSendResponse(this)) + if (!InteractionHelper.CanSendResponse(this) && Discord.ResponseInternalTimeCheck) throw new TimeoutException($"Cannot defer an interaction after {InteractionHelper.ResponseTimeLimit} seconds!"); var response = new API.InteractionResponse @@ -91,7 +91,7 @@ namespace Discord.Rest /// public string DeferLoading(bool ephemeral = false, RequestOptions options = null) { - if (!InteractionHelper.CanSendResponse(this)) + if (!InteractionHelper.CanSendResponse(this) && Discord.ResponseInternalTimeCheck) throw new TimeoutException($"Cannot defer an interaction after {InteractionHelper.ResponseTimeLimit} seconds of no response/acknowledgement"); var response = new API.InteractionResponse @@ -320,7 +320,7 @@ namespace Discord.Rest if (!IsValidToken) throw new InvalidOperationException("Interaction token is no longer valid"); - if (!InteractionHelper.CanSendResponse(this)) + if (!InteractionHelper.CanSendResponse(this) && Discord.ResponseInternalTimeCheck) throw new TimeoutException($"Cannot respond to an interaction after {InteractionHelper.ResponseTimeLimit} seconds!"); embeds ??= Array.Empty(); @@ -486,7 +486,7 @@ namespace Discord.Rest if (!IsValidToken) throw new InvalidOperationException("Interaction token is no longer valid"); - if (!InteractionHelper.CanSendResponse(this)) + if (!InteractionHelper.CanSendResponse(this) && Discord.ResponseInternalTimeCheck) throw new TimeoutException($"Cannot respond to an interaction after {InteractionHelper.ResponseTimeLimit} seconds!"); if (args.AllowedMentions.IsSpecified) diff --git a/src/Discord.Net.Rest/Entities/Interactions/SlashCommands/RestAutocompleteInteraction.cs b/src/Discord.Net.Rest/Entities/Interactions/SlashCommands/RestAutocompleteInteraction.cs index 9b9096a5..dcad1dbd 100644 --- a/src/Discord.Net.Rest/Entities/Interactions/SlashCommands/RestAutocompleteInteraction.cs +++ b/src/Discord.Net.Rest/Entities/Interactions/SlashCommands/RestAutocompleteInteraction.cs @@ -55,7 +55,7 @@ namespace Discord.Rest /// public string Respond(IEnumerable result, RequestOptions options = null) { - if (!InteractionHelper.CanSendResponse(this)) + if (!InteractionHelper.CanSendResponse(this) && Discord.ResponseInternalTimeCheck) throw new TimeoutException($"Cannot respond to an interaction after {InteractionHelper.ResponseTimeLimit} seconds!"); lock (_lock) diff --git a/src/Discord.Net.WebSocket/Entities/Interaction/MessageComponents/SocketMessageComponent.cs b/src/Discord.Net.WebSocket/Entities/Interaction/MessageComponents/SocketMessageComponent.cs index 82d6e8d0..f24a4be6 100644 --- a/src/Discord.Net.WebSocket/Entities/Interaction/MessageComponents/SocketMessageComponent.cs +++ b/src/Discord.Net.WebSocket/Entities/Interaction/MessageComponents/SocketMessageComponent.cs @@ -87,7 +87,7 @@ namespace Discord.WebSocket if (!IsValidToken) throw new InvalidOperationException("Interaction token is no longer valid"); - if (!InteractionHelper.CanSendResponse(this)) + if (!InteractionHelper.CanSendResponse(this) && Discord.ResponseInternalTimeCheck) throw new TimeoutException($"Cannot respond to an interaction after {InteractionHelper.ResponseTimeLimit} seconds!"); embeds ??= Array.Empty(); @@ -154,7 +154,7 @@ namespace Discord.WebSocket if (!IsValidToken) throw new InvalidOperationException("Interaction token is no longer valid"); - if (!InteractionHelper.CanSendResponse(this)) + if (!InteractionHelper.CanSendResponse(this) && Discord.ResponseInternalTimeCheck) throw new TimeoutException($"Cannot respond to an interaction after {InteractionHelper.ResponseTimeLimit} seconds!"); embeds ??= Array.Empty(); @@ -218,7 +218,7 @@ namespace Discord.WebSocket if (!IsValidToken) throw new InvalidOperationException("Interaction token is no longer valid"); - if (!InteractionHelper.CanSendResponse(this)) + if (!InteractionHelper.CanSendResponse(this) && Discord.ResponseInternalTimeCheck) throw new TimeoutException($"Cannot respond to an interaction after {InteractionHelper.ResponseTimeLimit} seconds!"); if (args.AllowedMentions.IsSpecified) @@ -418,7 +418,7 @@ namespace Discord.WebSocket /// public async Task DeferLoadingAsync(bool ephemeral = false, RequestOptions options = null) { - if (!InteractionHelper.CanSendResponse(this)) + if (!InteractionHelper.CanSendResponse(this) && Discord.ResponseInternalTimeCheck) throw new TimeoutException($"Cannot defer an interaction after {InteractionHelper.ResponseTimeLimit} seconds of no response/acknowledgement"); var response = new API.InteractionResponse @@ -442,7 +442,7 @@ namespace Discord.WebSocket /// public override async Task DeferAsync(bool ephemeral = false, RequestOptions options = null) { - if (!InteractionHelper.CanSendResponse(this)) + if (!InteractionHelper.CanSendResponse(this) && Discord.ResponseInternalTimeCheck) throw new TimeoutException($"Cannot defer an interaction after {InteractionHelper.ResponseTimeLimit} seconds of no response/acknowledgement"); var response = new API.InteractionResponse @@ -469,7 +469,7 @@ namespace Discord.WebSocket if (!IsValidToken) throw new InvalidOperationException("Interaction token is no longer valid"); - if (!InteractionHelper.CanSendResponse(this)) + if (!InteractionHelper.CanSendResponse(this) && Discord.ResponseInternalTimeCheck) throw new TimeoutException($"Cannot respond to an interaction after {InteractionHelper.ResponseTimeLimit} seconds!"); var response = new API.InteractionResponse diff --git a/src/Discord.Net.WebSocket/Entities/Interaction/Modals/SocketModal.cs b/src/Discord.Net.WebSocket/Entities/Interaction/Modals/SocketModal.cs index 8f87fae1..7b1b0a65 100644 --- a/src/Discord.Net.WebSocket/Entities/Interaction/Modals/SocketModal.cs +++ b/src/Discord.Net.WebSocket/Entities/Interaction/Modals/SocketModal.cs @@ -84,7 +84,7 @@ namespace Discord.WebSocket if (!IsValidToken) throw new InvalidOperationException("Interaction token is no longer valid"); - if (!InteractionHelper.CanSendResponse(this)) + if (!InteractionHelper.CanSendResponse(this) && Discord.ResponseInternalTimeCheck) throw new TimeoutException($"Cannot respond to an interaction after {InteractionHelper.ResponseTimeLimit} seconds!"); embeds ??= Array.Empty(); @@ -151,7 +151,7 @@ namespace Discord.WebSocket if (!IsValidToken) throw new InvalidOperationException("Interaction token is no longer valid"); - if (!InteractionHelper.CanSendResponse(this)) + if (!InteractionHelper.CanSendResponse(this) && Discord.ResponseInternalTimeCheck) throw new TimeoutException($"Cannot respond to an interaction after {InteractionHelper.ResponseTimeLimit} seconds!"); embeds ??= Array.Empty(); @@ -215,7 +215,7 @@ namespace Discord.WebSocket if (!IsValidToken) throw new InvalidOperationException("Interaction token is no longer valid"); - if (!InteractionHelper.CanSendResponse(this)) + if (!InteractionHelper.CanSendResponse(this) && Discord.ResponseInternalTimeCheck) throw new TimeoutException($"Cannot respond to an interaction after {InteractionHelper.ResponseTimeLimit} seconds!"); if (args.AllowedMentions.IsSpecified) @@ -420,7 +420,7 @@ namespace Discord.WebSocket /// public override async Task DeferAsync(bool ephemeral = false, RequestOptions options = null) { - if (!InteractionHelper.CanSendResponse(this)) + if (!InteractionHelper.CanSendResponse(this) && Discord.ResponseInternalTimeCheck) throw new TimeoutException($"Cannot defer an interaction after {InteractionHelper.ResponseTimeLimit} seconds of no response/acknowledgement"); var response = new API.InteractionResponse @@ -450,7 +450,7 @@ namespace Discord.WebSocket /// public async Task DeferLoadingAsync(bool ephemeral = false, RequestOptions options = null) { - if (!InteractionHelper.CanSendResponse(this)) + if (!InteractionHelper.CanSendResponse(this) && Discord.ResponseInternalTimeCheck) throw new TimeoutException($"Cannot defer an interaction after {InteractionHelper.ResponseTimeLimit} seconds of no response/acknowledgement"); var response = new API.InteractionResponse diff --git a/src/Discord.Net.WebSocket/Entities/Interaction/SlashCommands/SocketAutocompleteInteraction.cs b/src/Discord.Net.WebSocket/Entities/Interaction/SlashCommands/SocketAutocompleteInteraction.cs index 0889d00c..7e6b484a 100644 --- a/src/Discord.Net.WebSocket/Entities/Interaction/SlashCommands/SocketAutocompleteInteraction.cs +++ b/src/Discord.Net.WebSocket/Entities/Interaction/SlashCommands/SocketAutocompleteInteraction.cs @@ -57,7 +57,7 @@ namespace Discord.WebSocket /// public async Task RespondAsync(IEnumerable result, RequestOptions options = null) { - if (!InteractionHelper.CanSendResponse(this)) + if (!InteractionHelper.CanSendResponse(this) && Discord.ResponseInternalTimeCheck) throw new TimeoutException($"Cannot respond to an interaction after {InteractionHelper.ResponseTimeLimit} seconds!"); lock (_lock) diff --git a/src/Discord.Net.WebSocket/Entities/Interaction/SocketBaseCommand/SocketCommandBase.cs b/src/Discord.Net.WebSocket/Entities/Interaction/SocketBaseCommand/SocketCommandBase.cs index 1f3f4928..3b6da477 100644 --- a/src/Discord.Net.WebSocket/Entities/Interaction/SocketBaseCommand/SocketCommandBase.cs +++ b/src/Discord.Net.WebSocket/Entities/Interaction/SocketBaseCommand/SocketCommandBase.cs @@ -82,7 +82,7 @@ namespace Discord.WebSocket if (!IsValidToken) throw new InvalidOperationException("Interaction token is no longer valid"); - if (!InteractionHelper.CanSendResponse(this)) + if (!InteractionHelper.CanSendResponse(this) && Discord.ResponseInternalTimeCheck) throw new TimeoutException($"Cannot respond to an interaction after {InteractionHelper.ResponseTimeLimit} seconds!"); embeds ??= Array.Empty(); @@ -143,7 +143,7 @@ namespace Discord.WebSocket if (!IsValidToken) throw new InvalidOperationException("Interaction token is no longer valid"); - if (!InteractionHelper.CanSendResponse(this)) + if (!InteractionHelper.CanSendResponse(this) && Discord.ResponseInternalTimeCheck) throw new TimeoutException($"Cannot respond to an interaction after {InteractionHelper.ResponseTimeLimit} seconds!"); var response = new API.InteractionResponse @@ -188,7 +188,7 @@ namespace Discord.WebSocket if (!IsValidToken) throw new InvalidOperationException("Interaction token is no longer valid"); - if (!InteractionHelper.CanSendResponse(this)) + if (!InteractionHelper.CanSendResponse(this) && Discord.ResponseInternalTimeCheck) throw new TimeoutException($"Cannot respond to an interaction after {InteractionHelper.ResponseTimeLimit} seconds!"); embeds ??= Array.Empty(); @@ -352,7 +352,7 @@ namespace Discord.WebSocket /// public override async Task DeferAsync(bool ephemeral = false, RequestOptions options = null) { - if (!InteractionHelper.CanSendResponse(this)) + if (!InteractionHelper.CanSendResponse(this) && Discord.ResponseInternalTimeCheck) throw new TimeoutException($"Cannot defer an interaction after {InteractionHelper.ResponseTimeLimit} seconds!"); var response = new API.InteractionResponse