public async Task <IActionResult> SendPrivateReplyAsync([FromServices] Func <string, IVideoDetailService> videoService, string pageId, string videoId, string fbId, string commentId) { if (!ModelState.IsValid || String.IsNullOrEmpty(pageId) || String.IsNullOrEmpty(videoId) || String.IsNullOrEmpty(fbId) || String.IsNullOrEmpty(commentId)) { return(BadRequest()); } try { _videoDetailService = videoService(videoId); bool result = false; object username = string.Empty; if (HttpContext.Items.TryGetValue("username", out username)) { var filter = Builders <AccountModel> .Filter.Eq("Username", username); var account = _accountService.FindAsync(() => filter).Result.FirstOrDefault(); if (account != null && account.PageTokens != null) { var pageToken = account.PageTokens.FirstOrDefault(); var videoFilter = Builders <PageModel> .Filter.Eq("PageId", pageId) & Builders <PageModel> .Filter.ElemMatch(e => e.Videos, Builders <VideoModel> .Filter.Eq("VideoId", videoId)); var page = _pageService.FindAsync(() => videoFilter).Result.FirstOrDefault(); if (page == null || page.Videos == null || page.Videos.Count < 0) { return(StatusCode(StatusCodes.Status400BadRequest)); } var video = page.Videos.Where(i => i.VideoId.Equals(videoId.Trim())).FirstOrDefault(); var body = video.ReplyTemplate.ToModelReq(); body.Recipient.CommentId = commentId; result = await _commentService.SendPrivateReplyAsync(body, pageToken.AccessToken); if (result) { var videoDetailFilter = Builders <VideoDetailModel> .Filter.Eq("FbId", fbId) & Builders <VideoDetailModel> .Filter.ElemMatch(e => e.Comments, Builders <CommentModel> .Filter.Eq("CommentId", commentId)); var videoDetailUpdate = Builders <VideoDetailModel> .Update.Set(c => c.Comments[-1].IsSendWhenDetectedGoodWordResult, true); await _videoDetailService.UpdateOneAsync(() => videoDetailFilter, () => videoDetailUpdate); } } } return(Ok(new { message = result ? "Success." : "Failed." })); } catch (System.Exception) { return(StatusCode(StatusCodes.Status500InternalServerError)); } }
public async Task <IActionResult> HiddenComment([FromServices] Func <string, IVideoDetailService> videoService, string videoId, string fbId, string commentId, bool isHidden = true) { if (!ModelState.IsValid || String.IsNullOrEmpty(videoId) || String.IsNullOrEmpty(fbId) || String.IsNullOrEmpty(commentId)) { return(BadRequest()); } try { _videoDetailService = videoService(videoId); bool result = false; object username = string.Empty; if (HttpContext.Items.TryGetValue("username", out username)) { var accountFilter = Builders <AccountModel> .Filter.Eq("Username", username); var account = _accountService.FindAsync(() => accountFilter).Result.FirstOrDefault(); if (account != null && account.PageTokens != null) { var pageToken = account.PageTokens.FirstOrDefault(); if (pageToken != null && pageToken.IsValid == true && !String.IsNullOrEmpty(pageToken.AccessToken)) { result = await _commentService.HiddenCommentAsync(commentId, pageToken.AccessToken, isHidden); if (result) { var videoDetailFilter = Builders <VideoDetailModel> .Filter.Eq("FbId", fbId) & Builders <VideoDetailModel> .Filter.ElemMatch(e => e.Comments, Builders <CommentModel> .Filter.Eq("CommentId", commentId)); var videoDetailUpdate = Builders <VideoDetailModel> .Update.Set(c => c.Comments[-1].IsHiddenResult, isHidden); await _videoDetailService.UpdateOneAsync(() => videoDetailFilter, () => videoDetailUpdate); } } } } return(Ok(new { status = result ? 1 : 0, message = result ? "Success." : "Failed." })); } catch (System.Exception) { return(StatusCode(StatusCodes.Status500InternalServerError)); } }
public async Task StreamingPipelineAsync(IVideoDetailService videoDetailService, string Id, string Token) { try { await _facebookApi.VideoStreamingAsync(Id, Token, async (body) => { PageInfoResponse objPageInfo = await _facebookApi.GetPageInfoAsync(Token); var lstCategory = new List <CategoryModel>(); foreach (var catergory in objPageInfo.Categories) { lstCategory.Add(new CategoryModel() { CategoryId = catergory.CategoryId, CategoryName = catergory.CategoryName }); } PageModel model = new PageModel() { PageId = objPageInfo.PageId, PageName = objPageInfo.PageName, Categories = lstCategory, About = objPageInfo.About, Address = objPageInfo.Address, Link = objPageInfo.Link, Emails = objPageInfo.Emails, Website = objPageInfo.Website, FanCount = objPageInfo.FanCount, CheckinCount = objPageInfo.CheckinCount, CanCheckin = objPageInfo.CanCheckin, NewLikeCount = objPageInfo.NewLikeCount, CanPost = objPageInfo.CanPost, Videos = new List <VideoModel>() }; var pagesModel = _pageRepository.FindAsync(() => Builders <PageModel> .Filter.Eq("PageId", objPageInfo.PageId)).Result.FirstOrDefault(); if (pagesModel == null) { await _pageRepository.InsertOneAsync(model); } List <string> lstPhone = new List <string>(); ReplyTemplateModel replyTemplate = new ReplyTemplateModel(); bool IsSendWhenDetectedPhone = false; bool IsSendWhenDetectedGoodWord = false; bool IsDeleteWhenDetectedBadWord = false; bool IsHidden = false; bool IsHiddenWhenNegSentiment = false; bool IsSendWhenDetectedPhoneResult = false; bool IsSendWhenDetectedGoodWordResult = false; bool IsDeleteWhenDetectedBadWordResult = false; bool IsHiddenResult = false; Match objBadWord = null; Match objGoodWord = null; VideoDetailModel videoModel = null; List <string> lstBadWord = null; List <string> lstGoodWord = null; if (pagesModel.Videos != null && pagesModel.Videos.Count > 0) { foreach (var video in pagesModel.Videos) { if (video.VideoId.Equals(Id)) { lstBadWord = video.BadWords; lstGoodWord = video.GoodWords; IsSendWhenDetectedPhone = video.IsSendWhenDetectedPhone; IsSendWhenDetectedGoodWord = video.IsSendWhenDetectedGoodWord; IsDeleteWhenDetectedBadWord = video.IsDeleteWhenDetectedBadWord; IsHidden = video.IsHidden; IsHiddenWhenNegSentiment = video.IsHiddenWhenNegSentiment; replyTemplate = video.ReplyTemplate; replyTemplate.Recipient.CommentId = body.Id; break; } } } //1. Detect phone number. foreach (Match phone in Regex.Matches(body.Message.Trim(), @"0\d{9}")) { lstPhone.Add(phone.Value); } if (lstPhone != null && lstPhone.Count > 0) { if (IsSendWhenDetectedPhone == true) { IsSendWhenDetectedPhoneResult = await _facebookApi.SendPrivateReplyAsync(replyTemplate.ToModelReq(), Token); } if (IsHidden == true && IsHiddenResult == false) { //IsHiddenResult = await _facebookApi.HiddenCommentAsync(body.Id, Token, true); IsHiddenResult = await _facebookApi.DeleteCommentAsync(body.Id, Token); } } //2. Sentiment NLP if (IsHiddenWhenNegSentiment && IsHiddenResult == false) { if (_sentimentNLPApi.SentimentNLP(body.Message.Trim()).Result) { //IsHiddenResult = await _facebookApi.HiddenCommentAsync(body.Id, Token, true); IsHiddenResult = await _facebookApi.DeleteCommentAsync(body.Id, Token); } } //3. Detect bad word and delete comment. if (lstBadWord != null) { if (IsDeleteWhenDetectedBadWord == true) { foreach (string badWord in lstBadWord) { objBadWord = Regex.Match(body.Message.Trim().ToLower(), badWord.Trim().ToLower()); if (objBadWord.Success) { IsDeleteWhenDetectedBadWordResult = await _facebookApi.DeleteCommentAsync(body.Id, Token); } } } } //4. Detect good word and send private reply if (lstGoodWord != null) { if (IsSendWhenDetectedGoodWord == true) { foreach (string goodWord in lstGoodWord) { objGoodWord = Regex.Match(body.Message.Trim().ToLower(), goodWord.Trim().ToLower()); if (objGoodWord.Success) { IsSendWhenDetectedGoodWordResult = await _facebookApi.SendPrivateReplyAsync(replyTemplate.ToModelReq(), Token); } } } } //5. Insert or Update new document. videoModel = videoDetailService.FindAsync(() => Builders <VideoDetailModel> .Filter.Eq("FbId", body.From.Id)).Result.FirstOrDefault(); var commentModel = new CommentModel() { CommentId = body.Id, Message = body.Message, IsSendWhenDetectedPhoneResult = IsSendWhenDetectedPhoneResult, IsSendWhenDetectedGoodWordResult = IsSendWhenDetectedGoodWordResult, IsDeleteWhenDetectedBadWordResult = IsDeleteWhenDetectedBadWordResult, IsHiddenResult = IsHiddenResult, CreatedTime = body.CreatedTime }; if (videoModel == null) { videoModel = new VideoDetailModel(); videoModel.FbId = body.From.Id; videoModel.FbName = body.From.Name; videoModel.Phones = lstPhone; videoModel.Comments.Add(commentModel); await videoDetailService.InsertOneAsync(videoModel); } else { if (lstPhone != null && lstPhone.Count > 0) { foreach (string phone in lstPhone) { videoModel.Phones.Add(phone); } } videoModel.Comments.Add(commentModel); await videoDetailService.UpdateOneAsync(() => Builders <VideoDetailModel> .Filter.Eq("FbId", body.From.Id), () => Builders <VideoDetailModel> .Update.Set("Comments", videoModel.Comments).Set("Phones", videoModel.Phones)); } }); } catch (HttpRequestException ex) { throw ex; } catch (Exception ex) { throw ex; } }