Example #1
0
        private async Task <bool> HandleEggOcr(RaidOcrResult ocrEgg, DiscordMessage message, int level)
        {
            _logger.Trace($"OcrProcessor::HandleEggOcr [OcrEgg={ocrEgg.EggLevel}, Message={message.Id}, Gym={ocrEgg.Gym}, Level={level}]");

            var starts = DateTime.Now.Subtract(ocrEgg.EggTimer);
            var eb     = new DiscordEmbedBuilder
            {
                Title        = ocrEgg.Gym,
                Color        = DiscordColor.Yellow, //TODO: Get color from raid level.
                ThumbnailUrl = string.Format(Strings.EggImage, level),
                //ImageUrl = string.Format(Strings.GoogleMapsStaticImage, gym.Latitude, gym.Longitude),
                //Url = string.Format(Strings.GoogleMaps, gym.Latitude, gym.Longitude),
                Description =
                    $"A level {ocrEgg.EggLevel} egg will hatch **{starts.ToLongTimeString()} ({starts.GetTimeRemaining().ToReadableStringNoSeconds()})**\r\n" +
                    //$"{gym.Details.Description}\r\n" +
                    //$"```{raid.Gym.Latitude},{raid.Gym.Longitude}```\r\n\r\n" +
                    //$"**Address:** " + (!string.IsNullOrEmpty(loc.Address) ? loc.Address : $"{raid.Gym.Latitude}, {raid.Gym.Longitude}") + "\r\n\r\n" +
                    $"**Submitted by:** {message.Author.Username}"
            };

            eb.Author = new DiscordEmbedBuilder.EmbedAuthor
            {
                Name    = $"Level {level} Egg",
                IconUrl = string.Format(Strings.EggImage, level)
            };
            eb.Footer = new DiscordEmbedBuilder.EmbedFooter
            {
                Text    = $"versx | {DateTime.Now}",
                IconUrl = message?.Channel?.Guild?.IconUrl ?? string.Empty
            };

            try
            {
                var whObj = GetWebHookData(_config.Webhook);
                var wh    = await _client.GetWebhookWithTokenAsync(whObj.Id, whObj.Token);

                await wh.ExecuteAsync(string.Empty, _client.CurrentUser.Username, _client.CurrentUser.AvatarUrl ?? _client.CurrentUser.DefaultAvatarUrl, false, new DiscordEmbed[] { eb });

                return(true);
            }
            catch (Exception ex)
            {
                _logger.Error(ex);
            }

            return(false);
        }
Example #2
0
        private async Task <RaidOcrResult> GetRaidOcrResultAsync(Image <Rgba32> image)
        {
            var result        = new RaidOcrResult();
            var fragmentTypes = Enum.GetValues(typeof(RaidImageFragmentType)).Cast <RaidImageFragmentType>();

#pragma warning disable RECS0165 // Asynchronous methods should return a Task instead of void
            Parallel.ForEach(fragmentTypes, async type =>
#pragma warning restore RECS0165 // Asynchronous methods should return a Task instead of void
            {
                using (var imageFragment = image.Clone(e => e.Crop(_imageConfiguration[type])))
                {
                    switch (type)
                    {
                    case RaidImageFragmentType.EggTimer:
                        result.EggTimer = await GetTimerValue(imageFragment, type);
                        break;

                    case RaidImageFragmentType.EggLevel:
                        result.EggLevel = await GetEggLevel(imageFragment);
                        break;

                    case RaidImageFragmentType.GymName:
                        result.Gym = await GetGym(imageFragment);
                        result.Gym = RemoveUnwantedCharacters(result.Gym);
                        if (!string.IsNullOrEmpty(result.Gym))
                        {
                            result.Gym = result.Gym.Split(new string[] { "\r", "\n" }, StringSplitOptions.RemoveEmptyEntries)[0];
                        }
                        break;

                    case RaidImageFragmentType.PokemonName:
                        result.Pokemon = await GetPokemon(imageFragment);
                        break;

                    case RaidImageFragmentType.PokemonCp:
                        result.PokemonCp = await GetPokemonCp(imageFragment);
                        break;

                    case RaidImageFragmentType.RaidTimer:
                        result.RaidTimer = await GetTimerValue(imageFragment, type);
                        break;
                    }
                }
            });

            return(await Task.FromResult(result));
        }
