コード例 #1
0
        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));
                }
            });
        }
コード例 #2
0
        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));
        }
コード例 #3
0
        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);
            });
        }
コード例 #4
0
        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);
        }