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(); }