public Task <IUserMessage> SendAsync(
            LocalInteractionFollowup followup,
            IRestRequestOptions options = null, CancellationToken cancellationToken = default)
        {
            var client = Interaction.GetRestClient();

            return(client.CreateInteractionFollowupAsync(Interaction.ApplicationId, Interaction.Token, followup, options, cancellationToken));
        }
        public static async Task <IUserMessage> CreateInteractionFollowupAsync(this IRestClient client,
                                                                               Snowflake applicationId, string interactionToken, LocalInteractionFollowup followup,
                                                                               IRestRequestOptions options = null, CancellationToken cancellationToken = default)
        {
            Guard.IsNotNull(followup);

            followup.Validate();
            var messageContent = new CreateFollowupMessageJsonRestRequestContent
            {
                Content         = Optional.FromNullable(followup.Content),
                Tts             = Optional.Conditional(followup.IsTextToSpeech, true),
                Embeds          = Optional.Conditional(followup.Embeds.Count != 0, x => x.Select(x => x.ToModel()).ToArray(), followup.Embeds),
                AllowedMentions = Optional.FromNullable(followup.AllowedMentions.ToModel()),
                Components      = Optional.Conditional(followup.Components.Count != 0, x => x.Select(x => x.ToModel()).ToArray(), followup.Components),
                Flags           = followup.Flags
            };

            Task <MessageJsonModel> task;

            if (followup.Attachments.Count != 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 <CreateFollowupMessageJsonRestRequestContent>(messageContent, followup.Attachments);
                task = client.ApiClient.CreateFollowupInteractionResponseAsync(applicationId, interactionToken, content, options, cancellationToken);
            }
            else
            {
                task = client.ApiClient.CreateFollowupInteractionResponseAsync(applicationId, interactionToken, messageContent, options, cancellationToken);
            }

            var model = await task.ConfigureAwait(false);

            return(new TransientUserMessage(client, model));
        }