예제 #1
0
        private bool?CheckLocation(JsonClasses.SystemName rSystem, JsonZKill.Killmail kill, string groupName, string filterName)
        {
            if (rSystem == null)
            {
                LogHelper.LogError($"System not found: {kill.solar_system_id}!", Category).GetAwaiter().GetResult();
                return(false);
            }
            //System
            var fSystems = GetTier2SystemIds(ParsedLocationLists, groupName, filterName);

            if (fSystems.Any() && fSystems.Contains(kill.solar_system_id))
            {
                return(true);
            }
            //Constellation
            var fConsts = GetTier2ConstellationIds(ParsedLocationLists, groupName, filterName);

            if (fConsts.Any() && fConsts.Contains(rSystem.constellation_id))
            {
                return(true);
            }
            //Region
            var fRegions = GetTier2RegionIds(ParsedLocationLists, groupName, filterName);

            if (fRegions.Any() && rSystem.DB_RegionId.HasValue && fRegions.Contains(rSystem.DB_RegionId.Value))
            {
                return(true);
            }

            return(fSystems.Any() || fConsts.Any() || fRegions.Any() ? false : (bool?)null);
        }
예제 #2
0
        private bool?CheckLocation(JsonClasses.SystemName rSystem, JsonZKill.Killmail kill, KillMailFilter filter, string groupName, string filterName)
        {
            if (rSystem == null)
            {
                LogHelper.LogError($"System not found: {kill.solar_system_id}!", Category).GetAwaiter().GetResult();
                return(false);
            }

            if (!filter.ShowHighsecSystem && rSystem.security_status >= .5f)
            {
                return(false);
            }
            if (!filter.ShowLowsecSystem && rSystem.security_status >= .1f)
            {
                return(false);
            }
            if (!filter.ShowWormholeSystem && rSystem.IsWormhole())
            {
                return(false);
            }
            if (!filter.ShowAbyssSystem && rSystem.IsAbyss())
            {
                return(false);
            }
            if (!filter.ShowNullsecSystem && rSystem.security_status <= 0f)
            {
                return(false);
            }

            //Region
            var fRegions = GetTier2RegionIds(ParsedLocationLists, groupName, filterName);

            if (fRegions.Any() && rSystem.DB_RegionId.HasValue && fRegions.Contains(rSystem.DB_RegionId.Value))
            {
                return(true);
            }
            //Constellation
            var fConsts = GetTier2ConstellationIds(ParsedLocationLists, groupName, filterName);

            if (fConsts.Any() && fConsts.Contains(rSystem.constellation_id))
            {
                return(true);
            }
            //System
            var fSystems = GetTier2SystemIds(ParsedLocationLists, groupName, filterName);

            if (fSystems.Any() && fSystems.Contains(kill.solar_system_id))
            {
                return(true);
            }

            return(fSystems.Any() || fConsts.Any() || fRegions.Any() ? false : (bool?)null);
        }
