diff --git a/src/Discord.Net.Rest/Entities/Interactions/MessageComponents/RestMessageComponent.cs b/src/Discord.Net.Rest/Entities/Interactions/MessageComponents/RestMessageComponent.cs
index 7280c761..a59767c0 100644
--- a/src/Discord.Net.Rest/Entities/Interactions/MessageComponents/RestMessageComponent.cs
+++ b/src/Discord.Net.Rest/Entities/Interactions/MessageComponents/RestMessageComponent.cs
@@ -141,8 +141,7 @@ namespace Discord.Rest
///
/// A delegate containing the properties to modify the message with.
/// The request options for this request.
- /// A string that contains json to write back to the incoming http request.
- public string Update(Action func, RequestOptions options = null)
+ public async Task UpdateAsync(Action func, RequestOptions options = null)
{
var args = new MessageProperties();
func(args);
@@ -200,20 +199,43 @@ namespace Discord.Rest
}
}
- var response = new API.InteractionResponse
+ if (!args.Attachments.IsSpecified)
{
- Type = InteractionResponseType.UpdateMessage,
- Data = new API.InteractionCallbackData
+ var response = new API.InteractionResponse
{
+ Type = InteractionResponseType.UpdateMessage,
+ Data = new API.InteractionCallbackData
+ {
+ Content = args.Content,
+ AllowedMentions = args.AllowedMentions.IsSpecified ? args.AllowedMentions.Value?.ToModel() : Optional.Unspecified,
+ Embeds = apiEmbeds?.ToArray() ?? Optional.Unspecified,
+ Components = args.Components.IsSpecified
+ ? args.Components.Value?.Components.Select(x => new API.ActionRowComponent(x)).ToArray() ?? Array.Empty()
+ : Optional.Unspecified,
+ Flags = args.Flags.IsSpecified ? args.Flags.Value ?? Optional.Unspecified : Optional.Unspecified
+ }
+ };
+
+ await InteractionHelper.SendInteractionResponseAsync(Discord, response, this, Channel, options).ConfigureAwait(false);
+ }
+ else
+ {
+ var attachments = args.Attachments.Value?.ToArray() ?? Array.Empty();
+
+ var response = new API.Rest.UploadInteractionFileParams(attachments)
+ {
+ Type = InteractionResponseType.UpdateMessage,
Content = args.Content,
AllowedMentions = args.AllowedMentions.IsSpecified ? args.AllowedMentions.Value?.ToModel() : Optional.Unspecified,
Embeds = apiEmbeds?.ToArray() ?? Optional.Unspecified,
- Components = args.Components.IsSpecified
+ MessageComponents = args.Components.IsSpecified
? args.Components.Value?.Components.Select(x => new API.ActionRowComponent(x)).ToArray() ?? Array.Empty()
: Optional.Unspecified,
Flags = args.Flags.IsSpecified ? args.Flags.Value ?? Optional.Unspecified : Optional.Unspecified
- }
- };
+ };
+
+ await InteractionHelper.SendInteractionResponseAsync(Discord, response, this, Channel, options).ConfigureAwait(false);
+ }
lock (_lock)
{
@@ -221,11 +243,9 @@ namespace Discord.Rest
{
throw new InvalidOperationException("Cannot respond, update, or defer twice to the same interaction");
}
-
- HasResponded = true;
}
- return SerializePayload(response);
+ HasResponded = true;
}
///
@@ -493,7 +513,7 @@ namespace Discord.Rest
///
Task IComponentInteraction.UpdateAsync(Action func, RequestOptions options)
- => Task.FromResult(Update(func, options));
+ => UpdateAsync(func, options);
///
Task IComponentInteraction.DeferLoadingAsync(bool ephemeral, RequestOptions options)
diff --git a/src/Discord.Net.Rest/Entities/Interactions/Modals/RestModal.cs b/src/Discord.Net.Rest/Entities/Interactions/Modals/RestModal.cs
index 37abc22d..33220d88 100644
--- a/src/Discord.Net.Rest/Entities/Interactions/Modals/RestModal.cs
+++ b/src/Discord.Net.Rest/Entities/Interactions/Modals/RestModal.cs
@@ -512,20 +512,43 @@ namespace Discord.Rest
}
}
- var response = new API.InteractionResponse
+ if (!args.Attachments.IsSpecified)
{
- Type = InteractionResponseType.UpdateMessage,
- Data = new API.InteractionCallbackData
+ var response = new API.InteractionResponse
{
+ Type = InteractionResponseType.UpdateMessage,
+ Data = new API.InteractionCallbackData
+ {
+ Content = args.Content,
+ AllowedMentions = args.AllowedMentions.IsSpecified ? args.AllowedMentions.Value?.ToModel() : Optional.Unspecified,
+ Embeds = apiEmbeds?.ToArray() ?? Optional.Unspecified,
+ Components = args.Components.IsSpecified
+ ? args.Components.Value?.Components.Select(x => new API.ActionRowComponent(x)).ToArray() ?? Array.Empty()
+ : Optional.Unspecified,
+ Flags = args.Flags.IsSpecified ? args.Flags.Value ?? Optional.Unspecified : Optional.Unspecified
+ }
+ };
+
+ await InteractionHelper.SendInteractionResponseAsync(Discord, response, this, Channel, options).ConfigureAwait(false);
+ }
+ else
+ {
+ var attachments = args.Attachments.Value?.ToArray() ?? Array.Empty();
+
+ var response = new API.Rest.UploadInteractionFileParams(attachments)
+ {
+ Type = InteractionResponseType.UpdateMessage,
Content = args.Content,
AllowedMentions = args.AllowedMentions.IsSpecified ? args.AllowedMentions.Value?.ToModel() : Optional.Unspecified,
Embeds = apiEmbeds?.ToArray() ?? Optional.Unspecified,
- Components = args.Components.IsSpecified
+ MessageComponents = args.Components.IsSpecified
? args.Components.Value?.Components.Select(x => new API.ActionRowComponent(x)).ToArray() ?? Array.Empty()
: Optional.Unspecified,
Flags = args.Flags.IsSpecified ? args.Flags.Value ?? Optional.Unspecified : Optional.Unspecified
- }
- };
+ };
+
+ await InteractionHelper.SendInteractionResponseAsync(Discord, response, this, Channel, options).ConfigureAwait(false);
+ }
lock (_lock)
{
@@ -535,7 +558,6 @@ namespace Discord.Rest
}
}
- await InteractionHelper.SendInteractionResponseAsync(Discord, response, this, Channel, options).ConfigureAwait(false);
HasResponded = true;
}
}
diff --git a/src/Discord.Net.WebSocket/Entities/Interaction/Modals/SocketModal.cs b/src/Discord.Net.WebSocket/Entities/Interaction/Modals/SocketModal.cs
index 20daf7a0..ff1d4dc8 100644
--- a/src/Discord.Net.WebSocket/Entities/Interaction/Modals/SocketModal.cs
+++ b/src/Discord.Net.WebSocket/Entities/Interaction/Modals/SocketModal.cs
@@ -258,20 +258,43 @@ namespace Discord.WebSocket
}
}
- var response = new API.InteractionResponse
+ if (!args.Attachments.IsSpecified)
{
- Type = InteractionResponseType.UpdateMessage,
- Data = new API.InteractionCallbackData
+ var response = new API.InteractionResponse
{
+ Type = InteractionResponseType.UpdateMessage,
+ Data = new API.InteractionCallbackData
+ {
+ Content = args.Content,
+ AllowedMentions = args.AllowedMentions.IsSpecified ? args.AllowedMentions.Value?.ToModel() : Optional.Unspecified,
+ Embeds = apiEmbeds?.ToArray() ?? Optional.Unspecified,
+ Components = args.Components.IsSpecified
+ ? args.Components.Value?.Components.Select(x => new API.ActionRowComponent(x)).ToArray() ?? Array.Empty()
+ : Optional.Unspecified,
+ Flags = args.Flags.IsSpecified ? args.Flags.Value ?? Optional.Unspecified : Optional.Unspecified
+ }
+ };
+
+ await InteractionHelper.SendInteractionResponseAsync(Discord, response, this, Channel, options).ConfigureAwait(false);
+ }
+ else
+ {
+ var attachments = args.Attachments.Value?.ToArray() ?? Array.Empty();
+
+ var response = new API.Rest.UploadInteractionFileParams(attachments)
+ {
+ Type = InteractionResponseType.UpdateMessage,
Content = args.Content,
AllowedMentions = args.AllowedMentions.IsSpecified ? args.AllowedMentions.Value?.ToModel() : Optional.Unspecified,
Embeds = apiEmbeds?.ToArray() ?? Optional.Unspecified,
- Components = args.Components.IsSpecified
+ MessageComponents = args.Components.IsSpecified
? args.Components.Value?.Components.Select(x => new API.ActionRowComponent(x)).ToArray() ?? Array.Empty()
: Optional.Unspecified,
Flags = args.Flags.IsSpecified ? args.Flags.Value ?? Optional.Unspecified : Optional.Unspecified
- }
- };
+ };
+
+ await InteractionHelper.SendInteractionResponseAsync(Discord, response, this, Channel, options).ConfigureAwait(false);
+ }
lock (_lock)
{
@@ -281,7 +304,6 @@ namespace Discord.WebSocket
}
}
- await InteractionHelper.SendInteractionResponseAsync(Discord, response, this, Channel, options).ConfigureAwait(false);
HasResponded = true;
}