public async Task Execute(FilterDefinition <Notification> filter, CrawlingData crawlingData) { var notifications = await Get(filter); foreach (var notification in notifications) { if (!notification.ContainsKeyword(crawlingData.Title)) { continue; } if (notification.FilteredTime(DateTime.Now)) { continue; } switch (notification.Type) { case NotificationType.Discord: _discordWebHooks.Add(DiscordNotify(notification, crawlingData)); break; case NotificationType.Slack: _slackWebHooks.Add(SlackNotify(notification, crawlingData)); break; default: throw new DeveloperException(ResultCode.NotImplementedYet); } } }
protected async Task OnCrawlData(CrawlingData crawlingData) { if (MongoDbCrawlingData == null) { return; } // 글자 뒤의 공백 날리기 crawlingData.Title = crawlingData.Title.TrimEnd(); // 현재시간보다 크다면, 시간만 담긴 데이터에서 전날 글에 대한 시간 + 오늘 날짜로 값이 들어와서 그런 것. 이에 대한 예외처리 if (crawlingData.DateTime > DateTime.Now) { crawlingData.DateTime = crawlingData.DateTime.AddDays(-1); } var builder = Builders <CrawlingData> .Filter; var filter = builder.Eq(x => x.Type, crawlingData.Type); filter &= builder.Eq(x => x.BoardId, crawlingData.BoardId); if (crawlingData.RowId.HasValue) { filter &= builder.Eq(x => x.RowId, crawlingData.RowId.Value); } else { filter &= Builders <CrawlingData> .Filter.Eq(x => x.Href, crawlingData.Href); } await MongoDbCrawlingData.UpsertAsync(filter, crawlingData, async (crawlingData) => { if (OnCrawlDataDelegate != null) { await OnCrawlDataDelegate.Invoke(crawlingData); } }); }
public async Task OnNewCrawlData(CrawlingData crawlingData) { await _notificationService.Execute(Builders <Notification> .Filter.Eq(x => x.SourceId, crawlingData.SourceId), crawlingData); }
private Protocols.Notification.Request.DiscordWebHook DiscordNotify(Notification notification, CrawlingData crawlingData) { var category = string.IsNullOrEmpty(crawlingData.Category) ? string.Empty : $"<{crawlingData.Category}>"; return(new Protocols.Notification.Request.DiscordWebHook { username = notification.Name, avatar_url = notification.IconUrl, content = $"[{category}{crawlingData.Title}]({crawlingData.Href}) <{crawlingData.DateTime}>", HookUrl = notification.HookUrl }); }
private Protocols.Notification.Request.SlackWebHook SlackNotify(Notification notification, CrawlingData crawlingData) { var category = string.IsNullOrEmpty(crawlingData.Category) ? string.Empty : $"[{crawlingData.Category}]"; return(new Protocols.Notification.Request.SlackWebHook { username = notification.Name, channel = notification.Channel, icon_url = notification.IconUrl, text = $"<{crawlingData.Href}|{category}{crawlingData.Title}> [{crawlingData.DateTime}]", HookUrl = notification.HookUrl }); }