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})
Exemple #2
0
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})
Exemple #4
0
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})
Exemple #5
0
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
Exemple #6
0
 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}")
Exemple #7
0
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.')
Exemple #8
0
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
    })
Exemple #9
0
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
Exemple #10
0
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"))
Exemple #11
0
    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
Exemple #12
0
    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
Exemple #13
0
    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
Exemple #15
0
#!/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,
Exemple #16
0
    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)
Exemple #17
0
    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)
Exemple #18
0
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