예제 #1
0
 public override void Initialize()
 {
     if (Settings == null)
     {
         Settings = ProjectileDatabase.GetInstance().GetProjectile(FallbackDataId);
     }
     ProjectileStats           = new Dictionary <string, Stat>();
     ProjectileStats["Speed"]  = new Stat(Settings.Speed);
     ProjectileStats["Health"] = new Stat(Settings.Heatlh);
     ProjectileStats["Health"].OnValueChange += delegate(Stat stat)
     {
         if (stat.EffectiveValue <= 0)
         {
             Die();
         }
     };
     OnLive?.Invoke(this);
 }
예제 #2
0
        public async Task CheckStreamerInfoAsync()
        {
            try
            {
                StreamerStatus = await streamerInformation();

                bool isStreaming = StreamerStatus.Stream.Channel != null && (StreamerStatus.Stream.BroadcastPlatform.Contains("other") ? ChannelConfig.Any(x => (bool)x.Value[TRACKRERUN]) : true);
                bool isRerun     = StreamerStatus.Stream?.BroadcastPlatform?.Contains("other") ?? false;

                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;

                            try
                            {
                                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);
                            }
                            catch (Exception e)
                            {
                                await Program.MopsLog(new LogMessage(LogSeverity.Error, "", $" error sending graph by {Name}", e));
                            }

                            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>();
                            GameChanges = new List <Tuple <string, DateTime> >();

                            if (OnOffline != null)
                            {
                                await OnOffline.Invoke(this);
                            }
                            foreach (ulong channel in ChannelConfig.Keys.Where(x => (bool)ChannelConfig[x][OFFLINE] && (isRerun ? (bool)ChannelConfig[x][TRACKRERUN] : true)).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] && (isRerun ? (bool)ChannelConfig[x][TRACKRERUN] : true)).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, StreamerStatus.Stream.CreatedAt.UtcDateTime);
                        GameChanges.Add(Tuple.Create(StreamerStatus.Stream.Game, StreamerStatus.Stream.CreatedAt.UtcDateTime));

                        if (OnLive != null)
                        {
                            await OnLive.Invoke(this);
                        }
                        foreach (ulong channel in ChannelConfig.Keys.Where(x => (bool)ChannelConfig[x][ONLINE] && (isRerun ? (bool)ChannelConfig[x][TRACKRERUN] : true)).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.ToLower().CompareTo(StreamerStatus.Stream.Game.ToLower()) != 0)
                    {
                        CurGame = StreamerStatus.Stream.Game;
                        GameChanges.Add(Tuple.Create(StreamerStatus.Stream.Game, DateTime.UtcNow));
                        await UpdateTracker();

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

                    if (ChannelConfig.Any(x => (bool)x.Value[SHOWGRAPH]))
                    {
                        await ModifyAsync(x => x.ViewerGraph.AddValue(CurGame, StreamerStatus.Stream.Viewers));
                    }

                    foreach (ulong channel in ChannelConfig.Keys.Where(x => (bool)ChannelConfig[x][SHOWEMBED] && (isRerun ? (bool)ChannelConfig[x][TRACKRERUN] : true)).ToList())
                    {
                        await OnMajorChangeTracked(channel, createEmbed((bool)ChannelConfig[channel][THUMBNAIL], (bool)ChannelConfig[channel][SHOWCHAT], (bool)ChannelConfig[channel][SHOWVOD], (bool)ChannelConfig[channel][SHOWGRAPH]));
                    }
                }
            }
            catch (Exception e)
            {
                await Program.MopsLog(new LogMessage(LogSeverity.Error, "", $" error by {Name}", e));
            }
        }
예제 #3
0
        public async Task CheckStreamerInfoAsync()
        {
            try
            {
                StreamerStatus = await streamerInformation();

                bool isStreaming = StreamerStatus.online;

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

                            ViewerGraph?.Dispose();
                            ViewerGraph = null;

                            ToUpdate    = new Dictionary <ulong, ulong>();
                            GameChanges = new List <Tuple <string, DateTime> >();

                            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(600000, 600000);
                        }
                    }
                    else
                    {
                        ViewerGraph = new DatePlot(Name + "Mixer", "Time since start", "Viewers");
                        IsOnline    = true;
                        CurGame     = StreamerStatus.type?.name ?? "Nothing";
                        GameChanges.Add(Tuple.Create(CurGame, DateTime.UtcNow));
                        ViewerGraph.AddValue(CurGame, 0, (await GetBroadcastStartTime()).AddHours(-2));

                        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(60000, 60000);
                    }
                    await UpdateTracker();
                }
                else
                {
                    TimeoutCount = 0;
                }

                if (isStreaming)
                {
                    if (CurGame.CompareTo(StreamerStatus.type?.name ?? "Nothing") != 0)
                    {
                        CurGame = StreamerStatus.type?.name ?? "Nothing";
                        GameChanges.Add(Tuple.Create(CurGame, DateTime.UtcNow));
                        await UpdateTracker();

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

                    if (ChannelConfig.Any(x => (bool)x.Value[SHOWGRAPH]))
                    {
                        await ModifyAsync(x => x.ViewerGraph.AddValue(CurGame, StreamerStatus.viewersCurrent));
                    }

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