/// <summary> /// Check the chatter list for any followers or subscribers /// </summary> /// <returns></returns> private async Task CheckChatterFollowersSubscribers() { try { // Wait until chatter lists are available while (!_twitchChatterListInstance.AreListsAvailable) { Thread.Sleep(500); } IEnumerable <string> availableChatters = _twitchChatterListInstance.ChattersByName; if (availableChatters == null || availableChatters.Count() == 0) { return; } _rankList = await _follower.GetRankList(_broadcasterId); if (_rankList == null) { _rankList = await _follower.CreateDefaultRanks(_broadcasterId); } // Check for existing or new followers/subscribers for (int i = 0; i < availableChatters.Count(); i++) { string chatter = availableChatters.ElementAt(i); // skip bot and broadcaster if (string.Equals(chatter, _botConfig.BotName, StringComparison.CurrentCultureIgnoreCase) || string.Equals(chatter, _botConfig.Broadcaster, StringComparison.CurrentCultureIgnoreCase)) { continue; } // get chatter info RootUserJSON rootUserJSON = await _twitchInfo.GetUsersByLoginName(chatter); string userTwitchId = rootUserJSON.Users.FirstOrDefault()?.Id; // skip chatter if Twitch ID is missing if (string.IsNullOrEmpty(userTwitchId)) { continue; } // check for follower and/or subscriber and add then to their respective lists await CheckFollower(chatter, userTwitchId); await CheckSubscriber(chatter, userTwitchId); } } catch (Exception ex) { Console.WriteLine($"Error inside FollowerSubscriberListener.CheckChatterFollowersSubscribers(): {ex.Message}"); if (ex.InnerException != null) { Console.WriteLine($"Inner Exception: {ex.InnerException.Message}"); } } }