async def getTM(id): em = discord.Embed() if isinstance(id,int): id = int(id) else: em.description = "Please use the TM ID, and not the move name." return em if id < 10: em.set_author(name=f"TM0{id}") else: em.set_author(name=f"TM{id}") if id == 1: StartID = id EndID = StartID + (APICallsPerTMTO50) elif id in range(2,50): StartID = ((id - 1) * APICallsPerTMTO50) + 1 EndID = StartID + (APICallsPerTMTO50) elif id in range(51, 92): StartID = APICallsPerTMTO50TOTAL + (((id - 51) * APICallsPerTMTO92)) + 1 EndID = StartID + (APICallsPerTMTO92) elif id in range(93, 95): StartID = APICallsPerTMTO92TOTAL + (((id - 93) * APICallsPerTMTO95)) + 1 EndID = StartID + (APICallsPerTMTO95) elif id in range(95, 100): StartID = APICallsPerTMTO95TOTAL + (((id - 95) * APICallsPerTMTO100)) + 1 EndID = StartID + (APICallsPerTMTO100) else: em.description("This TM doesn't exist.") return em COLORS = [] COLOROUTPUT = '' for x in range(StartID, EndID, 1): TM = pb.machine(x) em.add_field(name=f"{GG.cleanWordDash(TM.move.name)}", value=f"{GG.getGame(TM.version_group.name)}") move = pb.move(TM.move.name) if GG.getColorOfType(move.type.name) not in COLORS: COLORS.append(GG.getColorOfType(move.type.name)) i = 0 for x in range(i, len(COLORS), 2): i = x + 1 if i != len(COLORS): COLORS.append(color_mixer(COLORS[x], COLORS[(i)])) COLOROUTPUT = color_mixer(COLORS[x], COLORS[(i)]) COLOROUTPUT = COLOROUTPUT.replace("#", "") if COLOROUTPUT == "": COLOROUTPUT = COLORS[0] em.colour = int("0x" + COLOROUTPUT, 0) return em
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
async def getMove(move): move = GG.cleanWordSpace(move) mv = pb.move(move) em = discord.Embed() em.set_author(name=GG.cleanWordDash(mv.name)) em.description = GG.getEffectText(mv.effect_entries).replace( "$effect_chance", str(mv.effect_chance)) color = GG.getColorOfType(mv.type.name) em.colour = int("0x" + color, 0) em.add_field(name="Type", value=GG.cleanWordDash(mv.type.name)) em.add_field(name="Move Class", value=GG.cleanWordDash(mv.damage_class.name)) em.add_field(name="Power", value=str(mv.power)) if mv.accuracy is None: em.add_field(name="Accuracy", value=str(mv.accuracy)) else: em.add_field(name="Accuracy", value=str(mv.accuracy) + "%") em.add_field(name="PP", value=str(mv.pp)) if mv.priority > 1: em.add_field(name=f"Priority", value=f"+{mv.priority}") elif mv.priority < 0: em.add_field(name=f"Priority", value=f"{mv.priority}") else: em.add_field(name="Priority", value="Normal") if mv.meta.crit_rate > 0: em.add_field(name="Crit Rate", value=f"{mv.meta.crit_rate}%") if mv.meta.drain > 0: em.add_field(name="Drain", value=f"{mv.meta.drain}%") if mv.meta.flinch_chance > 0: em.add_field(name="Flinch Chance", value=f"{mv.meta.flinch_chance}%") if mv.meta.healing > 0: em.add_field(name="Healing", value=f"{mv.meta.healing}%") if mv.meta.max_hits is not None: em.add_field(name="Number of Hits", value=f"{mv.meta.min_hits}-{mv.meta.max_hits}") if mv.meta.max_turns is not None: em.add_field(name="Number of Turns", value=f"{mv.meta.min_turns}-{mv.meta.max_turns}") if GG.cleanWordDash(mv.meta.ailment.name) != "None": em.add_field(name="Ailment", value=GG.cleanWordDash(mv.meta.ailment.name)) if mv.damage_class.name == "status": em.add_field(name="Ailment Chance", value=f"100%") else: em.add_field(name="Ailment Chance", value=f"{str(mv.meta.ailment_chance)}%") target = pb.move_target(mv.target.name) em.add_field(name="Targets", value=GG.getDescriptionText(target.descriptions), inline=False) return em
async def getType(type_): ty = pb.type_(GG.cleanWordSpace(type_)) em = discord.Embed() name = GG.getNames(ty.names) em.set_author(name=name) color = GG.getColorOfType(name.lower()) em.colour = int("0x" + color, 0) em.add_field(name="Take Damage:", value="\u200b", inline=False) NDF = "" for y in ty.damage_relations.no_damage_from: NDF += f"{GG.cleanWordDash(y['name'])}\n" if NDF == "": NDF = "-" em.add_field(name="No Effect (0%)", value=NDF) HDF = "" for y in ty.damage_relations.half_damage_from: HDF += f"{GG.cleanWordDash(y['name'])}\n" if HDF == "": HDF = "-" em.add_field(name="Not Very Effective (50%)", value=HDF) DDF = "" for y in ty.damage_relations.double_damage_from: DDF += f"{GG.cleanWordDash(y['name'])}\n" if DDF == "": DDF = "-" em.add_field(name="Super-Effective (200%)", value=DDF) em.add_field(name="Deal Damage:", value="\u200b", inline=False) NDT = "" for y in ty.damage_relations.no_damage_to: NDT += f"{GG.cleanWordDash(y['name'])}\n" if NDT == "": NDT = "-" em.add_field(name="No Effect (0%)", value=NDT) HDT = "" for y in ty.damage_relations.half_damage_to: HDT += f"{GG.cleanWordDash(y['name'])}\n" if HDT == "": HDT = "-" em.add_field(name="Not Very Effective (50%)", value=HDT) DDT = "" for y in ty.damage_relations.double_damage_to: DDT += f"{GG.cleanWordDash(y['name'])}\n" if DDT == "": DDT = "-" em.add_field(name="Super-Effective (200%)", value=DDT) return em
async def getStrength(type_): ty = pb.type_(GG.cleanWordSpace(type_)) em = discord.Embed() name = GG.getNames(ty.names) em.set_author(name=name) color = GG.getColorOfType(name.lower()) em.colour = int("0x" + color, 0) DDT = "" for y in ty.damage_relations.double_damage_to: DDT += f"{GG.cleanWordDash(y['name'])}\n" if DDT == "": DDT = "-" em.add_field(name="Strong against:", value=DDT) NDF = "" for y in ty.damage_relations.no_damage_from: NDF += f"{GG.cleanWordDash(y['name'])}\n" if NDF == "": NDF = "-" em.add_field(name="Take no damage from:", value=NDF) return em
async def getMatchup(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)) em.set_thumbnail(url="http://play.pokemonshowdown.com/sprites/xyani/" + pkmn.name.lower() + ".gif") types = pkmn.types if len(types) == 2: type = GG.cleanWordDash(types[1].type.name) color = GG.getColorOfType(type.lower()) else: type = GG.cleanWordDash(types[0].type.name) color = GG.getColorOfType(type.lower()) em.colour = int("0x" + color, 0) DNB = [] USEDTYPES = [] WT1 = [] IT1 = [] RT1 = [] WT2 = [] IT2 = [] RT2 = [] WT = [] IT = [] RT = [] if len(types) == 2: type1_ = pb.type_(GG.cleanWordSpace(types[0].type.name)) for y in type1_.damage_relations.double_damage_from: WT1.append(f"{GG.cleanWordDash(y['name'])}") for y in type1_.damage_relations.no_damage_from: IT1.append(f"{GG.cleanWordDash(y['name'])}") for y in type1_.damage_relations.half_damage_from: RT1.append(f"{GG.cleanWordDash(y['name'])}") type2_ = pb.type_(GG.cleanWordSpace(types[1].type.name)) for y in type2_.damage_relations.double_damage_from: WT2.append(f"{GG.cleanWordDash(y['name'])}") for y in type2_.damage_relations.no_damage_from: IT2.append(f"{GG.cleanWordDash(y['name'])}") for y in type2_.damage_relations.half_damage_from: RT2.append(f"{GG.cleanWordDash(y['name'])}") await doubleType(DNB, IT, IT1, IT2, RT, RT1, RT2, USEDTYPES, WT, WT1, WT2) else: type_ = pb.type_(GG.cleanWordSpace(types[0].type.name)) for y in type_.damage_relations.double_damage_from: WT1.append(f"{GG.cleanWordDash(y['name'])}") for y in type_.damage_relations.no_damage_from: IT1.append(f"{GG.cleanWordDash(y['name'])}") for y in type_.damage_relations.half_damage_from: RT1.append(f"{GG.cleanWordDash(y['name'])}") await singleType(IT,RT,WT,IT1,RT1,WT1,USEDTYPES) for x in GG.TYPES: if x not in USEDTYPES: DNB.append('{"type":"' + GG.cleanWordDash(x) + '","effectiveness":"1x"}') DNBString = "" for x in DNB: x = json.loads(x) DNBString += f"{x['type']}: {x['effectiveness']}\n" WTString = "" for x in WT: x = json.loads(x) WTString += f"{x['type']}: {x['effectiveness']}\n" if WTString == "": WTString = "\u200b" ITString = "" for x in IT: x = json.loads(x) ITString += f"{x['type']}: {x['effectiveness']}\n" if ITString == "": ITString = "\u200b" RTString = "" for x in RT: x = json.loads(x) RTString += f"{x['type']}: {x['effectiveness']}\n" if RTString == "": RTString = "\u200b" em.add_field(name="Damaged normally by", value=DNBString) em.add_field(name="Weak to", value=WTString) em.add_field(name="Immune to", value=ITString) em.add_field(name="Resistant to", value=RTString) return em
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
def getWeakness(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)) em.set_thumbnail(url="http://play.pokemonshowdown.com/sprites/xyani/" + pkmn.name.lower() + ".gif") types = pkmn.types if len(types) == 2: type = GG.cleanWordDash(types[1].type.name) color = GG.getColorOfType(type.lower()) else: type = GG.cleanWordDash(types[0].type.name) color = GG.getColorOfType(type.lower()) DNB = [] USEDTYPES = [] WT1 = [] IT1 = [] RT1 = [] WT2 = [] IT2 = [] RT2 = [] WT = [] IT = [] RT = [] if len(types) == 2: type1_ = pb.type_(GG.cleanWordSpace(types[0].type.name)) for y in type1_.damage_relations.double_damage_from: WT1.append(f"{GG.cleanWordDash(y['name'])}") for y in type1_.damage_relations.no_damage_from: IT1.append(f"{GG.cleanWordDash(y['name'])}") for y in type1_.damage_relations.half_damage_from: RT1.append(f"{GG.cleanWordDash(y['name'])}") type2_ = pb.type_(GG.cleanWordSpace(types[1].type.name)) for y in type2_.damage_relations.double_damage_from: WT2.append(f"{GG.cleanWordDash(y['name'])}") for y in type2_.damage_relations.no_damage_from: IT2.append(f"{GG.cleanWordDash(y['name'])}") for y in type2_.damage_relations.half_damage_from: RT2.append(f"{GG.cleanWordDash(y['name'])}") else: type = pb.type_(GG.cleanWordSpace(type.name)) for y in type.damage_relations.double_damage_from: WT1.append(f"{GG.cleanWordDash(y['name'])}") for y in type.damage_relations.no_damage_from: IT1.append(f"{GG.cleanWordDash(y['name'])}") for y in type.damage_relations.half_damage_from: RT1.append(f"{GG.cleanWordDash(y['name'])}") for x in WT1: if x in WT2: WT.append('{"type":"' + x + '","effectiveness":"4x"}') USEDTYPES.append(x.lower()) else: if x in RT2: DNB.append('{"type":"' + x + '","effectiveness":"1x"}') USEDTYPES.append(x.lower()) else: WT.append('{"type":"' + x + '","effectiveness":"2x"}') USEDTYPES.append(x.lower()) for x in WT2: if x not in WT1 and x not in RT1 and x not in IT1 and x not in IT2: WT.append('{"type":"' + x + '","effectiveness":"2x"}') USEDTYPES.append(x.lower()) for x in IT1: IT.append('{"type":"' + x + '","effectiveness":"0x"}') USEDTYPES.append(x.lower()) for x in IT2: IT.append('{"type":"' + x + '","effectiveness":"0x"}') USEDTYPES.append(x.lower()) for x in RT1: if x in RT2: RT.append('{"type":"' + x + '","effectiveness":"0.25x"}') USEDTYPES.append(x.lower()) else: if x in WT2: DNB.append('{"type":"' + x + '","effectiveness":"1x"}') USEDTYPES.append(x.lower()) else: RT.append('{"type":"' + x + '","effectiveness":"0.5x"}') USEDTYPES.append(x.lower()) for x in RT2: if x not in RT1 and x not in WT1 and x not in IT1 and x not in IT2: RT.append('{"type":"' + x + '","effectiveness":"0.5x"}') USEDTYPES.append(x.lower()) for x in GG.TYPES: if x not in USEDTYPES: DNB.append('{"type":"' + GG.cleanWordDash(x) + '","effectiveness":"1x"}') DNBString = "" for x in DNB: x = json.loads(x) DNBString += f"{x['type']}: {x['effectiveness']}\n" WTString = "" for x in WT: x = json.loads(x) WTString += f"{x['type']}: {x['effectiveness']}\n" ITString = "" for x in IT: x = json.loads(x) ITString += f"{x['type']}: {x['effectiveness']}\n" RTString = "" for x in RT: x = json.loads(x) RTString += f"{x['type']}: {x['effectiveness']}\n" em.add_field(name="Damaged normally by", value=DNBString) em.add_field(name="Weak to", value=WTString) em.add_field(name="Immune to", value=ITString) em.add_field(name="Resistant to", value=RTString) return em