Ejemplo n.º 1
0
        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));
            }
        }
Ejemplo n.º 2
0
        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));
            }
        }
Ejemplo n.º 3
0
        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;
            }
        }