예제 #3
0
        public async Task <bool> RefreshRadius(string reason, JsonZKill.Killmail kill)
        {
            if (killmailID > 0)
            {
                return(true);
            }
            try
            {
                killmailID = kill.killmail_id;
                value      = kill.zkb.totalValue;
                systemId   = kill.solar_system_id;
                rSystem    = await APIHelper.ESIAPI.GetSystemData(reason, systemId);

                isUnreachableSystem = systemId == 31000005;
                if (rSystem != null)
                {
                    sysName             = rSystem.name == rSystem.system_id.ToString() ? "Abyss" : (rSystem.name ?? "J");
                    isUnreachableSystem = rSystem.IsUnreachable();
                }
                else
                {
                    sysName = "?";
                }

                victimCharacterID       = kill.victim.character_id;
                victimCorpID            = kill.victim.corporation_id;
                victimAllianceID        = kill.victim.alliance_id;
                attackers               = kill.attackers;
                finalBlowAttacker       = attackers.FirstOrDefault(a => a.final_blow);
                finalBlowAttackerCorpId = finalBlowAttacker?.corporation_id ?? 0;
                finalBlowAttackerAllyId = finalBlowAttacker?.alliance_id ?? 0;
                shipID   = kill.victim.ship_type_id;
                killTime = kill.killmail_time.ToString(SettingsManager.Settings.Config.ShortTimeFormat);

                rVictimCorp = await APIHelper.ESIAPI.GetCorporationData(reason, victimCorpID);

                rAttackerCorp = finalBlowAttackerCorpId > 0
                        ? await APIHelper.ESIAPI.GetCorporationData(reason, finalBlowAttackerCorpId)
                        : null;

                rVictimAlliance = victimAllianceID != 0 ? await APIHelper.ESIAPI.GetAllianceData(reason, victimAllianceID) : null;

                rAttackerAlliance = finalBlowAttackerAllyId > 0
                        ? await APIHelper.ESIAPI.GetAllianceData(reason, finalBlowAttackerAllyId)
                        : null;

                rShipType = await APIHelper.ESIAPI.GetTypeId(reason, shipID);

                rVictimCharacter = await APIHelper.ESIAPI.GetCharacterData(reason, victimCharacterID);

                rAttackerCharacter = await APIHelper.ESIAPI.GetCharacterData(reason, finalBlowAttacker?.character_id);

                systemSecurityStatus = Math.Round(rSystem.security_status, 1).ToString("0.0");

                dic = new Dictionary <string, string>
                {
                    { "{shipID}", shipID.ToString() },
                    { "{shipType}", rShipType?.name },
                    { "{iskValue}", value.ToString("n0") },
                    { "{systemName}", sysName },
                    { "{systemSec}", systemSecurityStatus },
                    { "{victimName}", rVictimCharacter?.name },
                    { "{victimCorpName}", rVictimCorp?.name },
                    { "{victimCorpTicker}", rVictimCorp?.ticker },
                    { "{victimAllyName}", rVictimAlliance?.name },
                    { "{victimAllyTicker}", rVictimAlliance == null ? null : $"<{rVictimAlliance.ticker}>" },
                    { "{attackerName}", rAttackerCharacter?.name },
                    { "{attackerCorpName}", rAttackerCorp?.name },
                    { "{attackerCorpTicker}", rAttackerCorp?.ticker },
                    { "{attackerAllyTicker}", rAttackerAlliance == null ? null : $"<{rAttackerAlliance.ticker}>" },
                    { "{attackerAllyName}", rAttackerAlliance?.name },
                    { "{attackersCount}", attackers?.Length.ToString() },
                    { "{kmId}", killmailID.ToString() },
                    { "{isNpcKill}", isNPCKill.ToString() },
                    { "{timestamp}", killTime }
                };


                return(true);
            }
            catch (Exception ex)
            {
                killmailID = 0;
                await LogHelper.LogEx("refresh ex", ex, LogCat.RadiusKill);

                return(false);
            }
        }
예제 #4
0
        private bool?CheckLocation(JsonClasses.SystemName rSystem, JsonZKill.Killmail kill, bool isInclusive, string groupName, string filterName)
        {
            var isPassed = false;

            if (rSystem == null)
            {
                LogHelper.LogError($"System not found: {kill.solar_system_id}!", Category).GetAwaiter().GetResult();
                return(false);
            }

            var fCount = 0;
            //System
            var fLocs = GetTier2SystemIds(ParsedLocationLists, groupName, filterName);

            if (fLocs.Any())
            {
                if (isInclusive && !fLocs.Contains(kill.solar_system_id))
                {
                    return(false);
                }
                if (!isInclusive && fLocs.Contains(kill.solar_system_id))
                {
                    return(false);
                }
                if (isInclusive)
                {
                    isPassed = true;
                }
            }
            else
            {
                fCount++;
            }

            //Constellation
            if (!isPassed)
            {
                fLocs = GetTier2ConstellationIds(ParsedLocationLists, groupName, filterName);
                if (fLocs.Any())
                {
                    if (isInclusive && !fLocs.Contains(rSystem.constellation_id))
                    {
                        return(false);
                    }
                    if (!isInclusive && fLocs.Contains(rSystem.constellation_id))
                    {
                        return(false);
                    }
                    if (isInclusive)
                    {
                        isPassed = true;
                    }
                }
                else
                {
                    fCount++;
                }
            }

            //Region
            if (!isPassed)
            {
                fLocs = GetTier2RegionIds(ParsedLocationLists, groupName, filterName);
                if (fLocs.Any() && rSystem.DB_RegionId.HasValue)
                {
                    if (isInclusive && !fLocs.Contains(rSystem.DB_RegionId.Value))
                    {
                        return(false);
                    }
                    if (!isInclusive && fLocs.Contains(rSystem.DB_RegionId.Value))
                    {
                        return(false);
                    }
                    if (isInclusive)
                    {
                        isPassed = true;
                    }
                }
                else
                {
                    fCount++;
                }
            }

            return(fCount == 3 ? (bool?)null : true);
        }
