Example #1
0
        /// <summary>Downloads recent followers from Twitch, starts service, fires OnServiceStarted event.</summary>
        public async Task StartService()
        {
            if (ChannelData == null)
            {
                throw new UninitializedChannelDataException("ChannelData must be set before starting the FollowerService. Use SetChannelByName() or SetChannelById()");
            }

            if (ChannelIdentifier == Enums.ChannelIdentifierType.Username)
            {
                var response = await TwitchAPI.Follows.v3.GetFollowers(ChannelData, QueryCount);

                foreach (var follower in response.Followers)
                {
                    ActiveCache.Add(follower.User.Name);
                }
            }
            else
            {
                var response = await TwitchAPI.Channels.v5.GetChannelFollowers(ChannelData, QueryCount);

                foreach (var follower in response.Follows)
                {
                    ActiveCache.Add(follower.User.Name);
                }
            }

            _followerServiceTimer.Start();
            OnServiceStarted?.Invoke(this,
                                     new OnServiceStartedArgs {
                ChannelIdentifier = ChannelIdentifier, ChannelData = ChannelData, CheckIntervalSeconds = CheckIntervalSeconds, QueryCount = QueryCount
            });
        }
Example #2
0
        public static T GetFromCache <T>(this TagIdent identifier, CacheKey cacheKey, bool skipCache = false) where T : GuerillaBlock
        {
            ActiveCache = Index[cacheKey];
            var item = ActiveCache.Deserialize <T>(identifier);

            return(item);
        }
Example #3
0
        private async void _followerServiceTimerElapsed(object sender, ElapsedEventArgs e)
        {
            Models.API.Follow.FollowersResponse response;
            try
            {
                response = await TwitchApi.Follows.GetFollowersAsync(Channel, QueryCount);
            }
            catch (WebException)
            {
                //Logging.Log("Twitch API is unavailable. Skipping FollowerService iteration...");
                return;
            }
            List <Models.API.Follow.Follower> mostRecentFollowers = response.Followers;
            List <Models.API.Follow.Follower> newFollowers        = new List <Models.API.Follow.Follower>();

            foreach (Models.API.Follow.Follower recentFollower in mostRecentFollowers)
            {
                bool found = false;
                foreach (Models.API.Follow.Follower cachedFollower in ActiveCache)
                {
                    if (recentFollower.User.Name.ToLower() == cachedFollower.User.Name.ToLower())
                    {
                        found = true;
                    }
                }
                if (!found)
                {
                    newFollowers.Add(recentFollower);
                }
            }

            // Check for new followers
            if (newFollowers.Count > 0)
            {
                // add new followers to active cache
                ActiveCache.AddRange(newFollowers);

                // prune cache so we don't use too much space unnecessarily
                if (ActiveCache.Count > CacheSize)
                {
                    ActiveCache = ActiveCache.GetRange(ActiveCache.Count - (CacheSize + 1), CacheSize);
                }

                // Invoke new followers event
                OnNewFollowersDetected?.Invoke(this,
                                               new OnNewFollowersDetectedArgs
                {
                    Channel = Channel,
                    CheckIntervalSeconds = CheckIntervalSeconds,
                    QueryCount           = QueryCount,
                    NewFollowers         = newFollowers
                });
            }
        }
Example #4
0
        private async void _followerServiceTimerElapsed(object sender, ElapsedEventArgs e)
        {
            FollowersResponse response = await TwitchApi.GetTwitchFollowers(Channel, QueryCount);

            List <Follower> mostRecentFollowers = response.Followers;
            List <Follower> newFollowers        = new List <Follower>();

            if (ActiveCache == null)
            {
                ActiveCache  = mostRecentFollowers;
                newFollowers = ActiveCache;
            }
            else
            {
                foreach (Follower recentFollower in mostRecentFollowers)
                {
                    bool found = false;
                    foreach (Follower cachedFollower in ActiveCache)
                    {
                        if (recentFollower.User.Name.ToLower() == cachedFollower.User.Name.ToLower())
                        {
                            found = true;
                        }
                    }
                    if (!found)
                    {
                        newFollowers.Add(recentFollower);
                    }
                }

                // Check for new followers
                if (newFollowers.Count > 0)
                {
                    // add new followers to active cache
                    ActiveCache.AddRange(newFollowers);

                    // prune cache so we don't use too much space unnecessarily
                    if (ActiveCache.Count > CacheSize)
                    {
                        ActiveCache = ActiveCache.GetRange(ActiveCache.Count - (CacheSize + 1), CacheSize);
                    }

                    // Invoke new followers event
                    OnNewFollowersDetected?.Invoke(this,
                                                   new OnNewFollowersDetectedArgs {
                        Channel = Channel, CheckIntervalSeconds = CheckIntervalSeconds, QueryCount = QueryCount, NewFollowers = newFollowers
                    });
                }
            }
        }
Example #5
0
        private async void _followerServiceTimerElapsed(object sender, ElapsedEventArgs e)
        {
            List <string> mostRecentFollowers = new List <string>();

            try
            {
                if (ChannelIdentifier == Enums.ChannelIdentifierType.Username)
                {
                    var followers = await TwitchAPI.Follows.v3.GetFollowers(ChannelData, QueryCount);

                    foreach (var follower in followers.Followers)
                    {
                        mostRecentFollowers.Add(follower.User.Name);
                    }
                }
                else
                {
                    var followers = await TwitchAPI.Channels.v5.GetChannelFollowers(ChannelData, QueryCount);

                    foreach (var follower in followers.Follows)
                    {
                        mostRecentFollowers.Add(follower.User.Name);
                    }
                }
            }
            catch (WebException)
            {
                return;
            }
            List <string> newFollowers = new List <string>();

            foreach (var recentFollower in mostRecentFollowers)
            {
                bool found = false;
                foreach (var cachedFollower in ActiveCache)
                {
                    if (recentFollower == cachedFollower)
                    {
                        found = true;
                    }
                }
                if (!found)
                {
                    newFollowers.Add(recentFollower);
                }
            }

            // Check for new followers
            if (newFollowers.Count > 0)
            {
                // add new followers to active cache
                ActiveCache.AddRange(newFollowers);

                // prune cache so we don't use too much space unnecessarily
                if (ActiveCache.Count > CacheSize)
                {
                    ActiveCache = ActiveCache.GetRange(ActiveCache.Count - (CacheSize + 1), CacheSize);
                }

                // Invoke new followers event
                OnNewFollowersDetected?.Invoke(this,
                                               new OnNewFollowersDetectedArgs
                {
                    ChannelIdentifier    = ChannelIdentifier,
                    ChannelData          = ChannelData,
                    CheckIntervalSeconds = CheckIntervalSeconds,
                    QueryCount           = QueryCount,
                    NewFollowers         = newFollowers
                });
            }
        }