Ejemplo n.º 1
0
        public LiveStreamMonitorService(ITwitchAPI api, int secondsBetweenChecks)
        {
            this.api = api;

            //Load the info for streams that have been reported on.
            //string monitoredUsersResult = SaveLoadService.Load(monitoredUsersFilename);
            Dictionary <string, Stream> monitoredChannels = SaveLoadService.Load <Dictionary <string, Stream> >(monitoredUsersFilename);

            if (monitoredChannels == null)
            {
                monitoredChannels = new Dictionary <string, Stream>();
                SaveLoadService.Save(monitoredUsersFilename, monitoredChannels);
            }

            LiveStreams.Clear();
            foreach (var key in monitoredChannels.Keys)
            {
                LiveStreams.TryAdd(key, monitoredChannels[key]);
            }

            // Call the check with the given interval between the calls.
            timer           = new Timer(TimeSpan.FromSeconds(secondsBetweenChecks).TotalMilliseconds);
            timer.AutoReset = true;
            timer.Elapsed  += new ElapsedEventHandler(Tick);
            timer.Start();
        }
Ejemplo n.º 2
0
        /// <summary>
        /// Checks which users are live, along with who has gone offline.
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private async void Tick(object sender, ElapsedEventArgs e)
        {
            if (ticking == true)
            {
                return;
            }
            ticking = true;
            List <string> liveUsers = new List <string>();
            var           s         = await GetStreams();

            if (s != null)
            {
                for (int i = 0; i < s.Length; i++)
                {
                    liveUsers.Add(s[i].UserName);
                    // User is/was live.
                    if (LiveStreams.ContainsKey(s[i].UserName))
                    {
                        // It's the same stream.
                        if (LiveStreams[s[i].UserName].Id == s[i].Id)
                        {
                            LiveStreams[s[i].UserName] = s[i];
                            // Invoke event.
                            OnStreamArgs onStreamUpdateArgs = new OnStreamArgs(s[i].UserName, s[i]);
                            OnStreamUpdate?.Invoke(this, onStreamUpdateArgs);
                            continue;
                        }
                        // Different stream.
                        else
                        {
                            if (LiveStreams.TryRemove(s[i].UserName, out Stream v))
                            {
                                if (LiveStreams.TryAdd(s[i].UserName, s[i]))
                                {
                                    // Invoke event.
                                    OnStreamArgs onStreamOnlineArgs = new OnStreamArgs(s[i].UserName, s[i]);
                                    OnStreamOnline?.Invoke(this, onStreamOnlineArgs);
                                }
                            }
                        }
                    }
                    // User was not live before.
                    else
                    {
                        if (LiveStreams.TryAdd(s[i].UserName, s[i]))
                        {
                            // Invoke event.
                            OnStreamArgs oso = new OnStreamArgs(s[i].UserName, s[i]);
                            OnStreamOnline?.Invoke(this, oso);
                        }
                    }
                }

                Cleanup(liveUsers);
            }
            ticking = false;

            SaveLoadService.Save(monitoredUsersFilename, LiveStreams);
        }
Ejemplo n.º 3
0
        public AutoRolesService(DiscordSocketClient client)
        {
            this.client = client;
            autoRoles   = SaveLoadService.Load <List <AutoRolesGuildDefinition> >(monitoredUsersFilename);
            if (autoRoles == null)
            {
                autoRoles = new List <AutoRolesGuildDefinition>();
                SaveLoadService.Save(monitoredUsersFilename, autoRoles);
            }

            client.UserJoined += OnUserJoinedGuild;
        }
Ejemplo n.º 4
0
        private void UpdateMonitoredChannels()
        {
            // Get all channels we should report on.
            List <string> users = new List <string>();

            foreach (var guild in guilds)
            {
                users.AddRange(guild.users);
            }

            monitorService.AddTrackedUsers(users.Distinct().ToArray());

            SaveLoadService.Save(twitchGuildInfoFilename, guilds);
        }
Ejemplo n.º 5
0
        public TwitchService(DiscordSocketClient client)
        {
            if (!serviceEnabled)
            {
                Console.WriteLine("Twitch service disabled.");
                return;
            }
            this.client = client;
            api         = new TwitchAPI();
            TwitchKeys twitchKeys = SaveLoadService.Load <TwitchKeys>(twitchKeysFilename);

            if (twitchKeys == null)
            {
                twitchKeys = new TwitchKeys();
                SaveLoadService.Save(twitchKeysFilename, twitchKeys);
            }
            api.Settings.AccessToken        = twitchKeys.accessToken;
            api.Settings.ClientId           = twitchKeys.clientID;
            api.Settings.Secret             = twitchKeys.secret;
            monitorService                  = new LiveStreamMonitorService(api, 240);
            monitorService.OnStreamOnline  += OnStreamOnline;
            monitorService.OnStreamOffline += OnStreamOffline;
            LoadData();
        }
Ejemplo n.º 6
0
 public void Save()
 {
     SaveLoadService.Save(monitoredUsersFilename, autoRoles);
 }