예제 #1
0
        private async Task <TwitchResult> streamerInformation()
        {
            TwitchResult tmpResult = await FetchJSONDataAsync <TwitchResult>($"https://api.twitch.tv/kraken/streams/{TwitchId}?client_id={Program.Config["Twitch"]}", acceptHeader);

            if (tmpResult.stream == null)
            {
                tmpResult.stream = new APIResults.Twitch.Stream();
            }
            if (tmpResult.stream.game == "" || tmpResult.stream.game == null)
            {
                tmpResult.stream.game = "Nothing";
            }

            return(tmpResult);
        }
예제 #2
0
        public async Task CheckStreamerInfoAsync()
        {
            try
            {
                StreamerStatus = await streamerInformation();

                Boolean isStreaming = StreamerStatus.stream.channel != null;

                if (!timerChanged && !IsOnline && (WebhookExpire - DateTime.Now).TotalMinutes >= 60)
                {
                    SetTimer(3600000, StaticBase.ran.Next(5000, 3600000));
                    timerChanged = true;
                }

                if (IsOnline != isStreaming)
                {
                    if (IsOnline)
                    {
                        if (++TimeoutCount >= 3)
                        {
                            TimeoutCount = 0;
                            IsOnline     = false;

                            var pdf = ViewerGraph.DrawPlot(true, $"{Name}-{DateTime.UtcNow.ToString("MM-dd-yy_hh-mm")}");
                            foreach (ulong channel in ChannelConfig.Keys.Where(x => (bool)ChannelConfig[x][SENDPDF]).ToList())
                            {
                                await(Program.Client.GetChannel(channel) as SocketTextChannel).SendFileAsync(pdf, "Graph PDF for personal use:");
                            }
                            File.Delete(pdf);

                            ViewerGraph?.Dispose();
                            ViewerGraph = null;
                            VodUrl      = null;

                            foreach (var channelMessage in ToUpdate)
                            {
                                await Program.ReactionHandler.ClearHandler((IUserMessage)await ((ITextChannel)Program.Client.GetChannel(channelMessage.Key)).GetMessageAsync(channelMessage.Value));
                            }

                            ToUpdate = new Dictionary <ulong, ulong>();

                            if (OnOffline != null)
                            {
                                await OnOffline.Invoke(this);
                            }
                            foreach (ulong channel in ChannelConfig.Keys.Where(x => (bool)ChannelConfig[x][OFFLINE]).ToList())
                            {
                                await OnMinorChangeTracked(channel, $"{Name} went Offline!");
                            }

                            SetTimer(3600000, 3600000);
                        }
                        else if (!IsHosting)
                        {
                            var host = (await hostInformation()).hosts.First();
                            if (host.IsHosting())
                            {
                                if (OnHosting != null)
                                {
                                    await OnHosting.Invoke(host.host_display_name, host.target_display_name, (int)ViewerGraph.PlotDataPoints.LastOrDefault().Value.Value);
                                }

                                foreach (ulong channel in ChannelConfig.Keys.Where(x => (bool)ChannelConfig[x][HOST]).ToList())
                                {
                                    await OnMinorChangeTracked(channel, $"{Name} is now hosting {host.target_display_name} for {(int)ViewerGraph.PlotDataPoints.LastOrDefault().Value.Value} viewers!");
                                }

                                IsHosting = true;
                            }
                        }
                    }
                    else
                    {
                        ViewerGraph = new DatePlot(Name, "Time since start", "Viewers");
                        IsOnline    = true;
                        IsHosting   = false;
                        CurGame     = StreamerStatus.stream.game;
                        ViewerGraph.AddValue(CurGame, 0, DateTime.Parse(StreamerStatus.stream.created_at).AddHours(-1));

                        if (OnLive != null)
                        {
                            await OnLive.Invoke(this);
                        }
                        foreach (ulong channel in ChannelConfig.Keys.Where(x => (bool)ChannelConfig[x][ONLINE]).ToList())
                        {
                            await OnMinorChangeTracked(channel, (string)ChannelConfig[channel]["Notification"]);
                        }

                        SetTimer(120000, 120000);
                    }
                    await UpdateTracker();
                }
                else
                {
                    TimeoutCount = 0;
                }

                if (isStreaming)
                {
                    if (VodUrl == null)
                    {
                        VodUrl = await GetVodAsync();
                    }

                    if (CurGame.CompareTo(StreamerStatus.stream.game) != 0)
                    {
                        CurGame = StreamerStatus.stream.game;
                        //ViewerGraph.AddValue(CurGame, StreamerStatus.stream.viewers);

                        foreach (ulong channel in ChannelConfig.Keys.Where(x => (bool)ChannelConfig[x][GAMECHANGE]).ToList())
                        {
                            await OnMinorChangeTracked(channel, $"{Name} switched games to **{CurGame}**");
                        }
                    }

                    await ModifyAsync(x => x.ViewerGraph.AddValue(CurGame, StreamerStatus.stream.viewers));

                    foreach (ulong channel in ChannelConfig.Keys.Where(x => (bool)ChannelConfig[x][SHOWEMBED]).ToList())
                    {
                        await OnMajorChangeTracked(channel, createEmbed((bool)ChannelConfig[channel][THUMBNAIL], (bool)ChannelConfig[channel][SHOWCHAT], (bool)ChannelConfig[channel][SHOWVOD]));
                    }
                }
            }
            catch (Exception e)
            {
                await Program.MopsLog(new LogMessage(LogSeverity.Error, "", $" error by {Name}", e));
            }
        }