示例#1
0
        private static KeyValuePair <DateTime, List <ZkbResponse.ZkbKill> > GetZKBResponse(long corpId, DateTime startTime, ZKBType type)
        {
            ZkbResponse                Kills;
            ZKillboard                 kb      = new ZKillboard();
            ZKillboardOptions          Options = new ZKillboardOptions();
            List <ZkbResponse.ZkbKill> OrderedKills;

            Options.CorporationId.Add(corpId);

            if (startTime > DateTime.MinValue)
            {
                Options.StartTime = startTime;
            }
            if (Properties.Settings.Default.Debug)
            {
                SendPM(string.Format("Using StartTime {0}.", startTime.ToString("yyyy-MM-dd HH:mm:ss")));
            }

            if (type == ZKBType.Kill)
            {
                Kills = kb.GetKills(Options);
            }
            else
            {
                Kills = kb.GetLosses(Options);
            }
            OrderedKills = Kills.OrderBy(Kill => Kill.KillTime).ToList();

            return(new KeyValuePair <DateTime, List <ZkbResponse.ZkbKill> >(OrderedKills.Last().KillTime, OrderedKills));
        }
示例#2
0
        private void CheckKills()
        {
            ZKillboard        kb      = new ZKillboard();
            ZKillboardOptions Options = new ZKillboardOptions();

            Options.CorporationId.Add(98389365);
            Options.StartTime = new DateTime(2015, 04, 01);

            ZkbResponse Kills;  // = kb.GetKills(Options);
            ZkbResponse Losses; // = kb.GetLosses(Options);

            string thing = Properties.Settings.Default.TestThis;

            try
            {
                Kills  = kb.GetKills(Options);
                Losses = kb.GetLosses(Options);

                foreach (ZkbResponse.ZkbKill Kill in Kills)
                {
                    textBox2.Text = string.Concat(textBox2.Text, "R3MUS KILL at  ", Kill.KillTime.ToString(), Environment.NewLine);
                    textBox2.Text = string.Concat(textBox2.Text, "Victim: ", Kill.Victim.CharacterName, " lost a ", GetProductType(Kill.Victim.ShipTypeId).Name, Environment.NewLine);
                    foreach (ZkbResponse.ZkbAttacker Attacker in Kill.Attackers)
                    {
                        if (Attacker.FinalBlow == "1")
                        {
                            textBox2.Text = string.Concat(textBox2.Text, "Last Blow: ", Attacker.CharacterName, Environment.NewLine);
                        }
                        if (Attacker.CorporationId == 98389365)
                        {
                            textBox2.Text = string.Concat(textBox2.Text, "Wolf ", Attacker.CharacterName, " got on the board in a ", GetProductType(Attacker.ShipTypeId).Name, "!", Environment.NewLine);
                        }
                    }
                    if (Kill.Stats != null)
                    {
                        textBox2.Text = string.Concat(textBox2.Text, "Loss: ", Kill.Stats.TotalValue.ToString(), Environment.NewLine);
                    }
                    else
                    {
                        textBox2.Text = string.Concat(textBox2.Text, "Loss value not obtainable.", Environment.NewLine);
                    }
                }
            }
            catch (Exception ex)
            {
            }
        }
