feat: Add support for attachments on interaction response type 7 (#2336)
* Add support for attachments on interaction response type 7 * Add missing checks
This commit is contained in:
@@ -226,8 +226,12 @@ namespace Discord.WebSocket
|
||||
|
||||
bool hasText = args.Content.IsSpecified ? !string.IsNullOrEmpty(args.Content.Value) : !string.IsNullOrEmpty(Message.Content);
|
||||
bool hasEmbeds = embed.IsSpecified && embed.Value != null || embeds.IsSpecified && embeds.Value?.Length > 0 || Message.Embeds.Any();
|
||||
bool hasComponents = args.Components.IsSpecified && args.Components.Value != null;
|
||||
bool hasAttachments = args.Attachments.IsSpecified;
|
||||
bool hasFlags = args.Flags.IsSpecified;
|
||||
|
||||
if (!hasText && !hasEmbeds)
|
||||
// No content needed if modifying flags
|
||||
if ((!hasComponents && !hasText && !hasEmbeds && !hasAttachments) && !hasFlags)
|
||||
Preconditions.NotNullOrEmpty(args.Content.IsSpecified ? args.Content.Value : string.Empty, nameof(args.Content));
|
||||
|
||||
var apiEmbeds = embed.IsSpecified || embeds.IsSpecified ? new List<API.Embed>() : null;
|
||||
@@ -261,6 +265,8 @@ namespace Discord.WebSocket
|
||||
}
|
||||
}
|
||||
|
||||
if (!args.Attachments.IsSpecified)
|
||||
{
|
||||
var response = new API.InteractionResponse
|
||||
{
|
||||
Type = InteractionResponseType.UpdateMessage,
|
||||
@@ -276,6 +282,25 @@ namespace Discord.WebSocket
|
||||
}
|
||||
};
|
||||
|
||||
await InteractionHelper.SendInteractionResponseAsync(Discord, response, this, Channel, options).ConfigureAwait(false);
|
||||
}
|
||||
else
|
||||
{
|
||||
var response = new API.Rest.UploadInteractionFileParams(args.Attachments.Value.ToArray())
|
||||
{
|
||||
Type = InteractionResponseType.UpdateMessage,
|
||||
Content = args.Content,
|
||||
AllowedMentions = args.AllowedMentions.IsSpecified ? args.AllowedMentions.Value?.ToModel() : Optional<API.AllowedMentions>.Unspecified,
|
||||
Embeds = apiEmbeds?.ToArray() ?? Optional<API.Embed[]>.Unspecified,
|
||||
MessageComponents = args.Components.IsSpecified
|
||||
? args.Components.Value?.Components.Select(x => new API.ActionRowComponent(x)).ToArray() ?? Array.Empty<API.ActionRowComponent>()
|
||||
: Optional<API.ActionRowComponent[]>.Unspecified,
|
||||
Flags = args.Flags.IsSpecified ? args.Flags.Value ?? Optional<MessageFlags>.Unspecified : Optional<MessageFlags>.Unspecified
|
||||
};
|
||||
|
||||
await InteractionHelper.SendInteractionResponseAsync(Discord, response, this, Channel, options).ConfigureAwait(false);
|
||||
}
|
||||
|
||||
lock (_lock)
|
||||
{
|
||||
if (HasResponded)
|
||||
@@ -284,7 +309,6 @@ namespace Discord.WebSocket
|
||||
}
|
||||
}
|
||||
|
||||
await InteractionHelper.SendInteractionResponseAsync(Discord, response, this, Channel, options).ConfigureAwait(false);
|
||||
HasResponded = true;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user