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