Exemplo n.º 1
0
        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);
            }