public void Init() { _logger.LogInformation("Initializing Stream Announcer"); Task.Run(async() => { while (true) { _logger.LogDebug("Starting stream announcements"); var streamers = _streamerRepository.GetAll(); var liveStreamers = await Announce(streamers); var liveStreamerIds = liveStreamers.Select(ls => ls.Id); var offlineStreamers = streamers.Where(s => !liveStreamerIds.Contains(s.Id)).ToList(); await UpdatePinnedMessage(liveStreamers, offlineStreamers); _logger.LogDebug("Finished stream announcements"); await Task.Delay(TimeSpan.FromSeconds(10)); } }); }
public async Task <ActionResult> Index() { var reviews = _repository.GetAll(); var movies = reviews.Select(r => r.MovieId).Distinct() .Select(id => _movieRepository.GetMovie(id)); await Task.WhenAll(movies).ConfigureAwait(false); var model = new HandleReviewViewModel { Movies = reviews.GroupBy(r => r.MovieId).ToDictionary(r => movies.FirstOrDefault(m => m.Result.imdbID == r.Key).Result, r => r.ToList()) }; return(View(model)); }
public async Task UpdatePinnedMessage(List <Streamer> liveStreamers, List <Streamer> offlineStreamers) { var channel = GetChannel(_discordSettingsRepository.GetAll().FirstOrDefault()?.DiscordChannelId); if (channel == null) { return; } var pinnedMessageId = _pinnedMessageRepository.GetAll().FirstOrDefault()?.MessageId; if (pinnedMessageId == null) { var newPinnedMessage = await channel.SendMessageAsync(string.Empty, embed : EmbedHelper.PinnedMessageEmbedBuilder(liveStreamers, offlineStreamers)); var newPinnedMessageId = await _pinnedMessageRepository.Add(new PinnedMessage { MessageId = newPinnedMessage.Id }); pinnedMessageId = newPinnedMessageId.MessageId; _logger.LogDebug("Created new pinned message"); } if (!(await channel.GetMessageAsync(pinnedMessageId.Value) is RestUserMessage pinnedMessage)) { _logger.LogError("Could not find pinned message!"); return; } await pinnedMessage.ModifyAsync(msg => { msg.Content = string.Empty; msg.Embed = EmbedHelper.PinnedMessageEmbedBuilder(liveStreamers, offlineStreamers); }); }
public async Task <List <Streamer> > Announce(IEnumerable <Streamer> streamers) { var liveStreamers = new List <Streamer>(); foreach (var streamer in streamers) { try { var channel = GetChannel(_discordSettingsRepository.GetAll().FirstOrDefault()?.DiscordChannelId); var user = await _twitchApiHelper.GetUser(streamer.Username); if (user == null) { continue; } var stream = await _twitchApiHelper.GetStream(user); var announcementMessage = _announcementMessageRepository.GetAll() .FirstOrDefault(am => am.Streamer.Id == streamer.Id); if (announcementMessage != null) { if (stream == null || CheckStreamTitle(stream) || stream.GameId != TwitchConstants.GtaGameId) { await RemoveLiveMessage(channel, announcementMessage); } continue; } if (stream == null) { continue; } if (CheckStreamTitle(stream)) { continue; } var message = await channel.SendMessageAsync(string.Empty, embed : EmbedHelper.LiveMessageEmbedBuilder(streamer, user, stream)); await _announcementMessageRepository.Add(new AnnouncementMessages { MessageId = message.Id, Streamer = streamer }); _logger.LogInformation($"Successfully announced streamer [{streamer.Username}]"); } catch (Exception exception) { _logger.LogError(exception, $"Error occured while announcing streamer [{streamer.Username}]: {exception}"); } } return(liveStreamers); }