Ejemplo n.º 1
0
        private void Monitor_OnStreamOnline(object sender, OnStreamOnlineArgs args)
        {
            if (_config.Value.SkipActiveStreamsOnStartup && DateTime.Now < _startNotificationTime)
            {
                _logger.LogInformation($"Skipping Active Stream {args.Channel}");
                return;
            }

            _logger.LogInformation($"channel: {args.Channel}");
            var message = _config.Value.TwitchChannels
                          .Where(
                a => a.Channel.Equals(args.Channel, StringComparison.InvariantCultureIgnoreCase))
                          .FirstOrDefault()
                          .Message;

            var user = _twitchApi.Helix.Users
                       .GetUsersAsync(logins: new List <string>()
            {
                args.Channel
            })
                       .GetAwaiter()
                       .GetResult()
                       .Users
                       .FirstOrDefault();

            var webhookMessage = new WebhookMessage();

            try
            {
                webhookMessage.Content = ParseMessage(message, args);
                _logger.LogInformation($"Message: {webhookMessage.Content}");
            }
            catch (System.Exception e)
            {
                _logger.LogCritical(e, $"Unable to parse message: {e.Message}");
                return;
            }

            string        tags     = string.Empty;
            List <string> tagsList = new List <string>();

            try
            {
                var tagsResult = _twitchApi.Helix.Streams
                                 .GetStreamTagsAsync(args.Stream.UserId)
                                 .GetAwaiter()
                                 .GetResult()
                                 .Data;
                foreach (var tag in tagsResult)
                {
                    string localizedTag;
                    if (tag.LocalizationNames.TryGetValue("en-us", out localizedTag))
                    {
                        tagsList.Add(localizedTag);
                    }
                }
                tags = string.Join(", ", tagsList);
            }
            catch (System.Exception e)
            {
                _logger.LogCritical(e, $"Unable to retrieve tags: {e.Message}");
            }

            webhookMessage.Embeds = new List <IMessageEmbed>()
            {
                new MessageEmbed()
                {
                    Author = new MessageEmbedAuthor()
                    {
                        Name    = args.Stream.UserName,
                        IconUrl = user.ProfileImageUrl,
                        Url     = $"https://twitch.tv/{args.Channel}"
                    },
                    // Hex 9B59B6 "Dark Purple"
                    Color     = 10181046,
                    Title     = args.Stream.Title,
                    Url       = $"https://twitch.tv/{args.Channel}",
                    Type      = MessageEmbedType.rich,
                    Thumbnail = new MessageEmbedImage()
                    {
                        Url    = user.ProfileImageUrl,
                        Height = 300,
                        Width  = 300
                    },
                    Image = new MessageEmbedImage()
                    {
                        Url    = args.Stream.ThumbnailUrl.Replace("{width}", "320").Replace("{height}", "180") + "?" + DateTime.UtcNow.ToFileTimeUtc().ToString(),
                        Height = 180,
                        Width  = 320
                    },
                    Fields = new List <IMessageEmbedField>()
                    {
                        new MessageEmbedField()
                        {
                            IsInline = true,
                            Name     = "Game",
                            Value    = GetGame(args.Stream.GameId).Name
                        },
                        new MessageEmbedField()
                        {
                            IsInline = true,
                            Name     = "Viewers",
                            Value    = args.Stream.ViewerCount.ToString()
                        },
                        new MessageEmbedField()
                        {
                            IsInline = true,
                            Name     = "Tags",
                            Value    = tags
                        }
                    },
                    Timestamp = DateTime.UtcNow
                }
            };

            _webhookService.SendMessageAsync(webhookMessage).GetAwaiter().GetResult();
        }