예제 #5
0
        internal static async Task SearchCharacter(ICommandContext context, string name)
        {
            var channel = context.Channel;

            var charSearch = await APIHelper.ESIAPI.SearchCharacterId(LogCat.CharSearch.ToString(), name);

            if (charSearch == null)
            {
                await APIHelper.DiscordAPI.ReplyMessageAsync(context, LM.Get("charNotFound"), true);

                return;
            }

            var characterId = charSearch.character[0];

            var characterData = await APIHelper.ESIAPI.GetCharacterData(LogCat.CharSearch.ToString(), characterId, true);

            if (characterData == null)
            {
                await APIHelper.DiscordAPI.ReplyMessageAsync(context, LM.Get("charNotFound"), true);

                return;
            }

            var corporationData = await APIHelper.ESIAPI.GetCorporationData(LogCat.CharSearch.ToString(), characterData.corporation_id);

            var zkillContent = await APIHelper.ZKillAPI.GetCharacterKills(characterId);

            var characterStats = await APIHelper.ZKillAPI.GetCharacterStats(characterId);

            var zkillLosses = await APIHelper.ZKillAPI.GetCharacterLosses(characterId);

            var zkillLast = zkillContent.Count > 0 ? zkillContent[0] : null;
            var zLosslast = zkillLosses.Count > 0 ? zkillLosses[0] : new JsonClasses.ESIKill();
            var km        = zkillLast == null ? zLosslast : (zLosslast == null ? zkillLast : (zLosslast.killmail_time > zkillLast.killmail_time ? zLosslast : zkillLast));

            JsonClasses.SystemName systemData = null;
            var lastShipType = LM.Get("Unknown");

            if (km != null)
            {
                systemData = await APIHelper.ESIAPI.GetSystemData("Default", km.solar_system_id);

                if (km.victim != null && km.victim.character_id == characterId)
                {
                    lastShipType = km.victim.ship_type_id.ToString();
                }
                else if (km.victim != null)
                {
                    foreach (var attacker in km.attackers)
                    {
                        if (attacker.character_id == characterId)
                        {
                            lastShipType = attacker.ship_type_id.ToString();
                            break;
                        }
                    }
                }
            }

            var lastShip = lastShipType == LM.Get("Unknown") ? null : await APIHelper.ESIAPI.GetTypeId("Default", lastShipType);

            var lastSeenTime = km?.killmail_time.ToString(SettingsManager.Settings.Config.ShortTimeFormat) ?? LM.Get("Unknown");
            var allianceData = await APIHelper.ESIAPI.GetAllianceData("Default", characterData.alliance_id);

            var alliance       = allianceData?.name ?? LM.Get("None");
            var allianceTicker = allianceData != null ? $"[{allianceData?.ticker}]" : "";
            var lastSeenSystem = systemData?.name ?? LM.Get("None");
            var lastSeenShip   = lastShip?.name ?? LM.Get("None");
            var dangerous      = characterStats.dangerRatio > 75 ? LM.Get("Dangerous") : LM.Get("Snuggly");
            var gang           = characterStats.gangRatio > 70 ? LM.Get("fleetChance") : LM.Get("soloChance");

            var cynoCount   = 0;
            var covertCount = 0;

            foreach (var kill in zkillLosses)
            {
                if (kill.victim.character_id == characterId)
                {
                    foreach (var item in kill.victim.items)
                    {
                        if (item.item_type_id == 21096)
                        {
                            cynoCount++;
                        }
                        if (item.item_type_id == 28646)
                        {
                            covertCount++;
                        }
                    }
                }
            }

            var text1 = characterStats.dangerRatio == 0 ? LM.Get("Unavailable") : HelpersAndExtensions.GenerateUnicodePercentage(characterStats.dangerRatio);
            var text2 = characterStats.gangRatio == 0 ? LM.Get("Unavailable") : HelpersAndExtensions.GenerateUnicodePercentage(characterStats.gangRatio);

            var builder = new EmbedBuilder()
                          .WithDescription(
                $"[zKillboard](https://zkillboard.com/character/{characterId}/) / [EVEWho](https://evewho.com/pilot/{HttpUtility.UrlEncode(characterData.name)})")
                          .WithColor(new Color(0x4286F4))
                          .WithThumbnailUrl($"https://image.eveonline.com/Character/{characterId}_64.jpg")
                          .WithAuthor(author =>
            {
                author
                .WithName($"{characterData.name}");
            })
                          .AddField(LM.Get("Additionaly"), "\u200b")
                          .AddField($"{LM.Get("Corporation")}:", $"{corporationData.name}[{corporationData.ticker}]", true)
                          .AddField($"{LM.Get("Alliance")}:", $"{alliance}{allianceTicker} ", true)
                          .AddField($"{LM.Get("HasBeenSeen")}:", $"{lastSeenSystem}", true)
                          .AddField($"{LM.Get("OnShip")}:", $"{lastSeenShip}", true)
                          .AddField($"{LM.Get("Seen")}:", $"{lastSeenTime}", true)
                          .AddField("\u200b", "\u200b")
                          .AddField(LM.Get("CommonCyno"), $"{cynoCount}", true)
                          .AddField(LM.Get("CovertCyno"), $"{covertCount}", true)
                          .AddField(LM.Get("Dangerous"), $"{text1}{Environment.NewLine}{Environment.NewLine}**{dangerous} {characterStats.dangerRatio}%**", true)
                          .AddField(LM.Get("FleetChance2"), $"{text2}{Environment.NewLine}{Environment.NewLine}**{characterStats.gangRatio}% {gang}**", true);

            var embed = builder.Build();

            await APIHelper.DiscordAPI.SendMessageAsync(channel, "", embed).ConfigureAwait(false);

            await LogHelper.LogInfo($"Sending {context.Message.Author} Character Info Request", LogCat.CharSearch).ConfigureAwait(false);

            await Task.CompletedTask;
        }