Example #3
0
        private async Task <bool> HandleRaidOcr(RaidOcrResult ocrRaid, DiscordMessage message, int pokeId)
        {
            _logger.Trace($"OcrProcessor::HandleRaidOcr [OcrRaid={ocrRaid.Pokemon}, Message={message.Id}, Gym={ocrRaid.Gym}, PokemonId={pokeId}]");

            var db = Database.Instance;

            if (!db.Pokemon.ContainsKey(pokeId))
            {
                _logger.Error($"Failed to lookup Raid Pokemon '{pokeId}' in database.");
                return(false);
            }

            var pkmn = db.Pokemon[pokeId];

            //var types = pkmn.Types.Count > 1 ? pkmn.Types[0].Type + "/" + pkmn.Types[1].Type : pkmn.Types[0].Type;
            //var typesText = $"**Types:** {string.Join("/", types)}\r\n";

            //var weaknesses = new List<string>();
            //foreach (var type in types.Split('/'))
            //{
            //    foreach (var weakness in PokemonExtensions.GetWeaknesses(type))
            //    {
            //        var emojiId = message.Channel.Guild.GetEmojiId($"types_{weakness.ToLower()}");
            //        var emojiName = emojiId > 0 ? $"<:{weakness.ToLower()}:{emojiId}>" : weakness;
            //        if (!weaknesses.Contains(emojiName))
            //        {
            //            weaknesses.Add(emojiName);
            //        }
            //    }
            //}

            //var counters = string.Empty;
            //if (weaknesses.Count > 0)
            //{
            //    counters += $"**Weaknesses:** {string.Join(" ", weaknesses)}\r\n";
            //}

            //var perfectRange = db.GetPokemonCpRange(pokeId, 20);
            //var boostedRange = db.GetPokemonCpRange(pokeId, 25);
            var ends = DateTime.Now.Subtract(ocrRaid.RaidTimer);
            var eb   = new DiscordEmbedBuilder
            {
                Title        = ocrRaid.Gym,
                Color        = DiscordColor.Red, //TODO: Get color from raid level
                ThumbnailUrl = string.Format(Strings.PokemonImage, pokeId, 0),
                //    //ImageUrl = string.Format(Strings.GoogleMapsStaticImage, raid.Gym.Latitude, raid.Gym.Longitude),
                //    //Url = string.Format(Strings.GoogleMaps, raid.Gym.Latitude, raid.Gym.Longitude),
                Description =
                    $"**Ends:** {ends.ToLongTimeString()} ({ends.GetTimeRemaining().ToReadableStringNoSeconds()})\r\n" +
                    //$"**Perfect CP:** {perfectRange.Best} / :white_sun_rain_cloud: {boostedRange.Best}\r\n" +
                    //counters +
                    //$"{raid.Gym.Details.Description}\r\n" +
                    //$"```{raid.Gym.Latitude},{raid.Gym.Longitude}```\r\n\r\n" +
                    //$"**Address:** " + (!string.IsNullOrEmpty(loc.Address) ? loc.Address : $"{raid.Gym.Latitude}, {raid.Gym.Longitude}") + "\r\n\r\n" +
                    $"**Submitted by:** {message.Author.Username}"
            };

            eb.Author = new DiscordEmbedBuilder.EmbedAuthor
            {
                Name    = $"{pkmn} Raid",
                IconUrl = string.Format(Strings.PokemonImage, pokeId, 0)
            };
            eb.Footer = new DiscordEmbedBuilder.EmbedFooter
            {
                Text    = $"versx | {DateTime.Now}",
                IconUrl = message?.Channel?.Guild?.IconUrl ?? string.Empty
            };

            try
            {
                var whObj = GetWebHookData(_config.Webhook);
                var wh    = await _client.GetWebhookWithTokenAsync(whObj.Id, whObj.Token);

                await wh.ExecuteAsync(string.Empty, _client.CurrentUser.Username, _client.CurrentUser.AvatarUrl ?? _client.CurrentUser.DefaultAvatarUrl, false, new DiscordEmbed[] { eb });

                return(true);
            }
            catch (Exception ex)
            {
                _logger.Error(ex);
            }

            return(false);
        }