public static async Task <IUserMessage> ModifyMessageAsync(this IRestClient client, Snowflake channelId, Snowflake messageId, Action <ModifyMessageActionProperties> action, IRestRequestOptions options = null) { if (action == null) { throw new ArgumentNullException(nameof(action)); } var properties = new ModifyMessageActionProperties(); action(properties); var content = new ModifyMessageJsonRestRequestContent { Content = properties.Content, Embeds = Optional.Convert(properties.Embeds, models => models.Select(x => { x.Validate(); return(x.ToModel()); }).ToArray()), Flags = properties.Flags, AllowedMentions = Optional.Convert(properties.AllowedMentions, x => x.ToModel()), Attachments = Optional.Convert(properties.AttachmentIds, x => x.Select(x => new AttachmentJsonModel { Id = x }).ToArray()), Components = Optional.Convert(properties.Components, models => models.Select(x => { x.Validate(); return(x.ToModel()); }).ToArray()), StickerIds = Optional.Convert(properties.StickerIds, x => x.ToArray()) }; var model = await client.ApiClient.ModifyMessageAsync(channelId, messageId, content, options).ConfigureAwait(false); return(new TransientUserMessage(client, model)); }
public static async Task <IUserMessage> ModifyMessageAsync(this IRestClient client, Snowflake channelId, Snowflake messageId, Action <ModifyMessageActionProperties> action, IRestRequestOptions options = null, CancellationToken cancellationToken = default) { Guard.IsNotNull(action); var properties = new ModifyMessageActionProperties(); action(properties); var messageContent = new ModifyMessageJsonRestRequestContent { Content = properties.Content, Embeds = Optional.Convert(properties.Embeds, models => models.Select(x => { x.Validate(); return(x.ToModel()); }).ToArray()), Flags = properties.Flags, AllowedMentions = Optional.Convert(properties.AllowedMentions, x => x.ToModel()), Attachments = Optional.Convert(properties.AttachmentIds, x => x.Select(x => new AttachmentJsonModel { Id = x }).ToArray()), Components = Optional.Convert(properties.Components, models => models.Select(x => { x.Validate(); return(x.ToModel()); }).ToArray()), StickerIds = Optional.Convert(properties.StickerIds, x => x.ToArray()) }; Task <MessageJsonModel> task; LocalAttachment[] attachments; if (properties.Attachments.TryGetValue(out var attachmentsEnumerable) && (attachments = attachmentsEnumerable.GetArray()).Length != 0) { // If there are attachments, we must send them via multipart HTTP content. // Our `messageContent` will be serialized into a "payload_json" form data field. var content = new MultipartJsonPayloadRestRequestContent <ModifyMessageJsonRestRequestContent>(messageContent, attachments); task = client.ApiClient.ModifyMessageAsync(channelId, messageId, content, options, cancellationToken); }