def do_pokemon_evolve_final(self, mon): pokemon_name = self._pokemon_name(mon) species_chain = find_species_chain(mon.species.evolution_chain.chain, mon.species.name)[1] final_evolution_chain_list = find_final_species_chains(species_chain) if len(final_evolution_chain_list) == 1: evolution_chain = final_evolution_chain_list[0] if attr(evolution_chain, "species.name") == mon.species.name: # pokemon is in final evolution if not mon.species.evolution_chain.chain.evolves_to: # if evolves_to list is empty self.speak_dialog("pokemon.has.no.evolutions", {"pokemon": pokemon_name}) return else: self.speak_dialog("pokemon.is.in.final.evolution", {"pokemon": pokemon_name}) return elif len(final_evolution_chain_list) == 0: raise ValueError("find_final_species_chains() returned a list with a length of 0") names_list = [] for evolution_chain in final_evolution_chain_list: name = self._species_name(pokemon_species(attr(evolution_chain, "species.name"))) names_list.append(name) display = self._list_to_str(names_list) if not display: LOG.error("display is empty. names_list: " + str(names_list) + ", ...chain_list: " + str(final_evolution_chain_list)) self.speak_dialog("pokemon.final.evolution", {"pokemon": pokemon_name, "final": display})
def index(): pkmnNum = random.randint(1, 807) pkmnSprite = pb.pokemon_sprite(pkmnNum) pkmnName = pb.pokemon(pkmnNum) im = pkmnSprite.path pkmnImage = (im.split('/')[7]) dex = pb.pokemon_species(pkmnNum) #API info sent to html page pkmnInfo = [ dex.generation, pkmnName.weight, pkmnName.height, dex.habitat, pkmnName.types[0].type ] # Move path of cached sprite to static folder (may need to change second argument to full path based on user setup) os.rename(im, "/static/" + pkmnImage) return ''' <html> <head> <title>Pokemon</title> </head> <body> <center><h1 style = "font-family:'Helvetica Neue';font-size:50px;font-style:bold;">''' + str( pkmnName).capitalize() + '''</h1></center> <center><img src= "/static/''' + str(pkmnNum).capitalize( ) + '''.png" style="width:270px;height:270px;"></center> <center><p style = "font-family:'Helvetica Neue';font-size:20px;font-style:bold;"> <br> Generation: ''' + str(pkmnInfo[0]) + ''' <br> Weight: ''' + str(pkmnInfo[1]) + ''' <br> Height: ''' + str(pkmnInfo[2]) + ''' <br> Habitat: ''' + str(pkmnInfo[3]) + ''' <br> Type: ''' + str(pkmnInfo[4]) + '''
def do_pokemon_evolve_into(self, mon): pokemon_name = self._pokemon_name(mon) species_chain = find_species_chain(mon.species.evolution_chain.chain, mon.species.name)[1] if not species_chain: self.speak_dialog("pokemon.does.not.evolve", {"pokemon": pokemon_name}) return into = attr(species_chain, "evolves_to") should_add_details = len(into) <= 2 names_into = [] for evolution in into: species = pokemon_species(attr(evolution, "species.name")) name = self._species_name(species) details_display = "" if should_add_details: evolution_details_list = attr(evolution, "evolution_details") evolution_details_str_list = [] for evolution_details in evolution_details_list: evolution_details_str_list.append(self._evolution_details_str(evolution_details)) details_display = self._list_to_str(evolution_details_str_list, and_str=self.translate("or")) names_into.append(name + details_display) if not names_into: self.speak_dialog("pokemon.does.not.evolve", {"pokemon": pokemon_name}) return display = self._list_to_str(names_into, and_str=self.translate("or")) self.speak_dialog("pokemon.evolves.into", {"pokemon": pokemon_name, "evolve": display})
def pokemon(name = None): # Validate input name. if (name is None or len(name)<=0): return custom_error('Please specify a pokemon name.') # Retrieve pokemon description from pokemon api. pokemon = pokebase.pokemon_species(name) if (not hasattr(pokemon, 'id')): # Check if pokemon exists. return custom_error('Pokemon not found.') poke_desc = pokemon.flavor_text_entries[6].flavor_text # Format and normalize the description string. poke_desc = re.sub('[\s]', ' ', poke_desc) # Replace new lines with spaces. poke_desc = re.sub('[^a-zA-Z0-9-_*. ]', '', poke_desc) # Remove other special characters. # Shakespear it. req = requests.get(API_SHAKESPEAR, {'text': poke_desc}) if (req.status_code != 200): # Confirm if the request was successful. return jsonify(req.json()) elif (req.json()['success']['total'] != 1): return custom_error('Unknown error.') poke_desc_shpear = (req.json()['contents']['translated']) # Deserialise result. # Return JSON response. return jsonify({'name': pokemon.name, 'description': poke_desc_shpear})
def get_pokemon_description(pokemon: str) -> str: """English description of a pokemon from it's debut game apperance.""" species = pokebase.pokemon_species(pokemon) entries = species.flavor_text_entries en_entries = filter(lambda x: x.language.name == LANG, entries) entry = min(en_entries, key=lambda x: x.version.id) description = str(entry.flavor_text) return description
def add_meta(self): temp = poke.pokemon(self.species) self.sprite = temp.sprites.front_default pic_string = f"https://assets.pokemon.com/assets/cms2/img/pokedex/full/{self.number.zfill(3)}.png" self.main_pic = pic_string temp2 = poke.pokemon_species(self.species) self.evolve_chain = temp2.evolution_chain.id print(f"pic: {self.sprite}") print(f"evolve num: {self.evolve_chain}") print(f"evolve num: {self.main_pic}")
def main(): # pprint used to help format output neatly. pp = pprint.PrettyPrinter(indent=2) while (True): print('Welcome!') print('1. Get data for a specific berry.') print('2. Get data for a specific Pokemon species.') print('3. Get a list of Pokemon or berries.') print('4. Exit program.') print('Enter a number corresponding to the options listed above...') x = (int)(input()) if (x == 1): # Berry data # Input can either be a specified berry name or id number (1-64). # Input will assume you are entering the correct information. # Note: As of now data for roseli berry, kee berry, and maranga berry cannot be accessed. berry = input( 'Enter a berry name (ex. oran) or id number (1-64): ') loader = pb.berry(berry) berry_data = json.loads(getWebpage(loader)) pp.pprint(berry_data) elif (x == 2): # Pokémon species data. Note: Long output. # Input assumes you are entering the correct information. # As of now, according to the national pokedex, there are 893 Pokémon but that is subject to change. # Warning: long output. pokemon_species = input( 'Enter a pokemon species (ex. wormadam) name or id number (1-893): ' ) loader = pb.pokemon_species(pokemon_species) pokemon_species_data = json.loads(getWebpage(loader)) pp.pprint(pokemon_species_data) elif (x == 3): # Pokémon or berry list # Input assumes you are entering the correct information. # Note: pokemon and berry are not the only groups that can be called and outputted asked for simplicity # Check documentation and for more information on what can be entered. # Warning: long output. # Not formatted neatly group_list = input('Enter "pokemon" or "berry": ') print(pb.APIResourceList(group_list)) elif (x == 4): print('Have a nice day!') break else: print('Input invalid. Please try again.')
def getmonster(id): # Object to get all the variables global dex_entry mon = pb.pokemon(id) hp = mon.stats[0].base_stat attack = mon.stats[1].base_stat defense = mon.stats[2].base_stat special_attack = mon.stats[3].base_stat special_defense = mon.stats[4].base_stat speed = mon.stats[5].base_stat stats = [hp, attack, defense, special_attack, special_defense, speed] species_name = mon.name type_one = mon.types[0].type.name if len(mon.types) > 1: type_two = mon.types[1].type.name else: type_two = '' ability = mon.abilities[0].ability.name species = pb.pokemon_species(id) if species.evolves_from_species is None: evolves_from = 'None' else: evolves_from = species.evolves_from_species.name i = 0 while True: if species.flavor_text_entries[i].language.name == "en": dex_entry = species.flavor_text_entries[i].flavor_text break else: i += 1 continue return json.dumps({ "national_id": id, "species": species_name, "stats": stats, "type_one": type_one, "type_two": type_two, "ability": ability, "pre-evolution": evolves_from, "dex entry": dex_entry })
async def getPokemonEvolution(pokemon): pkmn = "" if isinstance(pokemon, str): pkmn = pb.pokemon(pokemon.lower().replace("'", "")) if isinstance(pokemon, int): pkmn = pb.pokemon(pokemon) em = discord.Embed() em.set_author(name=GG.cleanWordDash(pkmn.name)) spriteUrl = pkmn.sprites.front_default types = pkmn.types if len(types) == 2: type = GG.cleanWordDash(types[1].type.name) type2 = GG.cleanWordDash(types[0].type.name) color = GG.getColorOfType(type.lower()) else: type = GG.cleanWordDash(types[0].type.name) type2 = None color = GG.getColorOfType(type.lower()) getSpecieName = pkmn.species.url.replace( "http://pokeapi.co/api/v2/pokemon-species/", "") species = pb.pokemon_species(getSpecieName) flavorText = GG.getFlavorText(species.flavor_text_entries) em.description = flavorText getId = re.search(r"/([0-9]*)/$", str(species.evolution_chain.url) + "/").group().replace( "/", "") evolutionChain = pb.evolution_chain(getId) start, chain = getEvolution(evolutionChain.chain) if chain != f"{start}\n": if chain.startswith(f"{start}\n"): chain = chain.replace(f"{start}\n", "", 1) em.set_thumbnail(url=spriteUrl) if chain != "": em.add_field(name="Evolution Chain", value=chain, inline=False) else: em.add_field(name="Evolution Chain", value="This Pokémon has no evolution chain.") em.colour = int("0x" + color, 0) return em
def weakness(): if request.method == 'POST' and request.form.get('pokemon'): poke = request.form.get('pokemon') try: # 2 API calls due to pokemon with different forms poke = str(poke).lower() userSpecies = pb.pokemon_species(poke) userPokemon = pb.pokemon(userSpecies.id) except: return render_template("weakness.html", error=True) immunities = {} double_damage = {} quad_damage = {} collection = [] # calculations for immunities, weaknesses, and resistances for slot in userPokemon.types: for weaknessobj in slot.type.damage_relations.double_damage_from: weakness = weaknessobj.get('name') if weakness in double_damage: double_damage.pop(weakness) quad_damage[weakness] = (weaknessdict.get(weakness)) else: double_damage[weakness] = (weaknessdict.get(weakness)) for slot in userPokemon.types: for resistanceobj in slot.type.damage_relations.half_damage_from: resistance = resistanceobj.get('name') while resistance in double_damage: double_damage.pop(resistance) for immunityobj in slot.type.damage_relations.no_damage_from: immunity = immunityobj.get('name') while immunity in double_damage: double_damage.pop(immunity) immunities[immunity] = weaknessdict.get(immunity) collection.append(immunities) collection.append(double_damage) collection.append(quad_damage) usrTypes = type_string(userPokemon) imgLink = f'https://pokeres.bastionbot.org/images/pokemon/{userPokemon.id}.png' return render_template("weakness.html", content=userPokemon, collection=collection, pic=imgLink, usrTypes=usrTypes) return redirect(url_for("home"))
async def gif(self, ctx, *args): dex_usage = Pokedex.GIF_USAGE.format(self.bot.command_prefix) pkmn_id = 0 pkmn_name = '' pkmn_genus = '' pkmn_url = '' pkmn_desc = '' random_args = ['-r', '-rand', '-random'] shiny = False if args and len(args) >= 1: t = args[0] if type(t) == str and t.startswith('-'): if t in random_args: t = randint(1, Pokedex.MAX_PKMN) if '-s' in args[1:] or '-shiny' in args[1:]: shiny = True if type(t) == int or type(t) == str: if type(t) == str: t = t.lower() try: species = pb.pokemon_species(t) except ValueError: title = 'What the zzzt?! Invalid Pokémon name / ID' msg = await self.bot.say( embed=rtm.rotom_embed(title, dex_usage)) return pkmn_name = species.name pkmn_url = 'https://pokemondb.net/sprites/' + pkmn_name filename = self.get_thumbnail(pkmn_id, pkmn_name, shiny=shiny) embed = discord.Embed(url=pkmn_url, color=g.COLOR) embed.set_thumbnail(url=filename) msg = await self.bot.say(embed=embed) return
async def dex(self, ctx, *args): ''' PokeDex entry for any PKMN Usage: !dex [pkmn # or name] e.g: !dex 151 / !dex mew ''' dex_usage = Pokedex.DEX_USAGE.format(self.bot.command_prefix) pkmn_id = 0 pkmn_name = '' pkmn_genus = '' pkmn_url = '' pkmn_desc = '' random_args = ['-r', '-rand', '-random'] shiny = False if args and len(args) >= 1: t = args[0] if type(t) == str and t.startswith('-'): if t in random_args: t = randint(1, Pokedex.MAX_PKMN) if '-s' in args[1:] or '-shiny' in args[1:]: shiny = True if type(t) == int or type(t) == str: if type(t) == str: t = t.lower() try: species = pb.pokemon_species(t) pokemon = pb.pokemon(t) except ValueError: console_txt = 'Invalid Pokémon: ' + str(t) + ' given' print(console_txt) title = 'What the zzzt?! Invalid Pokémon name / ID' msg = await self.bot.say( embed=rtm.rotom_embed(title, dex_usage)) return pkmn_id = species.id pkmn_name = species.name filename = self.get_thumbnail(pkmn_id, pkmn_name, shiny=shiny) pkmn_genus = species.genera[2].genus pkmn_url = 'https://veekun.com/dex/pokemon/' + pkmn_name # print("Displaying Pokemon {0} #{1}".format(pkmn_name, pkmn_id)) pkmn_type = [x.type.name for x in pokemon.types] pkmn_abilities = [x.ability.name for x in pokemon.abilities] type_emojis = ' '.join( {g.TYPE_DICT[t] for t in pkmn_type if t in g.TYPE_DICT}) if shiny: type_emojis += g.S_ICON title = "{0} #{1} {2}".format(pkmn_name.capitalize(), pkmn_id, type_emojis) sub_title = "the {0}".format(pkmn_genus) embed = discord.Embed(title=title, url=pkmn_url, color=g.COLOR) embed.set_thumbnail(url=filename) embed = Pokedex.std_embed(embed, species, sub_title) embed = Pokedex.type_embed(embed, types=pkmn_type, abilities=pkmn_abilities) msg = await self.bot.say(embed=embed) return else: title = 'Kzzzzrrt?! Invalid usage! Zzt-zzt!' msg = await self.bot.say(embed=rtm.rotom_embed(title, dex_usage)) return return
def _evolution_details_str(self, evolution_details): """ :param evolution_details: Usually a dict :return: A string representing events needed to happen to evolve based on evolution_details """ # Use this to test: https://pokemondb.net/pokebase/168028/what-pokemon-have-a-unique-evolution-method # ==== variables ==== trigger = evolution_trigger(evolution_details["trigger"]["name"]) trigger_name = self._get_name_from_lang(trigger.names) if trigger_name: trigger_name = " " + self.translate("evolve.details.trigger", {"name": trigger_name}) held_item = evolution_details["held_item"] held_item_display = "" if held_item: item_name = held_item["name"] item_display_name = self._get_name_from_lang(item(item_name).names) held_item_display = " " + self.translate( "evolve.details.holding.item", {"item": item_display_name}) min_level = evolution_details["min_level"] # None or min level min_level_display = "" if min_level: min_level_display = " " + self.translate("evolve.details.at.level", {"level": min_level}) min_happiness = evolution_details[ "min_happiness"] # None or min happiness min_happiness_display = "" if min_happiness: min_happiness_display = " " + self.translate( "evolve.details.with.happiness", {"happiness": min_happiness}) min_beauty = evolution_details["min_beauty"] min_beauty_display = "" if min_beauty: min_beauty_display = " " + self.translate( "evolve.details.with.beauty", {"beauty": min_beauty}) min_affection = evolution_details["min_affection"] min_affection_display = "" if min_affection: min_affection_display = " " + self.translate( "evolve.details.with.affection", {"affection": min_affection}) time_of_day = evolution_details[ "time_of_day"] # None or "day" or "night" time_display = "" if time_of_day: time_display = " " + self.translate("evolve.details.time.of.day", {"time": time_of_day}) gender = evolution_details["gender"] # None, 1=female, 2=male gender_display = "" if gender: if gender == 1: gender_display = " " + self.translate( "evolve.details.if.female") else: gender_display = " " + self.translate("evolve.details.if.male") party_type_dict = evolution_details["party_type"] party_type_display = "" # must have this type of pokemon in their party if party_type_dict: party_type = type_(party_type_dict["name"]) party_type_display = " " + self.translate( "evolve.details.with.pokemon.party.type", {"type": self._get_name_from_lang(party_type.names)}) location_dict = evolution_details["location"] location_display = "" if location_dict: game_location = location(location_dict["name"]) location_display = " " + self.translate( "evolve.details.location", {"location": self._get_name_from_lang(game_location.names)}) needs_rain_display = "" if evolution_details["needs_overworld_rain"]: needs_rain_display = " " + self.translate( "evolve.details.with.rain") turn_upside_down_display = "" if evolution_details["turn_upside_down"]: turn_upside_down_display = " " + self.translate( "evolve.details.turn.upside.down") known_move = evolution_details["known_move"] known_move_display = "" if known_move: known_move_display = " " + self.translate( "evolve.details.knowing.move", { "move": self._get_name_from_lang(move(known_move["name"]).names) }) known_move_type = evolution_details["known_move_type"] known_move_type_display = "" if known_move_type: known_move_type_display = " " + self.translate( "evolve.details.knowing.move.type", { "type": self._get_name_from_lang( type_(known_move_type["name"]).names) }) relative_stats = evolution_details["relative_physical_stats"] relative_stats_display = "" if relative_stats is not None: if relative_stats == -1: relative_stats_display = " " + self.translate( "evolve.details.stats.attack.less.than.defense") elif relative_stats == 0: relative_stats_display = " " + self.translate( "evolve.details.stats.attack.equals.defense") else: assert relative_stats == 1 relative_stats_display = " " + self.translate( "evolve.details.stats.attack.greater.than.defense") party_species = evolution_details["party_species"] party_species_display = "" if party_species: species_name = self._species_name( pokemon_species(party_species["name"])) party_species_display = " " + self.translate( "evolve.details.with.pokemon.party", {"pokemon": species_name}) # ==== different triggers ==== if trigger.name == "shed": return trigger_name elif trigger.name == "use-item": used_item = item(evolution_details["item"]["name"]) return trigger_name + " " + self._get_name_from_lang( used_item.names) elif trigger.name == "trade": trade_species_dict = evolution_details["trade_species"] trade_species_display = "" if trade_species_dict: trade_species = pokemon_species(trade_species_dict["name"]) trade_species_display = " " + self.translate( "evolve.details.trade.species", {"species": self._get_name_from_lang(trade_species.names)}) return trigger_name + held_item_display + trade_species_display if trigger.name != "level-up": LOG.error( "This is bad! trigger.name should be level-up but it's: {}". format(trigger.name)) # === level up trigger below === level_up_display = trigger_name if min_level_display: level_up_display = min_level_display return (level_up_display + held_item_display + known_move_display + known_move_type_display + min_happiness_display + min_beauty_display + min_affection_display + time_display + location_display + needs_rain_display + gender_display + relative_stats_display + party_type_display + party_species_display + turn_upside_down_display)
async def get_poke_data(self, ctx, poke_ser, load_msg): pr = ProgressBar(8) pv = PokemonValues() print('pokemon_id: ' + str(poke_ser)) pic_list = [ 'https://thumbs.gfycat.com/FairSinfulCottontail-small.gif', 'https://media.giphy.com/media/3M8bGcZOexuvneoJZl/giphy.gif', 'https://cdn.dribbble.com/users/621155/screenshots/2835329/coorzzz.gif', 'https://a.top4top.io/p_1990j031.gif', 'https://i.pinimg.com/originals/72/00/28/720028e1fce6412e77667993ead54ede.gif', 'https://i.pinimg.com/originals/51/72/56/517256bf41fd027b5eec4a38c5110420.gif', 'https://media2.giphy.com/media/uXnif9JVu6VnW/source.gif' ] tmp = await ctx.send(load_msg) load_pic = discord.Embed(title='', description='', color=random.randint(0, 0xffffff)) load_pic.set_image(url=random.choice(pic_list)) load_pic_msg = await ctx.send(embed=load_pic) try: await self.send_progress(tmp, load_msg, pr) sp_data = pb.pokemon_species(poke_ser) await self.send_progress(tmp, load_msg, pr) p_data = pb.pokemon(poke_ser) await self.send_progress(tmp, load_msg, pr) pv.weight = float(p_data.weight) / 10 pv.height = float(p_data.height) / 10 pv.id = sp_data.id pv.name_en = sp_data.name pv.set_gender(sp_data.gender_rate) evo_chain_id = int(sp_data.evolution_chain.url.split('/')[6]) type_names = [] for t in p_data.types: type_names.append(t.type.name) pv.set_type(type_names) await self.send_progress(tmp, load_msg, pr) for s in p_data.stats: pv.seed_dict[s.stat.name] = s.base_stat await self.send_progress(tmp, load_msg, pr) for data in sp_data.flavor_text_entries: if data.language.name.find('ja') != -1: pv.flavor = data.flavor_text break await self.send_progress(tmp, load_msg, pr) for data in sp_data.names: if data.language.name.find('ja') != -1: pv.name = data.name break await self.send_progress(tmp, load_msg, pr) for data in sp_data.genera: if data.language.name.find('ja') != -1: pv.genus = data.genus break await self.send_progress(tmp, load_msg, pr) try: evo = pb.evolution_chain(evo_chain_id) min_lv = evo.chain.evolves_to[0]['evolution_details'][0][ 'min_level'] #print(min_lv) pv.set_level(min_lv) except: #traceback.print_exc() pv.set_level(30) abi_id = random.choice(p_data.abilities).ability.url.split('/')[6] for data in pb.ability(abi_id).names: if data.language.name.find('ja') != -1: pv.ability_name = data.name break pv.calc() await self.send_progress(tmp, load_msg, pr) except ValueError: await ctx.send(ctx.author.mention + ' **ポケモンは見つからなかったぞ!**') self.quiz_flag = False pv = None except: await ctx.send(ctx.author.mention + ' エラーだぞ...: ' + str(traceback.print_exc())) self.quiz_flag = False pv = None await tmp.delete() await load_pic_msg.delete() return pv
#!/usr/bin/env python3 import pokebase as pb import json, os, sys import requests import psycopg2 conn = psycopg2.connect(os.environ['DATABASE_URL']) cur = conn.cursor() sql = '''INSERT INTO pokemon(name, pokemonnumber, pokemondescription, pokemonimage) VALUES(%s, %s, %s, %s) returning id;''' for i in range(1, 808): # grab pokemon from library pokemon = pb.pokemon(i) species = pb.pokemon_species(i) description = "" # check if always english for fte in species.flavor_text_entries: if fte.language.name == "en" and fte.version.name == "alpha-sapphire" or fte.language.name == "en" and fte.version.name == "ultra-sun": description = fte.flavor_text name = pokemon.name, pokemonnumber = pokemon.id, pokemondescription = description, pokemonimage = pokemon.sprites.front_default cur.execute(sql, ( name, pokemonnumber, pokemondescription,
async def pokedex(self, ctx, *args): query = ''.join(args).lower() try: poke = pb.pokemon(query) except ValueError as e: await self.bot.say( f"Sorry, {ctx.message.author.mention}, {query} was not found.") return name = poke.name.capitalize() spec = pb.pokemon_species(poke.id) color = self.hex_colors[spec.color.name] stats = poke.stats ico_url = "https://raw.githubusercontent.com/PokeAPI/sprites/master/sprites/items/poke-ball.png" stats.reverse() #Find flavor text big_flav = spec.flavor_text_entries flav = "No suitable flavor text found." for i in big_flav: if i.language.name == "en": flav = i.flavor_text break embed = discord.Embed(colour=discord.Colour(color), description=flav) embed.set_thumbnail(url=poke.sprites.front_default) embed.set_author(name=f"{poke.name.capitalize()}, Pokémon #{poke.id}", url="https://pokeapi.co", icon_url=ico_url) embed.set_footer( text="All information is sourced from https://pokeapi.co/", icon_url=ico_url) #Add type types = [] for i in poke.types: types.append(f"**{i.type.name.capitalize()}**") type_text = '/'.join(types) embed.add_field(name="Type", value=type_text, inline=False) embed.add_field(name="\u200b", value="\u200b", inline=False) #Add effort values evs = {} for i in stats: if i.effort > 0: evs[i.stat.name] = i.effort ev_text = [] for i in list(evs.keys()): ev_text.append(f"**{self.pretty_stat[i]}**\t\t\t{evs[i]}") ev_text = '\n'.join(ev_text) embed.add_field(name="Effort Values", value=ev_text, inline=False) embed.add_field(name="\u200b", value="\u200b", inline=False) # Add stat fields for i in stats: embed.add_field(name=self.pretty_stat[i.stat.name], value=i.base_stat, inline=True) await self.bot.say(embed=embed)
async def poketype(self, ctx, *args): query = ''.join(args).lower() try: poke = pb.pokemon(query) except ValueError as e: await self.bot.say( f"Sorry, {ctx.message.author.mention}, {query} was not found.") return name = poke.name.capitalize() rawTypes = poke.types typeVals = {} noDamage = [] for i in rawTypes: typeName = i.type.name pokeType = pb.type_(typeName) rawDamage = pokeType.damage_relations rawNo = rawDamage.no_damage_from rawHalf = rawDamage.half_damage_from rawDoub = rawDamage.double_damage_from if len(rawNo) > 0: for j in rawNo: if j['name'] not in noDamage: noDamage.append(j['name'].capitalize()) if len(rawHalf) > 0: for j in rawHalf: if j['name'] not in typeVals.keys(): typeVals[j['name']] = -1 else: typeVals[j['name']] -= 1 if len(rawDoub) > 0: for j in rawDoub: if j['name'] not in typeVals.keys(): typeVals[j['name']] = 1 else: typeVals[j['name']] += 1 dubdub = [] dub = [] neg = [] negneg = [] for i in list(typeVals.keys()): tempVal = typeVals[i] if tempVal == 2: dubdub.append(i.capitalize()) elif tempVal == 1: dub.append(i.capitalize()) elif tempVal == -1: neg.append(i.capitalize()) elif tempVal == -2: negneg.append(i.capitalize()) spec = pb.pokemon_species(poke.id) color = self.hex_colors[spec.color.name] ico_url = "https://raw.githubusercontent.com/PokeAPI/sprites/master/sprites/items/poke-ball.png" embed = discord.Embed(colour=discord.Colour(color)) embed.set_thumbnail(url=poke.sprites.front_default) embed.set_author(name=f"{poke.name.capitalize()}, Pokémon #{poke.id}", url="https://pokeapi.co", icon_url=ico_url) embed.set_footer( text="All information is sourced from https://pokeapi.co/", icon_url=ico_url) if len(dubdub) > 0: embed.add_field(name="4x Damage", value=', '.join(dubdub), inline=False) if len(dub) > 0: embed.add_field(name="2x Damage", value=', '.join(dub), inline=False) if len(neg) > 0: embed.add_field(name=".5x Damage", value=', '.join(neg), inline=False) if len(negneg) > 0: embed.add_field(name=".25x Damage", value=', '.join(negneg), inline=False) if len(noDamage) > 0: embed.add_field(name="No Damage", value=', '.join(noDamage), inline=False) await self.bot.say(embed=embed)
async def getPokemon(pokemon): pkmn = "" if isinstance(pokemon, str): pkmn = pb.pokemon(pokemon.lower().replace("'", "")) if isinstance(pokemon, int): pkmn = pb.pokemon(pokemon) em = discord.Embed() id = pkmn.id spriteUrl = pkmn.sprites.front_default spriteUrlShiny = pkmn.sprites.front_shiny spriteUrlFemale = pkmn.sprites.front_female spriteUrlFemaleShiny = pkmn.sprites.front_shiny_female em.set_author(name=GG.cleanWordDash(pkmn.name)) em.set_thumbnail(url="http://play.pokemonshowdown.com/sprites/xyani/" + pkmn.name.lower() + ".gif") abilities = pkmn.abilities if len(abilities) == 3: hiddenAbility = GG.cleanWordDash(abilities[0].ability.name) ability = GG.cleanWordDash(abilities[1].ability.name) ability2 = GG.cleanWordDash(abilities[2].ability.name) elif len(abilities) == 2: hiddenAbility = GG.cleanWordDash(abilities[0].ability.name) ability = GG.cleanWordDash(abilities[1].ability.name) ability2 = None else: hiddenAbility = None ability = GG.cleanWordDash(abilities[0].ability.name) ability2 = None speed = pkmn.stats[0].base_stat speedEffort = pkmn.stats[0].effort specialDefense = pkmn.stats[1].base_stat specialDefenseEffort = pkmn.stats[1].effort specialAttack = pkmn.stats[2].base_stat specialAttackEffort = pkmn.stats[2].effort defense = pkmn.stats[3].base_stat defenseEffort = pkmn.stats[3].effort attack = pkmn.stats[4].base_stat attackEffort = pkmn.stats[4].effort hp = pkmn.stats[5].base_stat hpEffort = pkmn.stats[5].effort types = pkmn.types if len(types) == 2: type = GG.cleanWordDash(types[1].type.name) type2 = GG.cleanWordDash(types[0].type.name) color = GG.getColorOfType(type.lower()) else: type = GG.cleanWordDash(types[0].type.name) type2 = None color = GG.getColorOfType(type.lower()) height = pkmn.height weight = pkmn.weight getSpecieName = pkmn.species.url.replace( "http://pokeapi.co/api/v2/pokemon-species/", "") species = pb.pokemon_species(getSpecieName) eggGroups = "" for x in species.egg_groups: eggGroups += f"{GG.cleanWordDash(x.name)}\n" flavorText = GG.getFlavorText(species.flavor_text_entries) em.description = flavorText em.add_field(name="National Dex #", value=id) if ability2 is not None: em.add_field(name="Ability", value=ability) em.add_field(name="Ability", value=ability2) else: em.add_field(name="Ability", value=ability) if hiddenAbility is not None: em.add_field(name="Hidden Ability", value=hiddenAbility) if type2 is not None: em.add_field(name="Type", value=f"{type}/{type2}") else: em.add_field(name="Type", value=type) stats = f"HP: **{hp}**\nAttack: **{attack}**\nDefense: **{defense}**\nSp.Atk: **{specialAttack}**\nSp.Def: **{specialDefense}**\nSpeed: **{speed}**\nTotal: **{int(speed) + int(specialDefense) + int(specialAttack) + int(defense) + int(attack) + int(hp)} ** " em.add_field( name="Height", value=f"{round(int(height) * 3.937, 1)}\"") # decimeters to inches em.add_field( name="Weight", value=f"{round(int(weight) * 0.2205, 2)} lbs") # hectograms to pounds em.add_field(name="Egg Groups", value=eggGroups) if hpEffort != 0: em.add_field(name="EV Gained", value=f"HP: {hpEffort}") if attackEffort != 0: em.add_field(name="EV Gained", value=f"Attack: {attackEffort}") if defenseEffort != 0: em.add_field(name="EV Gained", value=f"Defense: {defenseEffort}") if specialAttackEffort != 0: em.add_field(name="EV Gained", value=f"Sp.Atk: {specialAttackEffort}") if specialDefenseEffort != 0: em.add_field(name="EV Gained", value=f"Sp.Def: {specialDefenseEffort}") if speedEffort != 0: em.add_field(name="EV Gained", value=f"Speed: {speedEffort}") em.add_field(name="Base Stats", value=stats, inline=False) em.colour = int("0x" + color, 0) return em