public Message ReplyTwitterTweetMessage(int conversationId, int twitterAccountId, string content, bool isCloseConversation = false) { var twitterService = DependencyResolver.Resolve <ITwitterService>(); Conversation conversation = _conversationService.CheckIfExists(conversationId); if (conversation.Source != ConversationSource.TwitterTweet) { throw SocialExceptions.BadRequest("Conversation source must be twitter tweet."); } SocialAccount twitterAccount = _socialAccountService.FindAllWithDeleted().FirstOrDefault(t => t.Id == twitterAccountId); if (twitterAccount != null && twitterAccount.IsDeleted) { twitterAccount = _socialAccountService.FindAll().FirstOrDefault(t => t.SocialUser.OriginalId == twitterAccount.SocialUser.OriginalId); } if (twitterAccount == null) { throw SocialExceptions.BadRequest("Twitter account has been deleted."); } var messages = Repository.FindAll().Include(t => t.Sender).Include(t => t.Receiver).Where(t => t.ConversationId == conversation.Id).ToList(); var previousMessages = messages.Where(t => t.SenderId != twitterAccountId).OrderByDescending(t => t.SendTime); Message replyMessage = null; foreach (var previousMessage in previousMessages) { if (previousMessage.IsDeleted) { continue; } //if (previousMessage.Sender.Type == SocialUserType.IntegrationAccount) //{ // continue; //} ITweet previousTweet = twitterService.GetTweet(twitterAccount, long.Parse(previousMessage.OriginalId)); if (previousTweet != null && !previousTweet.IsTweetDestroyed) { // publish tweet if (!content.Contains("@" + previousTweet.CreatedBy.ScreenName)) { content = "@" + previousTweet.CreatedBy.ScreenName + " " + content; } var replyTweet = twitterService.ReplyTweet(twitterAccount, previousTweet, content); if (replyTweet == null) { continue; } // add message replyMessage = TwitterConverter.ConvertToMessage(replyTweet); replyMessage.ConversationId = conversation.Id; replyMessage.SenderId = twitterAccount.Id; replyMessage.SendAgentId = UserContext.UserId; replyMessage.ReceiverId = previousMessage.Sender.Id; Save(replyMessage, isCloseConversation); break; } } if (replyMessage == null) { throw SocialExceptions.OriginalPostOrTweetHasBeenDeleted(); } return(this.Find(replyMessage.Id)); }
public Message ReplyFacebookPostOrComment(int conversationId, int postOrCommentId, string content, bool isCloseConversation = false) { var conversation = _conversationService.CheckIfExists(conversationId); if (conversation.Source != ConversationSource.FacebookVisitorPost && conversation.Source != ConversationSource.FacebookWallPost) { throw SocialExceptions.BadRequest("Conversation source must be facebook visitor/wall post."); } var messages = Repository.FindAll().Include(t => t.Sender).Include(t => t.Receiver).Where(t => t.ConversationId == conversation.Id).ToList(); var postMessage = messages.FirstOrDefault(t => t.ParentId == null); SocialAccount socialAccount = GetSocialAccountFromMessages(messages); if (socialAccount == null) { throw SocialExceptions.BadRequest("Facebook integration account can't be found from conversation."); } var previousMessages = GetFacebookPreviousMessages(messages, postOrCommentId); Message comment = null; foreach (var previousMessage in previousMessages) { if (previousMessage.IsDeleted) { continue; } bool isReplyToReplyComment = previousMessage.ParentId != null && previousMessage.ParentId != postMessage.Id; if (isReplyToReplyComment) { //todo @current message user continue; } // publish comment string fbCommentId = _fbClient.PublishComment(socialAccount.Token, previousMessage.OriginalId, content); if (string.IsNullOrWhiteSpace(fbCommentId)) { continue; } var fbComment = _fbClient.GetComment(socialAccount.Token, fbCommentId); // add message comment = new Message { ConversationId = conversation.Id, Content = content, SenderId = socialAccount.Id, ReceiverId = previousMessage.SenderId, ParentId = previousMessage.Id, SendAgentId = UserContext.UserId, SendTime = fbComment.created_time, OriginalId = fbCommentId, OriginalLink = fbComment.permalink_url, Source = MessageSource.FacebookPostComment }; if (comment.ParentId != postMessage.Id) { comment.Source = MessageSource.FacebookPostReplyComment; } Save(comment, isCloseConversation); break; } if (comment == null) { throw SocialExceptions.OriginalPostOrTweetHasBeenDeleted(); } return(this.Find(comment.Id)); }