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