/// <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>()); }