예제 #6
0
        public async Task <bool> Refresh(string reason, JsonZKill.Killmail kill)
        {
            if (killmailID > 0)
            {
                return(true);
            }
            try
            {
                killmailID                   = kill.killmail_id;
                killTime                     = kill.killmail_time.ToString(SettingsManager.Settings.Config.ShortTimeFormat);
                victimShipID                 = kill.victim.ship_type_id;
                value                        = kill.zkb.totalValue;
                victimCharacterID            = kill.victim.character_id;
                victimCorpID                 = kill.victim.corporation_id;
                victimAllianceID             = kill.victim.alliance_id;
                attackers                    = kill.attackers;
                finalBlowAttacker            = attackers.FirstOrDefault(a => a.final_blow);
                finalBlowAttackerCharacterId = finalBlowAttacker.character_id;
                attackerShipID               = finalBlowAttacker?.ship_type_id ?? 0;
                finalBlowAttackerCorpId      = finalBlowAttacker?.corporation_id ?? 0;
                finalBlowAttackerAllyId      = finalBlowAttacker?.alliance_id ?? 0;
                isNPCKill                    = kill.zkb.npc;
                systemId                     = kill.solar_system_id;
                rSystem                      = await APIHelper.ESIAPI.GetSystemData(reason, systemId);

                if (rSystem == null)
                {
                    //ESI fail - check back later
                    return(false);
                }

                rVictimCorp = await APIHelper.ESIAPI.GetCorporationData(reason, victimCorpID);

                rAttackerCorp = finalBlowAttackerCorpId > 0
                    ? await APIHelper.ESIAPI.GetCorporationData(reason, finalBlowAttackerCorpId)
                    : null;

                rVictimAlliance = victimAllianceID != 0 ? await APIHelper.ESIAPI.GetAllianceData(reason, victimAllianceID) : null;

                rAttackerAlliance = finalBlowAttackerAllyId > 0
                    ? await APIHelper.ESIAPI.GetAllianceData(reason, finalBlowAttackerAllyId)
                    : null;

                sysName = rSystem.name == rSystem.system_id.ToString() ? "Abyss" : rSystem.name;
                var rConst = rSystem != null ? await APIHelper.ESIAPI.GetConstellationData(reason, rSystem.constellation_id) : null;

                var rRegion = rConst != null ? await APIHelper.ESIAPI.GetRegionData(reason, rConst.region_id) : null;

                rVictimShipType = await APIHelper.ESIAPI.GetTypeId(reason, victimShipID);

                rAttackerShipType = await APIHelper.ESIAPI.GetTypeId(reason, attackerShipID);

                rVictimCharacter = await APIHelper.ESIAPI.GetCharacterData(reason, victimCharacterID);

                rAttackerCharacter = await APIHelper.ESIAPI.GetCharacterData(reason, finalBlowAttacker?.character_id);

                systemSecurityStatus = Math.Round(rSystem.security_status, 1).ToString("0.0");

                dic = new Dictionary <string, string>
                {
                    { "{shipID}", victimShipID.ToString() },
                    { "{shipType}", rVictimShipType?.name },
                    { "{attackerShipID}", attackerShipID.ToString() },
                    { "{attackerShipType}", rAttackerShipType?.name },
                    { "{iskValue}", value.ToString("n0") },
                    { "{iskFittedValue}", kill?.zkb?.fittedValue.ToString("n0") ?? "0" },
                    { "{systemName}", sysName },
                    { "{constName}", rConst?.name },
                    { "{regionName}", rRegion?.name },
                    { "{systemSec}", systemSecurityStatus },
                    { "{victimName}", rVictimCharacter?.name },
                    { "{victimCorpName}", rVictimCorp?.name },
                    { "{victimCorpTicker}", rVictimCorp?.ticker },
                    { "{victimAllyName}", rVictimAlliance?.name },
                    { "{victimAllyTicker}", rVictimAlliance == null ? null : $"<{rVictimAlliance.ticker}>" },
                    { "{victimAllyOrCorpName}", rVictimAlliance?.name ?? rVictimCorp?.name },
                    { "{victimAllyOrCorpTicker}", rVictimAlliance?.ticker ?? rVictimCorp?.ticker },
                    { "{attackerName}", rAttackerCharacter?.name },
                    { "{attackerCorpName}", rAttackerCorp?.name },
                    { "{attackerCorpTicker}", rAttackerCorp?.ticker },
                    { "{attackerAllyTicker}", rAttackerAlliance == null ? null : $"<{rAttackerAlliance.ticker}>" },
                    { "{attackerAllyName}", rAttackerAlliance?.name },
                    { "{attackerAllyOrCorpName}", rAttackerAlliance?.name ?? rAttackerCorp?.name },
                    { "{attackerAllyOrCorpTicker}", rAttackerAlliance?.ticker ?? rAttackerCorp?.ticker },
                    { "{attackersCount}", attackers.Length.ToString() },
                    { "{kmId}", killmailID.ToString() },
                    { "{timestamp}", killTime },
                    { "{isLoss}", "false" },
                    { "{isNpcKill}", isNPCKill.ToString() ?? "false" },
                    { "{isSoloKill}", kill?.zkb?.solo.ToString() ?? "false" },
                    { "{isAwoxKill}", kill?.zkb?.awox.ToString() ?? "false" },
                };

                return(true);
            }
            catch (Exception ex)
            {
                killmailID = 0;
                await LogHelper.LogEx("refresh ex", ex, LogCat.KillFeed);

                return(false);
            }
        }