示例#3
0
        public static async Task Stats(ICommandContext context, string commandText)
        {
            if (!SettingsManager.GetBool("config", "moduleStats"))
            {
                return;
            }

            try
            {
                var    now      = DateTime.Now;
                var    today    = DateTime.Today;
                var    comms    = commandText.Split(' ').ToList();
                var    isSingle = comms.Count == 1;
                var    command  = string.IsNullOrEmpty(commandText) ? "t" : comms[0].ToLower();
                string entity   = null;
                if (!isSingle)
                {
                    comms.RemoveAt(0);
                    entity = string.Join(' ', comms);
                }

                var requestHandler = new ZkbRequestHandler(new JsonSerializer("yyyy-MM-dd HH:mm:ss"));
                //TODO introduce own variables and may be even settings section
                var allyId = SettingsManager.GetLong("statsModule", "autodailyStatsDefaultAlliance");
                if (!string.IsNullOrEmpty(entity))
                {
                    allyId = (await APIHelper.ESIAPI.SearchAllianceId("Stats", entity))?.alliance?.FirstOrDefault() ?? 0;
                }
                var corpId = SettingsManager.GetLong("statsModule", "autoDailyStatsDefaultCorp");
                if (!string.IsNullOrEmpty(entity) && allyId == 0)
                {
                    corpId = (await APIHelper.ESIAPI.SearchCorporationId("Stats", entity))?.corporation.FirstOrDefault() ?? 0;
                }
                if (allyId == 0 && corpId == 0)
                {
                    return;
                }

                bool isAlliance = corpId == 0;
                var  id         = isAlliance ? allyId : corpId;
                entity = string.IsNullOrEmpty(entity) ? (isAlliance ? (await APIHelper.ESIAPI.GetAllianceData("Stats", id))?.name :(await APIHelper.ESIAPI.GetCorporationData("Stats", id))?.name) : entity;

                if (command == "t" || command == "today" || command == "newday")
                {
                    var isNewDay = command == "newday";
                    var channel  = SettingsManager.GetULong("config", "autoDailyStatsChannel");
                    if (isNewDay && channel == 0)
                    {
                        return;
                    }
                    var to = now.Add(TimeSpan.FromHours(1));
                    to = to.Subtract(TimeSpan.FromMinutes(to.Minute));
                    var startTime = isNewDay ? today.Subtract(TimeSpan.FromDays(1)) : today;
                    var endTime   = isNewDay ? startTime.AddHours(24) : to;
                    var options   = new ZKillboardOptions
                    {
                        StartTime = startTime,
                        EndTime   = endTime,
                    };
                    if (isAlliance)
                    {
                        options.AllianceId = new List <long> {
                            id
                        }
                    }
                    ;
                    else
                    {
                        options.CorporationId = new List <long> {
                            id
                        }
                    };

                    string relPath = "/api/losses";
                    relPath = options.GetQueryString(relPath);
                    var losses = await RequestAsync <List <ZkbResponse.ZkbKill> >(requestHandler, new Uri(new Uri("https://zkillboard.com"), relPath)) ??
                                 new List <ZkbResponse.ZkbKill>();

                    relPath = "/api/kills";
                    relPath = options.GetQueryString(relPath);
                    var kills = await RequestAsync <List <ZkbResponse.ZkbKill> >(requestHandler, new Uri(new Uri("https://zkillboard.com"), relPath)) ??
                                new List <ZkbResponse.ZkbKill>();

                    var shipsDestroyed = kills.Count;
                    var shipsLost      = losses.Count;
                    var iskDestroyed   = kills.Sum(a => a.Stats.TotalValue);
                    var iskLost        = losses.Sum(a => a.Stats.TotalValue);
                    var date           = today;
                    if (isNewDay)
                    {
                        date = today.Subtract(TimeSpan.FromDays(1));
                        var msg =
                            $"**{string.Format(LM.Get("dailyStats"), date, entity)}**\n{LM.Get("Killed")}:\t**{shipsDestroyed}** ({iskDestroyed:n0} ISK)\n{LM.Get("Lost")}:\t**{shipsLost}** ({iskLost:n0} ISK)";
                        await APIHelper.DiscordAPI.SendMessageAsync(APIHelper.DiscordAPI.GetChannel(channel), msg).ConfigureAwait(false);
                    }
                    else
                    {
                        var msg =
                            $"**{string.Format(LM.Get("dailyStats"), date, entity)}**\n{LM.Get("Killed")}:\t**{shipsDestroyed}** ({iskDestroyed:n0} ISK)\n{LM.Get("Lost")}:\t**{shipsLost}** ({iskLost:n0} ISK)";
                        await APIHelper.DiscordAPI.ReplyMessageAsync(context, msg, true).ConfigureAwait(false);
                    }
                }
                else
                {
                    var t       = isAlliance ? "allianceID" : "corporationID";
                    var relPath = $"/api/stats/{t}/{id}/";
                    var result  = await RequestAsync <ZkbStatResponse>(requestHandler, new Uri(new Uri("https://zkillboard.com"), relPath));

                    if (command == "month" || command == "m")
                    {
                        var data = result.Months.FirstOrDefault(a => a.Value.Year == now.Year && a.Value.Month == now.Month).Value;
                        if (data == null)
                        {
                            return;
                        }
                        await APIHelper.DiscordAPI.ReplyMessageAsync(context,
                                                                     $"**{string.Format(LM.Get("monthlyStats"), result.Info.Name)}**\n{LM.Get("Killed")}:\t**{data.ShipsDestroyed}** ({data.IskDestroyed:n0} ISK)\n{LM.Get("Lost")}:\t**{data.ShipsLost}** ({data.IskLost:n0} ISK)");
                    }
                    else if (command.All(char.IsDigit))
                    {
                        var list = result.Months.Where(a => a.Value.Year.ToString() == command).ToList();
                        if (!list.Any())
                        {
                            return;
                        }
                        var shipsDestroyed = list.Sum(a => a.Value.ShipsDestroyed);
                        var shipsLost      = list.Sum(a => a.Value.ShipsLost);
                        var iskDestroyed   = list.Sum(a => a.Value.IskDestroyed);
                        var iskLost        = list.Sum(a => a.Value.IskLost);
                        await APIHelper.DiscordAPI.ReplyMessageAsync(context,
                                                                     $"**{string.Format(LM.Get("yearlyStats"), result.Info.Name, command)}**\n{LM.Get("Killed")}:\t**{shipsDestroyed}** ({iskDestroyed:n0} ISK)\n{LM.Get("Lost")}:\t**{shipsLost}** ({iskLost:n0} ISK)");
                    }
                    else if (command.Contains("/"))
                    {
                        var tmp = command.Split("/");
                        if (!tmp[0].All(char.IsDigit) || tmp[0].Length != 4)
                        {
                            return;
                        }
                        if (!tmp[1].All(char.IsDigit) || tmp[1].Length < 1 || tmp[1].Length > 2)
                        {
                            return;
                        }
                        var m    = int.Parse(tmp[1]);
                        var list = result.Months.Where(a => a.Value.Year.ToString() == tmp[0] && a.Value.Month == m).ToList();
                        if (!list.Any())
                        {
                            return;
                        }
                        var shipsDestroyed = list.Sum(a => a.Value.ShipsDestroyed);
                        var shipsLost      = list.Sum(a => a.Value.ShipsLost);
                        var iskDestroyed   = list.Sum(a => a.Value.IskDestroyed);
                        var iskLost        = list.Sum(a => a.Value.IskLost);
                        await APIHelper.DiscordAPI.ReplyMessageAsync(context,
                                                                     $"**{string.Format(LM.Get("monthlyCustomStats"), result.Info.Name, command)}**\n{LM.Get("Killed")}:\t**{shipsDestroyed}** ({iskDestroyed:n0} ISK)\n{LM.Get("Lost")}:\t**{shipsLost}** ({iskLost:n0} ISK)");
                    }
                }
            }
            catch (Exception ex)
            {
                await LogHelper.LogEx(ex.Message, ex, LogCat.Stats);
            }
        }