/// <summary>
        /// Send a direct message to a user by userId, from the current user (using Options).
        /// </summary>
        /// <param name="userId">The Twitter User Id to send the message to.</param>
        /// <param name="messageText">The Text of the message, should be less than 10,000 chars.</param>
        /// <param name="quickReplies"></param>
        /// <returns></returns>
        public async Task <Result <DirectMessageResult> > SendAsync(long userId, string messageText, IList <string> quickReplies = null)
        {
            if (string.IsNullOrEmpty(messageText))
            {
                throw new TwitterException("You can't send an empty message.");
            }

            if (messageText.Length > 10000)
            {
                throw new TwitterException(
                          "Invalid message, the length of the message should be less than 10000 chars.");
            }

            if (userId == default(long))
            {
                throw new TwitterException("Invalid userId.");
            }

            var resourceUrl = $"https://api.twitter.com/1.1/direct_messages/events/new.json";

            var newDmEvent = new NewDirectMessageObject
            {
                Event = new Event
                {
                    EventType     = "message_create",
                    MessageCreate = new NewEvent_MessageCreate
                    {
                        MessageData = new NewEvent_MessageData {
                            Text = messageText
                        },
                        target = new Target {
                            recipient_id = userId.ToString()
                        }
                    }
                }
            };

            if (quickReplies != null && quickReplies.Any())
            {
                newDmEvent.Event.MessageCreate.MessageData.QuickReply = new NewEvent_QuickReply
                {
                    Options = quickReplies.Select(x => new NewEvent_QuickReplyOption {
                        Label = x
                    }).ToList()
                };
            }
            var jsonObj = JsonConvert.SerializeObject(newDmEvent);

            HttpResponseMessage response;

            using (var client = new HttpClient())
            {
                client.DefaultRequestHeaders.Add("Authorization",
                                                 AuthHeaderBuilder.Build(Options, HttpMethod.Post, resourceUrl));

                response = await client.PostAsync(resourceUrl,
                                                  new StringContent(jsonObj, Encoding.UTF8, "application/json"));
            }

            if (response.StatusCode == HttpStatusCode.OK)
            {
                var msgCreateJson = await response.Content.ReadAsStringAsync();

                var mCreateObj = JsonConvert.DeserializeObject <NewDmResult>(msgCreateJson);
                return(new Result <DirectMessageResult>(mCreateObj.@event));
            }

            var jsonResponse = await response.Content.ReadAsStringAsync();

            if (!string.IsNullOrEmpty(jsonResponse))
            {
                var err = JsonConvert.DeserializeObject <TwitterError>(jsonResponse);
                return(new Result <DirectMessageResult>(err));
            }
            return(new Result <DirectMessageResult>());
        }