From 4fd8826d22626a1c46b64495daff8a83dee329ea Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ma=C3=ABl?= Date: Sun, 11 Jun 2017 14:04:03 -0400 Subject: [PATCH] Et bim V6 ET y'a les cogs mon p'tit tabarnak ! --- .idea/cogue.iml | 11 + .../inspectionProfiles/profiles_settings.xml | 7 + .idea/misc.xml | 4 + .idea/modules.xml | 8 + .idea/workspace.xml | 974 ++++++++++++++++++ README.md | 23 - arrays.py | 8 - bot.py | 140 +++ botassets/__init__.py | 1 - botassets/arrays.py | 7 - botassets/imports.py | 21 - cogs/admin.py | 70 ++ cogs/basics.py | 42 + cogs/ci.py | 144 +++ cogs/funs.py | 124 +++ cogs/search.py | 122 +++ cogs/utility.py | 126 +++ cogs/utils/__init__.py | 0 .../utils/__pycache__/__init__.cpython-35.pyc | Bin 0 -> 136 bytes cogs/utils/__pycache__/checks.cpython-35.pyc | Bin 0 -> 2602 bytes cogs/utils/checks.py | 58 ++ cogs/utils/config.py | 67 ++ cogs/utils/formats.py | 75 ++ cogs/utils/maps.py | 147 +++ cogs/utils/paginator.py | 212 ++++ config.py | 22 - logs/NOT A EMPTY FOLDER | 0 logs/Not a empty folder | 1 - main.py | 595 ----------- msg/ci-info.md | 8 - msg/game.txt | 1 - msg/help.md | 36 - msg/identity.md | 9 - msg/info.md | 21 - msg/jokes.md | 1 - params.json | 6 + readme.md | 39 + start-windows.bat | 4 - start.sh | 2 +- texts/ci-info.md | 9 + {msg => texts}/clocks.md | 2 +- texts/help.md | 36 + texts/info.md | 18 + texts/jokes.json | 14 + texts/pokemons.json | 1 + {msg => texts}/search.md | 4 +- texts/ytb.json | 15 + 47 files changed, 2473 insertions(+), 762 deletions(-) create mode 100644 .idea/cogue.iml create mode 100644 .idea/inspectionProfiles/profiles_settings.xml create mode 100644 .idea/misc.xml create mode 100644 .idea/modules.xml create mode 100644 .idea/workspace.xml delete mode 100644 README.md delete mode 100755 arrays.py create mode 100644 bot.py delete mode 100644 botassets/__init__.py delete mode 100755 botassets/arrays.py delete mode 100644 botassets/imports.py create mode 100644 cogs/admin.py create mode 100644 cogs/basics.py create mode 100644 cogs/ci.py create mode 100644 cogs/funs.py create mode 100644 cogs/search.py create mode 100644 cogs/utility.py create mode 100644 cogs/utils/__init__.py create mode 100644 cogs/utils/__pycache__/__init__.cpython-35.pyc create mode 100644 cogs/utils/__pycache__/checks.cpython-35.pyc create mode 100644 cogs/utils/checks.py create mode 100644 cogs/utils/config.py create mode 100644 cogs/utils/formats.py create mode 100644 cogs/utils/maps.py create mode 100644 cogs/utils/paginator.py delete mode 100755 config.py create mode 100644 logs/NOT A EMPTY FOLDER delete mode 100644 logs/Not a empty folder delete mode 100755 main.py delete mode 100644 msg/ci-info.md delete mode 100644 msg/game.txt delete mode 100644 msg/help.md delete mode 100644 msg/identity.md delete mode 100644 msg/info.md delete mode 100644 msg/jokes.md create mode 100644 params.json create mode 100644 readme.md delete mode 100755 start-windows.bat create mode 100644 texts/ci-info.md rename {msg => texts}/clocks.md (71%) create mode 100644 texts/help.md create mode 100644 texts/info.md create mode 100644 texts/jokes.json create mode 100644 texts/pokemons.json rename {msg => texts}/search.md (53%) create mode 100644 texts/ytb.json diff --git a/.idea/cogue.iml b/.idea/cogue.iml new file mode 100644 index 0000000..6711606 --- /dev/null +++ b/.idea/cogue.iml @@ -0,0 +1,11 @@ + + + + + + + + + + \ No newline at end of file diff --git a/.idea/inspectionProfiles/profiles_settings.xml b/.idea/inspectionProfiles/profiles_settings.xml new file mode 100644 index 0000000..c23ecac --- /dev/null +++ b/.idea/inspectionProfiles/profiles_settings.xml @@ -0,0 +1,7 @@ + + + + \ No newline at end of file diff --git a/.idea/misc.xml b/.idea/misc.xml new file mode 100644 index 0000000..4e1dbee --- /dev/null +++ b/.idea/misc.xml @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/.idea/modules.xml b/.idea/modules.xml new file mode 100644 index 0000000..2a6e1cb --- /dev/null +++ b/.idea/modules.xml @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/.idea/workspace.xml b/.idea/workspace.xml new file mode 100644 index 0000000..7b071c2 --- /dev/null +++ b/.idea/workspace.xml @@ -0,0 +1,974 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + datetime + args_ + utc = + os_info + rigole + bobon + fast + requests + joke + time + clock + choic + edit + ctx + print( + delete + message + ping + e + you cant + avatar + args + do + warn + is_owner + thuna + wi + str + 269156684155453451 + print + + + + + + + + + true + DEFINITION_ORDER + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + project + + + + + + + + + + + + + + + + + + + + + + + + + + + + 1495903833631 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + file://$PROJECT_DIR$/cogs/admin.py + + + file://$PROJECT_DIR$/cogs/admin.py + 42 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/README.md b/README.md deleted file mode 100644 index ba74265..0000000 --- a/README.md +++ /dev/null @@ -1,23 +0,0 @@ -# TuxBot - -## Description -TuxBot, un bot discord écrit en Python. - -Ici se trouve le code source de ce bot proventant du serveur Discord "Aide GNU/Linux-Fr". - -## Installation -- Installez Python3.5 ou plus -- Installez PIP -- Installez ``requirements.txt`` (``pip install -r requirements.txt``) -- Editez à votre guise le fichier ``config.py`` en entrant votre token -- Si vous êtes sous windows lancez le fichier ``start-windows.bat`` et si vous êtes sous linux lancer ``start.sh`` ! - -## Permissions : -- Gerer les messages -- Epingler les messages -- Avoir le grade ``bot-commander`` pour les commandes d'administration - -## Liens utiles -- Invitation au serveur discord "Aide GNU/Linux-Fr" => http://discord.gg/B5TzW7x -- Github de la librairie ``discord.py`` => https://github.com/Rapptz/discord.py -- Site du développeur du bot => https://outout.tech diff --git a/arrays.py b/arrays.py deleted file mode 100755 index bbd691d..0000000 --- a/arrays.py +++ /dev/null @@ -1,8 +0,0 @@ -pokemon = ['Ratifeu','Squirtle','Ninetales','Bulbizarre','Carabaffe','Carapuce','Roucarnage','Nidorino','Akwakwak','Miaouss','Ratifeu','Squirtle','Ninetales','Bulbizarre','Carabaffe','Carapuce','Roucarnage','Nidorino','Akwakwak','Miaouss','outout14','Psyko','Arcanin','Boustiflor','Fantominus','Voltorbe','Excelangue','Poissirène','Magicarpe','Électhor','Joliflor','Cotovol','Mentali'] -jokes = ['Linux : lose your time\nMac : lose your money','Un virus est un programme nocif.\nIl est petit, rapide, prend peu de place en mémoire et sais se faire discret.\nOSX n\'est donc pas un virus, c\'est un bug.','Quel est le plus gros Apple du monde ? \n *Le big MAC...*','OSX est à l\'informatique ce que la tectonick est à la musique...','Si les OS étaient des élèves:\nOSX: Le plus vieux\nLinux: Le premier de la classe\nWindows: Le différent victimisé','Windows, Mac Os et Linux sont aux toilettes. Mac OS se lave complètement les mains en sortant et déclare : Rien de plus sûr que ça ! Linux se lave uniquement deux doigts : Pas besoin de plus de sécurité ! Windows sort sans se laver les mains : Chez Windows, on ne s\'urine pas dessus !','https://cdn.discordapp.com/attachments/187284361505144833/187287424852951042/unknown.png !','Les hyperboles sa sert à manger des hyper-soupes :3 (Lawl!)','Attention : une étude récente a prouvé que la consommation prolongée de drogues peut définitivement endommager la mémoire à court terme.','https://images-1.discordapp.net/.eJwlyFEKhCAQANC7eAAn09TtNmJisTUjzkQf0d1bWHhf71Zn39WsVpHGM8Cycaa-aBbqqRZdiepeUttYZzogiaS8HgWFwcQwRme9mYbJOBet_VcwYbTB-8_wAyd-kS7UDat6XggYIuY.Tzl6-x2F39v_DjLRKkOBafZcvUg.png','C\'est un aveugle qui rentre dans un bar, qui rentre dans une chaise, qui rentre dans une table,..', 'Le comble de Windows, c’est que pour l’arrêter, il faut cliquer sur démarrer x)', 'C\'est un type qui rentre dans un bar et qui s\'exclame "Salut c\'est moi !", tout le monde se retourne, c\'était pas lui...', 'Que prend un éléphant dans un bar ? De la place...', 'Un zoophile prend son élan avant de rentrer dans un bar :D !', 'Pourquoi un aveugle vous tutoi ? Car il ne vous voit pas.....', 'C\'est une requête SQL qui rentre dans un bar et qui s\'adresse à deux tables : Puis-je vous joindre ?','Combien de développeurs faut-il pour remplacer une ampoule grillée ? Aucun, c\'est un problème Hardware.','4h du matin un homme rentre chez lui mort bourré. Pour ne pas se faire prendre par sa femme il decide de se faire un jus de citron. Le lendemain matin sa femme lui crie dessus. "Tu as encore bus comme un trou hier" L\'homme: "Mais non" La femme: "A ouais et le cannari dans le presse citron il s\'est suicider"', 'Il ne faut jamais croire les girafes, c\'est un cou monté.', 'Quelle est la seule fonctionnalité qui n\'as jamais planté sur Windows ? Le BSOD', 'Windows n\'aime pas quel l\'on appel un dossier con, car c\'est le synonyme de son créateur (Gaston Portail)', 'Pourquoi personne n\'aime ISS? Car il était utilisé par les NAZIS', 'Sous Mac il n\'y a qu\'un virus : MacOSX', 'Le meilleur entreprise de système d\'exploitation ? Apple : Ils exploitent ton argent', 'Windows est un OS. Il est dur, n\'as pas de goût et on veut l\'enterrer', '```Apple --> perdre son argent a force de tout acheter \n Android --> perdre ses données a force de se faire pirater```', 'Plusieurs scientifiques sont entrain de se demander quel est le pire : "Utiliser Windows 8" ou "Ecouter du Jul"'] -youtube = ['KickSama, dessins annimés : https://www.youtube.com/user/TheKickGuy', 'U=RI, videos sur l\'électricité | Lien : https://www.youtube.com/channel/UCVqx3vXNghSqUcVg2nmegYA', 'Outout, chaine vraiment nul et peu alimenté du créateur du bot | Lien : https://www.youtube.com/channel/UC2XpYyT5X5tq9UQpXdc1JaQ', 'SuperJDay64, LP sur des jeux de type mario | Lien : https://www.youtube.com/channel/UCjkQgODdmhR9I2TatJZtGSQ/about', 'Monsieur Plouf, critiques de jeux AAA | Lien : https://www.youtube.com/channel/UCrt_PUTF9LdJyuDfXweHwuQ', 'MaxEstLa, vidéos réaction sur d\'autres chaines (c\'est presque du clash ) | Lien : https://www.youtube.com/channel/UCsk9XguwTfgbenCZ4AlIcYQ', 'BastienLePirate, astuces youtube, vidéos sur des ytubers, ...| Lien : https://www.youtube.com/channel/UCJFGk2A34R-99RIVDK2Hlwg', 'Blender Foundation, animations libre de droits réalisé en utilisant blender | Lien : https://www.youtube.com/channel/UCSMOQeBJ2RAnuFungnQOxLg', 'Met-Hardware, chaine youtube sur l\'hardware et des let\'s play ! Lien : https://www.youtube.com/channel/UC7rse81OttysA1m1yn_f-OA', 'Les teachers du net, tutoriels | Lien : https://www.youtube.com/user/hounwanou1993','5secondfilms (Anglais), des courts-métrage | Lien : https://www.youtube.com/user/5secondfilms','TomSka (Anglais), des courts-métrages | Lien : https://www.youtube.com/user/TomSka','Trash, des Tops | Lien : https://www.youtube.com/channel/UCfGfdZuYifBYb1fmZcL1JBQ','ElectronikHeart, l\'informatique sous un angle différent | Lien : https://www.youtube.com/user/ElectronikHeart','Blender Foundation, des court-métrages réalisés avec Blender | Lien : https://www.youtube.com/channel/UCSMOQeBJ2RAnuFungnQOxLg','Caljbeut, politique, etc... en dessins | Lien : https://www.youtube.com/channel/UCNM-UkIP1BL5jv9ZrN5JMCA','SetSolution, des concepts d\'Iphones, etc... | Lien : https://www.youtube.com/channel/UCAXlQL_BcggjH6MpMSekjYg'] -policier = [" Humm... Overdose de GNU/Linux, suivez moi...", " Ca fonctionne comment un ethylotest, vous savez vous ?", " Wow, vous êtes trop bourré, z'avez cassé mon ethylotest!", " Heeu, vous êtes à vélo mais vous êtes bourré, c'est légal ?", " Vous n'avez pas consomé d'alchool mais vous avez consomé du Canabis, c'est pas ma mission, circulez !"] -admin_cmd = ["say", "clear", "changegame", "sendlogs"] -array_emoji = ["1⃣", "2⃣", "3⃣", "4⃣", "5⃣", "6⃣", "7⃣", "8⃣", "9⃣", "🔟"] -wlcm_msgs = ['Bienvenue à toi, {0.mention} sur le mangifique discord {0.server.name} !', 'Souhaitons la bienvenue à notre nouveau membre, {0.mention} sur notre super serveur !', 'Welcome :heart:, {0.mention} sur le discord {0.server.name} !'] -adios_msgs = ['Pourquoi {0.name} nous à t-il quitté ?!? Il faudra qu\'il m\'explique !', '{0.name} nous a malheuresement quitté**, il a fait une grave erreur, nous le traquerons puis nous lui feront avaler le CD de Ubuntu !!! :smirk:', '{0.name} est mort, enfin il à quitté notre discord...', ':sob: Ouiiin... {0.name} est partit de notre beau serveur !', '{0.name} nous à quitté, on ne l\'oublieras jamais... Enfaite c\'était qui encore {0.name} ?'] diff --git a/bot.py b/bot.py new file mode 100644 index 0000000..399bfde --- /dev/null +++ b/bot.py @@ -0,0 +1,140 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- + +__author__ = "Maël / Outout" +__licence__ = "WTFPL Licence 2.0" + +from discord.ext import commands +import discord +from cogs.utils import checks +import datetime, re +import json, asyncio +import copy +import logging +from logging.handlers import RotatingFileHandler +import traceback +import sys +from collections import Counter + +description = """ +Je suis TuxBot, le bot qui vit de l'OpenSource ! ;) +""" + +l_extensions = [ + + 'cogs.basics', + 'cogs.admin', + 'cogs.funs', + 'cogs.utility', + 'cogs.search', + 'cogs.ci' +] + +# DISCORD LOGGER # +discord_logger = logging.getLogger('discord') +discord_logger.setLevel(logging.CRITICAL) +log = logging.getLogger() +log.setLevel(logging.INFO) +handler = logging.FileHandler(filename='logs/discord.log', encoding='utf-8', mode='w') +log.addHandler(handler) + +help_attrs = dict(hidden=True, in_help=True, name="DONOTUSE") + + +# CREDENTIALS # +try: + def load_credentials(): + with open('params.json') as f: + return json.load(f) +except: + print("Le fichier de paramètre est introuvable, veuillez le créer et le configurer.") + +prefix = ['.'] +bot = commands.Bot(command_prefix=prefix, description=description, pm_help=None, help_attrs=help_attrs) + +@bot.event +async def on_command_error(error, ctx): + if isinstance(error, commands.NoPrivateMessage): + await bot.send_message(ctx.message.author, 'This command cannot be used in private messages.') + elif isinstance(error, commands.DisabledCommand): + await bot.send_message(ctx.message.author, 'Sorry. This command is disabled and cannot be used.') + elif isinstance(error, commands.CommandInvokeError): + print('In {0.command.qualified_name}:'.format(ctx), file=sys.stderr) + traceback.print_tb(error.original.__traceback__) + print('{0.__class__.__name__}: {0}'.format(error.original), file=sys.stderr) + +@bot.event +async def on_ready(): + print('---------------------') + print('Logged in as :') + print('Username: ' + bot.user.name) + print('ID: ' + bot.user.id) + print('---------------------') + await bot.change_presence(game=discord.Game(name="Manger des pommes ! .help !"), status=discord.Status("dnd"), afk=False) + if not hasattr(bot, 'uptime'): + bot.uptime = datetime.datetime.utcnow() + +@bot.event +async def on_resumed(): + print('resumed...') + +@bot.event +async def on_message(message): + if message.author.bot: + return + + if re.search(r'^(cc |bonjour |salut |hello |bjr |slt |s\'lut)?([^ ]+ ){0,3}(qui s\'y conna(î|i)(t|s)|des gens|quelqu\'un|qqun|des personnes|du monde s\'y connait)[^\?]+\?$',message.content): + await bot.send_message(message.channel, ":question: N'hésite pas à poser ta question directement {}, il n'est pas utile de demander si quelqu'un connait quelque chose avant ! :wink:".format(message.author.mention)) + + if re.match(r'^<@(\w+)>$', message.content): + await bot.send_message(message.channel, message.author.mention + " > Tu voulais lui dire quoi ? Tu le mentionne sans message !") + + if re.match(r"[A-Z]", message.content) and not message.author.bot and len(message.content) > 5: + await bot.send_message(message.channel, message.author.mention + " > Evite les messages en majuscule, ce n'est pas la peine de crier !") + + await bot.process_commands(message) + +@bot.command(pass_context=True, hidden=True) +@checks.is_owner() +async def do(ctx, times : int, *, command): + """Repeats a command a specified number of times.""" + msg = copy.copy(ctx.message) + msg.content = command + for i in range(times): + await bot.process_commands(msg) + + +## GITHUB CMD ## +@bot.command() +async def github(): + """Pour voir mon code""" + text = "How tu veux voir mon repos Github pour me disséquer ? Pas de soucis ! Je suis un Bot, je ne ressens pas la douleur !\n https://github.com/outout14/tuxbot-bot" + em = discord.Embed(title='Repos TuxBot-Bot', description=text, colour=0xE9D460) + em.set_author(name='Outout', icon_url="https://avatars0.githubusercontent.com/u/14958554?v=3&s=400") + await bot.say(embed=em) + +## LOAD ## +if __name__ == '__main__': + try: + credentials = load_credentials() + token = credentials['token'] + bot.client_id = credentials['client_id'] + except: + print("Impossible de démarer tuxbot.") + + + for extension in l_extensions: + try: + bot.load_extension(extension) + except Exception as e: + print('Impossible de charger l\'extension {}\n{}: {}'.format(extension, type(e).__name__, e)) + + try: + bot.run(token) + except: + print("Une erreur est survenue avec votre Token, merci de le vérifier.") + + handlers = log.handlers[:] + for hdlr in handlers: + hdlr.close() + log.removeHandler(hdlr) diff --git a/botassets/__init__.py b/botassets/__init__.py deleted file mode 100644 index 174da67..0000000 --- a/botassets/__init__.py +++ /dev/null @@ -1 +0,0 @@ -__all__ = ["imports","arrays"] diff --git a/botassets/arrays.py b/botassets/arrays.py deleted file mode 100755 index 95973e9..0000000 --- a/botassets/arrays.py +++ /dev/null @@ -1,7 +0,0 @@ -pokemon = ['Ratifeu','Squirtle','Ninetales','Bulbizarre','Carabaffe','Carapuce','Roucarnage','Nidorino','Akwakwak','Miaouss','Ratifeu','Squirtle','Ninetales','Bulbizarre','Carabaffe','Carapuce','Roucarnage','Nidorino','Akwakwak','Miaouss','outout14','Psyko','Arcanin','Boustiflor','Fantominus','Voltorbe','Excelangue','Poissirène','Magicarpe','Électhor','Joliflor','Cotovol','Mentali'] -jokes = ['Linux : lose your time\nMac : lose your money','Un virus est un programme nocif.\nIl est petit, rapide, prend peu de place en mémoire et sais se faire discret.\nOSX n\'est donc pas un virus, c\'est un bug.','Quel est le plus gros Apple du monde ? \n *Le big MAC...*','OSX est à l\'informatique ce que la tectonick est à la musique...','Si les OS étaient des élèves:\nOSX: Le plus vieux\nLinux: Le premier de la classe\nWindows: Le différent victimisé','Windows, Mac Os et Linux sont aux toilettes. Mac OS se lave complètement les mains en sortant et déclare : Rien de plus sûr que ça ! Linux se lave uniquement deux doigts : Pas besoin de plus de sécurité ! Windows sort sans se laver les mains : Chez Windows, on ne s\'urine pas dessus !','https://cdn.discordapp.com/attachments/187284361505144833/187287424852951042/unknown.png !','Les hyperboles sa sert à manger des hyper-soupes :3 (Lawl!)','Attention : une étude récente a prouvé que la consommation prolongée de drogues peut définitivement endommager la mémoire à court terme.','https://images-1.discordapp.net/.eJwlyFEKhCAQANC7eAAn09TtNmJisTUjzkQf0d1bWHhf71Zn39WsVpHGM8Cycaa-aBbqqRZdiepeUttYZzogiaS8HgWFwcQwRme9mYbJOBet_VcwYbTB-8_wAyd-kS7UDat6XggYIuY.Tzl6-x2F39v_DjLRKkOBafZcvUg.png','C\'est un aveugle qui rentre dans un bar, qui rentre dans une chaise, qui rentre dans une table,..', 'Le comble de Windows, c’est que pour l’arrêter, il faut cliquer sur démarrer x)', 'C\'est un type qui rentre dans un bar et qui s\'exclame "Salut c\'est moi !", tout le monde se retourne, c\'était pas lui...', 'Que prend un éléphant dans un bar ? De la place...', 'Un zoophile prend son élan avant de rentrer dans un bar :D !', 'Pourquoi un aveugle vous tutoi ? Car il ne vous voit pas.....', 'C\'est une requête SQL qui rentre dans un bar et qui s\'adresse à deux tables : Puis-je vous joindre ?','Combien de développeurs faut-il pour remplacer une ampoule grillée ? Aucun, c\'est un problème Hardware.','4h du matin un homme rentre chez lui mort bourré. Pour ne pas se faire prendre par sa femme il decide de se faire un jus de citron. Le lendemain matin sa femme lui crie dessus. "Tu as encore bus comme un trou hier" L\'homme: "Mais non" La femme: "A ouais et le cannari dans le presse citron il s\'est suicider"', 'Il ne faut jamais croire les girafes, c\'est un cou monté.', 'Quelle est la seule fonctionnalité qui n\'as jamais planté sur Windows ? Le BSOD', 'Windows n\'aime pas quel l\'on appel un dossier con, car c\'est le synonyme de son créateur (Gaston Portail)', 'Pourquoi personne n\'aime ISS? Car il était utilisé par les NAZIS', 'Sous Mac il n\'y a qu\'un virus : MacOSX', 'Le meilleur entreprise de système d\'exploitation ? Apple : Ils exploitent ton argent', 'Windows est un OS. Il est dur, n\'as pas de goût et on veut l\'enterrer', '```Apple --> perdre son argent a force de tout acheter \n Android --> perdre ses données a force de se faire pirater```', 'Plusieurs scientifiques sont entrain de se demander quel est le pire : "Utiliser Windows 8" ou "Ecouter du Jul"'] -youtube = ['KickSama, dessins annimés : https://www.youtube.com/user/TheKickGuy', 'U=RI, videos sur l\'électricité | Lien : https://www.youtube.com/channel/UCVqx3vXNghSqUcVg2nmegYA', 'Outout, chaine vraiment nul et peu alimenté du créateur du bot | Lien : https://www.youtube.com/channel/UC2XpYyT5X5tq9UQpXdc1JaQ', 'SuperJDay64, LP sur des jeux de type mario | Lien : https://www.youtube.com/channel/UCjkQgODdmhR9I2TatJZtGSQ/about', 'Monsieur Plouf, critiques de jeux AAA | Lien : https://www.youtube.com/channel/UCrt_PUTF9LdJyuDfXweHwuQ', 'MaxEstLa, vidéos réaction sur d\'autres chaines (c\'est presque du clash ) | Lien : https://www.youtube.com/channel/UCsk9XguwTfgbenCZ4AlIcYQ', 'BastienLePirate, astuces youtube, vidéos sur des ytubers, ...| Lien : https://www.youtube.com/channel/UCJFGk2A34R-99RIVDK2Hlwg', 'Blender Foundation, animations libre de droits réalisé en utilisant blender | Lien : https://www.youtube.com/channel/UCSMOQeBJ2RAnuFungnQOxLg', 'Met-Hardware, chaine youtube sur l\'hardware et des let\'s play ! Lien : https://www.youtube.com/channel/UC7rse81OttysA1m1yn_f-OA', 'Les teachers du net, tutoriels | Lien : https://www.youtube.com/user/hounwanou1993','5secondfilms (Anglais), des courts-métrage | Lien : https://www.youtube.com/user/5secondfilms','TomSka (Anglais), des courts-métrages | Lien : https://www.youtube.com/user/TomSka','Trash, des Tops | Lien : https://www.youtube.com/channel/UCfGfdZuYifBYb1fmZcL1JBQ','ElectronikHeart, l\'informatique sous un angle différent | Lien : https://www.youtube.com/user/ElectronikHeart','Blender Foundation, des court-métrages réalisés avec Blender | Lien : https://www.youtube.com/channel/UCSMOQeBJ2RAnuFungnQOxLg','Caljbeut, politique, etc... en dessins | Lien : https://www.youtube.com/channel/UCNM-UkIP1BL5jv9ZrN5JMCA','SetSolution, des concepts d\'Iphones, etc... | Lien : https://www.youtube.com/channel/UCAXlQL_BcggjH6MpMSekjYg'] -policier = [" Humm... Overdose de GNU/Linux, suivez moi...", " Ca fonctionne comment un ethylotest, vous savez vous ?", " Wow, vous êtes trop bourré, z'avez cassé mon ethylotest!", " Heeu, vous êtes à vélo mais vous êtes bourré, c'est légal ?", " Vous n'avez pas consomé d'alchool mais vous avez consomé du Canabis, c'est pas ma mission, circulez !"] -array_emoji = ["1⃣", "2⃣", "3⃣", "4⃣", "5⃣", "6⃣", "7⃣", "8⃣", "9⃣", "🔟"] -wlcm_msgs = ['Bienvenue à toi, {0.mention} sur le mangifique discord {0.server.name} !', 'Souhaitons la bienvenue à notre nouveau membre, {0.mention} sur notre super serveur !', 'Welcome :heart:, {0.mention} sur le discord {0.server.name} !'] -adios_msgs = ['Pourquoi {0.name} nous à t-il quitté ?!? Il faudra qu\'il m\'explique !', '{0.name} nous a malheuresement quitté, il a fait une grave erreur, nous le traquerons puis nous lui feront avaler le CD de Ubuntu !!! :smirk:', '{0.name} est mort, enfin il à quitté notre discord...', ':sob: Ouiiin... {0.name} est partit de notre beau serveur !', '{0.name} nous à quitté, on ne l\'oublieras jamais... Enfaite c\'était qui encore {0.name} ?'] diff --git a/botassets/imports.py b/botassets/imports.py deleted file mode 100644 index 191f7ca..0000000 --- a/botassets/imports.py +++ /dev/null @@ -1,21 +0,0 @@ -################# -# IMPORTS # -################# -import discord ##Discord.py library -import asyncio -from config import * -import random -import time -import sys -import math -import os -import urllib -from bs4 import * -import urllib.request ##URL functions -import re -import logging -import datetime ##For Time -import pytz ##For time -import requests -import wikipedia -import sqlite3 diff --git a/cogs/admin.py b/cogs/admin.py new file mode 100644 index 0000000..38b37b2 --- /dev/null +++ b/cogs/admin.py @@ -0,0 +1,70 @@ +from discord.ext import commands +from random import choice, shuffle +import aiohttp +import asyncio +import time +import discord +import platform +from .utils import checks + +class Admin: + """Commandes secrètes d'administration.""" + + def __init__(self, bot): + self.bot = bot + + @checks.is_owner() + @commands.command() + async def unload(self, module: str): + """Unloads a module.""" + try: + self.bot.unload_extension(module) + except Exception as e: + await self.bot.say('\N{PISTOL}') + await self.bot.say('{}: {}'.format(type(e).__name__, e)) + else: + await self.bot.say('\N{OK HAND SIGN}') + + @checks.is_owner() + @commands.command(name='reload_cog', hidden=True) + async def _reload(self, *, module: str): + """Reloads a module.""" + try: + self.bot.unload_extension(module) + self.bot.load_extension(module) + await self.bot.say("Nice !") + except Exception as e: + await self.bot.say(':( Erreur :') + await self.bot.say('{}: {}'.format(type(e).__name__, e)) + else: + await self.bot.say('\N{OK HAND SIGN}') + + @checks.is_owner() + @commands.command(name='clear', pass_context=True, hidden=True) + async def _clear(self, ctx, number: int): + try: + number = number + 1 + await self.bot.purge_from(ctx.message.channel, limit=number) + await self.bot.say("Hello World !") + except Exception as e: + await self.bot.say(':sob: Une erreur est survenue : \n {}: {}'.format(type(e).__name__, e)) + + @checks.is_owner() + @commands.command(name='say', pass_context=True, hidden=True) + async def _say(self, ctx, dire): + try: + arg = ctx.message.content.split("say ") + await self.bot.say(arg[1]) + await self.bot.delete_message(ctx.message) + except Exception as e: + await self.bot.say(':sob: Une erreur est survenue : \n {}: {}'.format(type(e).__name__, e)) + + @checks.is_owner() + @commands.command(pass_context=True, hidden=True) + async def _clearterm(self): + clear = "\n" * 100 + print(clear) + await self.bot.say(":ok_hand: It's good") + +def setup(bot): + bot.add_cog(Admin(bot)) diff --git a/cogs/basics.py b/cogs/basics.py new file mode 100644 index 0000000..697c08a --- /dev/null +++ b/cogs/basics.py @@ -0,0 +1,42 @@ +from discord.ext import commands +from random import choice, shuffle +import aiohttp +import asyncio +import time +import discord +import platform, socket +import os + +class General: + """Commandes générales.""" + + def __init__(self, bot): + self.bot = bot + + ##PING## + @commands.command() + async def ping(self): + """Ping le bot""" + await self.bot.say(":ping_pong: Pong !") + + ##INFO## + @commands.command() + async def info(self): + """Affiches des informations sur le bot""" + text = open('texts/info.md').read() + os_info = str(platform.system()) + " / " + str(platform.release()) + em = discord.Embed(title='Informations sur TuxBot', description=text.format(os_info, platform.python_version(), socket.gethostname(), discord.__version__), colour=0x89C4F9) + em.set_footer(text=os.getcwd() + "/bot.py") + await self.bot.say(embed=em) + + + ## HELP PLZ ## + @commands.command() + async def help(self): + """Affiches l'aide du bot""" + text = open('texts/help.md').read() + em = discord.Embed(title='Commandes de TuxBot', description=text, colour=0x89C4F9) + await self.bot.say(embed=em) + +def setup(bot): + bot.add_cog(General(bot)) diff --git a/cogs/ci.py b/cogs/ci.py new file mode 100644 index 0000000..7852b86 --- /dev/null +++ b/cogs/ci.py @@ -0,0 +1,144 @@ +from discord.ext import commands +from random import choice, shuffle +import aiohttp +import asyncio +import discord +import platform, socket +import os +import sqlite3 + +#### SQL ##### +conn = sqlite3.connect('tuxbot.db') #Connexion SQL + +cursor = conn.cursor() +cursor.execute(""" +CREATE TABLE IF NOT EXISTS users( + id INTEGER PRIMARY KEY AUTOINCREMENT UNIQUE, + userid TEXT, + username TEXT, + os TEXT, + config TEXT, + useravatar TEXT, + userbirth TEXT, + pays TEXT, + cidate TEXT, + cibureau TEXT +) +""")# Creation table Utilisateur si premiere fois +conn.commit() + +class Identity: + """Commandes des cartes d'identité .""" + + def __init__(self, bot): + self.bot = bot + + @commands.group(name="ci", no_pm=True, pass_context=True) + async def _ci(self, ctx): + """Cartes d'identité""" + if ctx.invoked_subcommand is None: + text = open('texts/ci-info.md').read() + em = discord.Embed(title='Commandes de carte d\'identité de TuxBot', description=text, colour=0x89C4F9) + await self.bot.say(embed=em) + + @_ci.command(pass_context=True, name="show") + async def ci_test(self, ctx, args : discord.Member): + + def isexist(var): + if not var: + return "Non renseigné." + else: + return var + + cursor.execute("""SELECT userid, username, useravatar, userbirth, cidate, cibureau, os, config, pays FROM users WHERE userid=?""",(args.id,)) + result = cursor.fetchone() + + if not result: + await self.bot.say(ctx.message.author.mention + "> :x: Désolé mais {} est sans papier !".format(args.mention)) + + else: + userbirth = result[3].split(" ") + cidate = result[4].split(" ") + embed=discord.Embed(title="Carte d'identité | Communisme Linuxien") + embed.set_author(name=result[1], icon_url=result[2]) + embed.set_thumbnail(url = result[2]) + embed.add_field(name="Nom :", value=result[1], inline=True) + embed.add_field(name="Système d'exploitation :", value=isexist(result[6]), inline=True) + embed.add_field(name="Configuration Système : ", value=isexist(result[7]), inline=True) + embed.add_field(name="Date de naissance : ", value=userbirth[0], inline=True) + embed.add_field(name="Pays : ", value=isexist(result[8]), inline=True) + embed.set_footer(text="Enregistré dans le bureau {} le {}.".format(result[5], cidate[0])) + await self.bot.say(embed=embed) + + @_ci.command(pass_context=True, name="register") + async def ci_register(self, ctx): + cursor.execute("""SELECT id, userid FROM users WHERE userid=?""", (ctx.message.author.id,)) + existansw = cursor.fetchone() + if existansw != None: + await self.bot.say("Mais tu as déja une carte d'identité ! u_u") + else: + cursor.execute("""INSERT INTO users(userid, username, useravatar, userbirth, cidate, cibureau) VALUES(?, ?, ?, ?, ?, ?)""", (ctx.message.author.id, ctx.message.author.name, ctx.message.author.avatar_url, ctx.message.author.created_at, ctx.message.timestamp, ctx.message.server.name)) + conn.commit() + await self.bot.say(":clap: Bievenue à toi {} dans le communisme {} ! Fait ``.ci`` pour plus d'informations !".format(ctx.message.author.name, ctx.message.server.name)) + + @_ci.command(pass_context=True, name="setconfig") + async def ci_setconfig(self, ctx, args_): + try: + args = ctx.message.content.split("setconfig ") + args = args[1] + cursor.execute("""SELECT id, userid FROM users WHERE userid=?""", (ctx.message.author.id,)) + existansw = cursor.fetchone() + + if existansw != None: + cursor.execute("""UPDATE users SET config = ? WHERE userid = ?""", (args, ctx.message.author.id)) + conn.commit() + await self.bot.say(ctx.message.author.mention + "> :ok_hand: Carte d'identité mise à jour !") + else: + await self.bot.say(ctx.message.author.mention + "> :x: Veuillez enregistrer votre carte d'identité pour commencer !") + except: + await self.bot.say(ctx.message.author.mention + "> :x: Il manque un paramètre !") + + @_ci.command(pass_context=True, name="setos") + async def ci_setos(self, ctx, args_): + try: + args = ctx.message.content.split("setos ") + args = args[1] + cursor.execute("""SELECT id, userid FROM users WHERE userid=?""", (ctx.message.author.id,)) + existansw = cursor.fetchone() + + if existansw != None: + cursor.execute("""UPDATE users SET os = ? WHERE userid = ?""", (args, ctx.message.author.id)) + conn.commit() + await self.bot.say(ctx.message.author.mention + "> :ok_hand: Carte d'identité mise à jour !") + else: + await self.bot.say(ctx.message.author.mention + "> :x: Veuillez enregistrer votre carte d'identité pour commencer !") + except: + await self.bot.say(ctx.message.author.mention + "> :x: Il manque un paramètre !") + + @_ci.command(pass_context=True, name="setcountry") + async def ci_setcountry(self, ctx, args): + cursor.execute("""SELECT id, userid FROM users WHERE userid=?""", (ctx.message.author.id,)) + existansw = cursor.fetchone() + + if existansw != None: + cursor.execute("""UPDATE users SET pays = ? WHERE userid = ?""", (args, ctx.message.author.id)) + conn.commit() + await self.bot.say(ctx.message.author.mention + "> :ok_hand: Carte d'identité mise à jour !") + else: + await self.bot.say(ctx.message.author.mention + "> :x: Veuillez enregistrer votre carte d'identité pour commencer !") + + + @_ci.command(pass_context=True, name="list") + async def ci_list(self, ctx): + cursor.execute("""SELECT id, username FROM users""") + rows = cursor.fetchall() + msg = "" + try: + for row in rows: + msg = msg + '{0} : {1} \n'.format(row[0], row[1]) + await self.bot.say(msg) + except: + await self.bot.say(":x: Pas d'entrés") + +def setup(bot): + bot.add_cog(Identity(bot)) diff --git a/cogs/funs.py b/cogs/funs.py new file mode 100644 index 0000000..aaa46db --- /dev/null +++ b/cogs/funs.py @@ -0,0 +1,124 @@ +from discord.ext import commands +from random import choice, shuffle +import aiohttp +import asyncio +import discord +import urllib.request, json +import random +import requests + +class Funs: + """Commandes funs.""" + + def __init__(self, bot): + self.bot = bot + + + + @commands.command() + async def avatar(self, user : discord.Member): + """Récuperer l'avatar de ...""" + embed = discord.Embed(title="Avatar de : " + user.name, url=user.avatar_url, description="[Voir en plus grand]({})".format(user.avatar_url)) + embed.set_thumbnail(url=user.avatar_url) + await self.bot.say(embed=embed) + + @commands.command() + async def btcprice(self): + """Le prix du BTC""" + loading = await self.bot.say("_réfléchis..._") + try: + with urllib.request.urlopen("http://api.coindesk.com/v1/bpi/currentprice/EUR.json") as url: + data = json.loads(url.read().decode()) + btc = data['bpi']['EUR']['rate'] + btc = btc.split(".") + except: + btc = 1 + + if btc == 1: + await self.bot.say("Impossible d'accèder à l'API coindesk.com, veuillez réessayer ultérieurment !") + else: + await self.bot.edit_message(loading, "Un bitcoin est égal à : " + btc[0] + " €") + + @commands.command() + async def joke(self): + """Print a random joke in a json file""" + with open('texts/jokes.json') as js: + jk = json.load(js) + + clef = str(random.randint(1,12)) + joke = jk["{}".format(clef)] + + embed = discord.Embed(title="Blague _{}_ : ".format(clef), description=joke['content'], colour=0x03C9A9) + embed.set_footer(text="Par " + joke['author']) + embed.set_thumbnail(url='https://outout.tech/tuxbot/blobjoy.png') + await self.bot.say(embed=embed) + + @commands.command() + async def ethylotest(self): + """Ethylotest simulator 2018""" + results_poulet = ["Désolé mais mon ethylotest est sous Windows Vista, merci de patienter...", "_(ethylotest)_ ``Une erreur est survenue. Windows cherche une solution à se prolbème...``", "Mais j'l'ai foutu où ce p*** d'ethylotest de m..... bordel fait ch..... tab....", "C'est pas possible z'avez cassé l'ethylotest !"] + results_client = ["D'accord, il n'y a pas de problème à cela je suis complètement clean", "Bien sur si c'est votre devoir !", "Suce bi** !", "J'ai l'air d'être bourré ?", "_laissez moi prendre un bonbon à la menthe..._"] + + result_p = random.choice(results_poulet) + result_c = random.choice(results_client) + + await self.bot.say(":oncoming_police_car: Bonjour bonjour, controle d'alcoolémie !") + await asyncio.sleep(0.5) + await self.bot.say(":man: " + result_c) + await asyncio.sleep(1) + await self.bot.say(":police_car: " + result_p) + + @commands.command() + async def coin(self): + """Coin flip simulator 2025""" + starts_msg = ["Je lance la pièce !", "C'est partit !", "C'est une pièce de d'un cent faut pas la perdre", "C'est une pièce de d'un euro faut pas la perdre", "Je lance !"] + results_coin = ["{0} pile", "{0} face", "{1} Heu c'est quoi pile c'est quoi face enfaite ?", "{1} How shit, je crois que je l'ai perdu", "{1} Et bim je te vol ta pièce !", "{0} Oh une erreur d'impression y'a ni pile ni face !"] + + start = random.choice(starts_msg) + result = random.choice(results_coin) + + await self.bot.say(start) + await asyncio.sleep(0.6) + await self.bot.say(result.format(":moneybag: Et la pièce retombe sur ...", ":robot:")) + + @commands.command() + async def pokemon(self): + """Random pokemon fight""" + with open('texts/pokemons.json') as js: + jk = json.load(js) + + poke1 = jk[random.randint(1, 150)] + poke2 = jk[random.randint(1, 150)] + + if poke1['MaxHP'] > poke2['MaxHP']: + winer = poke1 + else: + winer = poke2 + + await self.bot.say(":flag_white: **Le combat commence !**") + await asyncio.sleep(1) + await self.bot.say(":loudspeaker: Les concurants sont {} contre {} ! Bonne chance à eux !".format(poke1["Name"], poke2["Name"])) + await asyncio.sleep(0.5) + await self.bot.say(":boom: {} commence et utilise {}".format(poke1["Name"], poke1["Fast Attack(s)"][0]["Name"])) + await asyncio.sleep(1) + await self.bot.say(":dash: {} réplique avec {}".format(poke2["Name"], poke2["Fast Attack(s)"][0]["Name"])) + await asyncio.sleep(1.2) + await self.bot.say("_le combat continue de se dérouler..._") + await asyncio.sleep(1.5) + await self.bot.say(":trophy: Le gagnant est **{}** !".format(winer["Name"])) + + @commands.command() + async def randomcat(self): + """Display a random cat""" + + r = requests.get('http://random.cat/meow.php') + cat = str(r.json()['file']) + embed = discord.Embed(title="Meow", description="[Voir le chat plus grand]({})".format(cat), colour=0x03C9A9) + embed.set_thumbnail(url=cat) + embed.set_author(name="Random.cat", url='https://random.cat/', icon_url='http://outout.tech/tuxbot/nyancat2.gif') + await self.bot.say(embed=embed) + + + +def setup(bot): + bot.add_cog(Funs(bot)) diff --git a/cogs/search.py b/cogs/search.py new file mode 100644 index 0000000..43882cb --- /dev/null +++ b/cogs/search.py @@ -0,0 +1,122 @@ +from discord.ext import commands +import aiohttp +import asyncio +import discord +import urllib.request, json +import wikipedia, bs4 + +wikipedia.set_lang("fr") + +class Search: + """Commandes de WWW.""" + + def __init__(self, bot): + self.bot = bot + + @commands.group(name="search", no_pm=True, pass_context=True) + async def _search(self, ctx): + """Rechercher sur le world wide web""" + if ctx.invoked_subcommand is None: + text = open('texts/search.md').read() + em = discord.Embed(title='Commandes de search TuxBot', description=text, colour=0x89C4F9) + await self.bot.say(embed=em) + + + + + @_search.command(pass_context=True, name="docubuntu") + async def search_docubuntu(self, ctx, args): + await self.bot.send_typing(ctx.message.channel) + attends = await self.bot.say("_Je te cherche ça {} !_".format(ctx.message.author.mention)) + html = urllib.request.urlopen("https://doc.ubuntu-fr.org/" + args).read() + if "avez suivi un lien" in str(html): + await self.bot.edit_message(attends, ":sob: Nooooon ! Cette page n'existe pas, mais tu peux toujours la créer : https://doc.ubuntu-fr.org/"+ args) + else: + await self.bot.delete_message(attends) + embed = discord.Embed(description="Voila j'ai trouvé ! Voici la page ramenant à votre recherche, toujours aussi bien rédigée :wink: : https://doc.ubuntu-fr.org/" + args, url='http://doc.ubuntu-fr.org/') + embed.set_author(name="DocUbuntu-Fr", url='http://doc.ubuntu-fr.org/', icon_url='http://outout.tech/tuxbot/ubuntu.png') + embed.set_thumbnail(url='http://outout.tech/tuxbot/ubuntu.png') + embed.set_footer(text="Merci à ceux qui ont pris le temps d'écrire cette documentation") + await self.bot.say(embed=embed) + + @_search.command(pass_context=True, name="aur") + async def search_aur(self, ctx, args): + await self.bot.send_typing(ctx.message.channel) + attends = await self.bot.say("_Je te cherche ça {} !_".format(ctx.message.author.mention)) + erreur = 0 + try: + html = urllib.request.urlopen("https://aur.archlinux.org/packages/" + args).read() + except: + erreur = 1 + + if erreur == 1: + await self.bot.delete_message(attends) + embed = discord.Embed(description=":sob: Je n'ai pas trouvé le packet mais j'ai lancé une petite recherche, tu y trouveras peut être ton bonheur ? https://aur.archlinux.org/packages/?K=" + args,url='https://aur.archlinux.org/') + embed.set_author(name="Aur.archlinux", url='https://aur.archlinux.org/', icon_url='http://outout.tech/tuxbot/arch.png') + embed.set_thumbnail(url='http://outout.tech/tuxbot/arch.png') + embed.set_footer(text="Pff même pas trouvé !") + await self.bot.say(embed=embed) + + else: + await self.bot.delete_message(attends) + embed = discord.Embed(description="Et voila, j'ai trouvé la page sur le packet : https://aur.archlinux.org/packages/{0} ! \n Ca te dit un petit ``yaourt -S {0}`` ?".format(args), url='https://aur.archlinux.org/') + embed.set_author(name="Aur.archlinux", url='https://aur.archlinux.org/', icon_url='http://outout.tech/tuxbot/arch.png') + embed.set_thumbnail(url='http://outout.tech/tuxbot/arch.png') + embed.set_footer(text="C'est vrai que Aur est mieux qu'APT ^^") + await self.bot.say(embed=embed) + + + @_search.command(pass_context=True, name="wikipedia") + async def search_wikipedia(self, ctx, args): + """Fait une recherche sur wikipd""" + try: + wait = await self.bot.say("_Je cherche..._") + results = wikipedia.search(args) + nbmr = 0 + msg = "" + + for value in results: + nbmr = nbmr + 1 + msg = msg + "**{}**: {} \n".format(str(nbmr), value) + + em = discord.Embed(title='Résultats de : ' + args, description = msg, colour=0x4ECDC4) + em.set_thumbnail(url = "https://upload.wikimedia.org/wikipedia/commons/2/26/Paullusmagnus-logo_%28large%29.png") + await self.bot.delete_message(wait) + final = await self.bot.say(embed=em) + + list_emojis = ["1⃣", "2⃣", "3⃣", "4⃣", "5⃣", "6⃣", "7⃣", "8⃣", "9⃣", "🔟"] + + for emoji in list_emojis: + await self.bot.add_reaction(final, emoji) + + res = await self.bot.wait_for_reaction(message=final, user=ctx.message.author) + + for emoji in list_emojis: + num_emoji = list_emojis.index(emoji) + if res.reaction.emoji == emoji: + args_ = results[num_emoji] + + try: + await self.bot.delete_message(final) + await self.bot.send_typing(ctx.message.channel) + wait = await self.bot.say(ctx.message.author.mention + " ah ok sympa cette recherche, je l'effectue de suite !") + wp = wikipedia.page(args_) + wp_contenu = wp.summary[:200] + "..." + em = discord.Embed(title='Wikipedia : ' + wp.title, description = "{} \n_Lien_ : {} ".format(wp_contenu, wp.url), colour=0x9B59B6) + em.set_author(name="Wikipedia", url='http://wikipedia.org', icon_url='https://upload.wikimedia.org/wikipedia/commons/2/26/Paullusmagnus-logo_%28large%29.png') + em.set_thumbnail(url = "https://upload.wikimedia.org/wikipedia/commons/2/26/Paullusmagnus-logo_%28large%29.png") + em.set_footer(text="Merci à eux de nous fournir une encyclopédie libre !") + await self.bot.delete_message(wait) + await self.bot.say(embed=em) + + except wikipedia.exceptions.PageError: + await self.bot.say(":open_mouth: Une **erreur interne** est survenue, si cela ce reproduit contactez votre administrateur ou faites une Issue sur ``github`` !") + except UnboundLocalError: + await self.bot.say(":interrobang: Veuillez choisir une réaction valide !") + except DisambiguationError: + await self.bot.say(":open_mouth: Une **erreur interne** est survenue, si cela ce reproduit contactez votre administrateur ou faites une Issue sur ``github`` !") + except IndexError: + await self.bot.say(" :interrobang: Veuillez entrer un terme de recherche !") + +def setup(bot): + bot.add_cog(Search(bot)) diff --git a/cogs/utility.py b/cogs/utility.py new file mode 100644 index 0000000..02bcf9b --- /dev/null +++ b/cogs/utility.py @@ -0,0 +1,126 @@ +from discord.ext import commands +from random import choice, shuffle +import random +import aiohttp +import asyncio +import time +import discord +import urllib.request, json +import datetime, pytz + +class Utility: + """Commandes utilitaires.""" + + def __init__(self, bot): + self.bot = bot + + @commands.command() + async def clock(self, args): + """Display hour in a country""" + args = args.upper() + then = datetime.datetime.now(pytz.utc) + form = '%H heures %M' + try: + argument = args[1] + if args == "MONTREAL": + utc = then.astimezone(pytz.timezone('America/Montreal')) + site = "http://ville.montreal.qc.ca/" + img = "https://upload.wikimedia.org/wikipedia/commons/e/e0/Rentier_fws_1.jpg" + country = "au Canada, Québec" + description = "Montréal est la deuxième ville la plus peuplée du Canada. Elle se situe dans la région du Québec" + elif args == "VANCOUVER": + utc = then.astimezone(pytz.timezone('America/Vancouver')) + site = "http://vancouver.ca/" + img = "https://upload.wikimedia.org/wikipedia/commons/f/fe/Dock_Vancouver.JPG" + country = "au Canada" + description = "Vancouver, officiellement City of Vancouver, est une cité portuaire au Canada" + elif args == "NEW-YORK" or args == "N-Y": + utc = then.astimezone(pytz.timezone('America/New_York')) + site = "http://www1.nyc.gov/" + img = "https://upload.wikimedia.org/wikipedia/commons/e/e3/NewYork_LibertyStatue.jpg" + country = "aux U.S.A." + description = "New York, est la plus grande ville des États-Unis en termes d'habitants et l'une des plus importantes du continent américain. " + elif args == "LOSANGELES" or args == "L-A" or args == "LA" or args == "LACITY": + utc = then.astimezone(pytz.timezone('America/Los_Angeles')) + site = "https://www.lacity.org/" + img = "https://upload.wikimedia.org/wikipedia/commons/thumb/5/57/LA_Skyline_Mountains2.jpg/800px-LA_Skyline_Mountains2.jpg" + country = "aux U.S.A." + description = "Los Angeles est la deuxième ville la plus peuplée des États-Unis après New York. Elle est située dans le sud de l'État de Californie, sur la côte pacifique." + elif args == "PARIS": + utc = then.astimezone(pytz.timezone('Europe/Paris')) + site = "http://www.paris.fr/" + img = "https://upload.wikimedia.org/wikipedia/commons/a/af/Tour_eiffel_at_sunrise_from_the_trocadero.jpg" + country = "en France" + description = "Paris est la capitale de la France. Elle se situe au cœur d'un vaste bassin sédimentaire aux sols fertiles et au climat tempéré, le bassin parisien." + elif args == "BERLIN": + utc = then.astimezone(pytz.timezone('Europe/Berlin')) + site = "http://www.berlin.de/" + img = "https://upload.wikimedia.org/wikipedia/commons/9/91/Eduard_Gaertner_Schlossfreiheit.jpg" + country = "en Allemagne" + description = "Berlin est la capitale et la plus grande ville d'Allemagne. Située dans le nord-est du pays, elle compte environ 3,5 millions d'habitants. " + elif args == "BERN" or args == "ZURICH" or args == "BERNE": + utc = then.astimezone(pytz.timezone('Europe/Zurich')) + site = "http://www.berne.ch/" + img = "https://upload.wikimedia.org/wikipedia/commons/d/db/Justitia_Statue_02.jpg" + country = "en Suisse" + description = "Berne est la cinquième plus grande ville de Suisse et la capitale du canton homonyme. Depuis 1848, Berne est la « ville fédérale »." + elif args == "TOKYO": + utc = then.astimezone(pytz.timezone('Asia/Tokyo')) + site = "http://www.gotokyo.org/" + img = "https://upload.wikimedia.org/wikipedia/commons/3/37/TaroTokyo20110213-TokyoTower-01.jpg" + country = "au Japon" + description = "Tokyo, anciennement Edo, officiellement la préfecture métropolitaine de Tokyo, est la capitale du Japon." + elif args == "MOSCOU": + utc = then.astimezone(pytz.timezone('Europe/Moscow')) + site = "https://www.mos.ru/" + img = "https://upload.wikimedia.org/wikipedia/commons/f/f7/Andreyevsky_Zal.jpg" + country = "en Russie" + description = "Moscou est la capitale de la Fédération de Russie et la plus grande ville d'Europe. Moscou est situé sur la rivière Moskova. " + try: + if args == "LIST": + text = open('texts/clocks.md').read() + em = discord.Embed(title='Liste des Horloges', description=text, colour=0xEEEEEE) + await self.bot.say(embed=em) + else: + tt = utc.strftime(form) + em = discord.Embed(title='Heure à ' + args[1].title(), description="A [{}]({}) {}, Il est **{}** ! \n {} \n _source des images et du texte : [Wikimedia foundation](http://commons.wikimedia.org/)_".format(str(args), site, str(country), str(tt), str(description)), colour=0xEEEEEE) + em.set_thumbnail(url = img) + await self.bot.say(embed=em) + except UnboundLocalError: + await self.bot.say("[**Erreur**] Ville inconnue, faites ``.clock list`` pour obtenir la liste des villes") + except IndexError: + await self.bot.say("[**Erreur**] Ville inconnue, faites ``.clock list`` pour obtenir la liste des villes") + + @commands.command() + async def ytdiscover(self): + """Random youtube channel""" + with open('texts/ytb.json') as js: + ytb = json.load(js) + + clef = str(random.randint(0,12)) + chaine = ytb["{}".format(clef)] + + embed = discord.Embed(title=chaine['name'], url=chaine['url'], + description="**{}**, {} \n[Je veux voir ça]({})".format(chaine['name'], chaine['desc'], chaine['url'])) + embed.set_thumbnail(url='https://outout.tech/tuxbot/yt.png') + await self.bot.say(embed=embed) + + @commands.command(pass_context=True) + async def afk(self, ctx): + """Away from keyboard""" + msgs = ["s'absente de discord quelques instants", "se casse de son pc", "va sortir son chien", "reviens bientôt", "va nourrir son cochon", "va manger des cookies", "va manger de la poutine", "va faire caca", "va faire pipi"] + msg = random.choice(msgs) + + await self.bot.say("**{}** {}...".format(ctx.message.author.mention, msg)) + + @commands.command(pass_context=True) + async def back(self, ctx): + """I'm back !""" + msgs = ["a réssuscité", "est de nouveau parmi nous", "a fini de faire caca", "a fini d'urine", "n'est plus mort", "est de nouveau sur son PC", "a fini de manger sa poutine", "a fini de danser", "s'est réveillé", "est de retour dans ce monde cruel"] + msg = random.choice(msgs) + + await self.bot.say("**{}** {} !".format(ctx.message.author.mention, msg)) + + +def setup(bot): + bot.add_cog(Utility(bot)) diff --git a/cogs/utils/__init__.py b/cogs/utils/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/cogs/utils/__pycache__/__init__.cpython-35.pyc b/cogs/utils/__pycache__/__init__.cpython-35.pyc new file mode 100644 index 0000000000000000000000000000000000000000..56d35d7684fe562e8d461e445436a6aa318c15ee GIT binary patch literal 136 zcmWgV<>lh^F^XgWg2x~N1{i@12OutH0TL+;48fX=ek&P@K*9*(m#Kb6er~FMZenVV zzEf#YYGSE=Nohq=eu;i^etKyth%DAGEy>I&){l?R%*!l^kJl@xyv1RYo1apelWGSt It{8|J0E{^wZU6uP literal 0 HcmV?d00001 diff --git a/cogs/utils/__pycache__/checks.cpython-35.pyc b/cogs/utils/__pycache__/checks.cpython-35.pyc new file mode 100644 index 0000000000000000000000000000000000000000..7c5f93d141b7afc39836cf797b03bdc7bcd3de19 GIT binary patch literal 2602 zcmb7GTW=dh6h5=NzQ%6av=FE&FcefRg7|)u(ufw+7bL%=LL#CH+uccGXYCC$>om2J zr&hE`@E>^PcknOvl_&l}pZLyfY^MniW#yTjoy$2h-}jv}UN4u6zn$Fw;ioLo-*n-z z(f%4mAEFBI6BH8d2-CJGv}kP8j!h!4DRAf|#vBSV6l5vL(Mv%)Xy+*?m?3l)DOfS> z90er`%BGD8*C<#u?E?GQcCY^fhcs|SlJ}$W*qa2}7u(At*d)jyE_q24%po?IL1U1Md}^s!UTdmynU)HS>xzXcZ$@jmqiDgYc< z4EC=?vBB*X(JMiF7Ns=)Li9o`V9X4BMw}lu!DSmoKR|`$48Ab)EjqQRr0z5NsAGJa zv5`$9s6x>C`FDoaVP9bOwrdTh>o8RL>yHYf^IWP*a8I5{e;T9dX3b$#5mS=Pks3~7 zmFKoI@y0UA`Ozenli0Nr+mBBY=b5J_Y6TMvv}si~YYj|1qIo@uRZ$k7h}rra$BoS} z^1V=RZJ3!0^jLI!Mv4pmO&KH_!wDqW^*r?J9FsN@OSF)B$iBupqD)(BIpHT0pFu6y&(D)Gw|DXoxxIn zj2^phqUf(u*H7-!k8lE!VFM|qCa1hGZVxT`Ui^%V0;K_AB!S$%jJ-HkAlllfsq3(k zWRAUXDmgCO&PP#47a;SQjLdN52J}*(!N;W=8W8o z@Sv~*Z!(c#s=Cz+D|h!0*tQpjNoE+!u|_6f2|%T=t`mE#_Y=!MFbn4zxs3_Ruy*6h zPFOgaBbP)$l!Rjy@Lm<_E_xO;GQEuFcPM%XRT_XypvAJ|+<6{kDTng_T+pa`9Q@lL z5tNN`%pI5=<=MblhE9>Mi4F?@-X1)D(hk|hi9aWaT-ivxyhZok-A9H#~9VjI0vm`l>klw?+=9f z0)0LY@WT`{G$zJ*&ACX8P9ai=4PYTv;lxIx_Q0RtDE#K=;8-&^N($>DQ6lDl=V-sQ zgk5g)5~ef_C@g_`IjzkK52Lv9AQ%rP$PT=JNL8pyCsyxafRnODp;_PK`Ii7#YV=6S zVCVz&W!EBWq;Sj=kx&)bTLwf@Sghp`Gyy?kcJCeiUCK$u_Lp-9@M$`Xuy6gBMV>mp zo@~V%xI!D>nEHRx#`tr&$!lFyDF@&<{R_ZK&Xc;6h6R$8#n~JG5SX7wuAN>hSuNGE zRH^_2IHwUTGXlDb>Co;l&`T&4pQeR!ev_~u9WkpQCO}=f;zC|o;C>0iDl8aN#xgK8 z9R|blTc(=qiq(m`J*#SXyTzUIdDLx~pi`ftH(8nY$&)y}LO7k6dmxQsju(Tzv2sC) f%K*%8j-y~2$}Ps#q@$9!ZkL?ZVrivRF6I6O8d>*o literal 0 HcmV?d00001 diff --git a/cogs/utils/checks.py b/cogs/utils/checks.py new file mode 100644 index 0000000..3785740 --- /dev/null +++ b/cogs/utils/checks.py @@ -0,0 +1,58 @@ +# -*- coding: utf-8 -*- +import discord.utils +from discord.ext import commands + + +def is_owner_check(message): + owner = message.author.id in ['171685542553976832', '163697401935298560', '88644904112128000', '92619860521005056', '273757386127441920'] ###ID's modo & admin + return owner # Owner of the bot + +def is_owner(warn=True): + def check(ctx, warn): + owner = is_owner_check(ctx.message) + if not owner and warn: + print(ctx.message.author.name + " à essayer d'executer " + ctx.message.content) + return owner + + owner = commands.check(lambda ctx: check(ctx, warn)) + return owner + +def check_permissions(ctx, perms): + msg = ctx.message + if is_owner_check(msg): + return True + + ch = msg.channel + author = msg.author + resolved = ch.permissions_for(author) + return all(getattr(resolved, name, None) == value for name, value in perms.items()) + + +def role_or_permissions(ctx, check, **perms): + if check_permissions(ctx, perms): + return True + + ch = ctx.message.channel + author = ctx.message.author + if ch.is_private: + return False # can't have roles in PMs + + role = discord.utils.find(check, author.roles) + return role is not None + + +def admin_or_permissions(**perms): + def predicate(ctx): + return role_or_permissions(ctx, lambda r: r.name == 'Bot Admin', **perms) + + return commands.check(predicate) + + +def is_in_servers(*server_ids): + def predicate(ctx): + server = ctx.message.server + if server is None: + return False + return server.id in server_ids + + return commands.check(predicate) \ No newline at end of file diff --git a/cogs/utils/config.py b/cogs/utils/config.py new file mode 100644 index 0000000..1e9f51f --- /dev/null +++ b/cogs/utils/config.py @@ -0,0 +1,67 @@ +import json +import os +import uuid +import asyncio + +class Config: + """The "database" object. Internally based on ``json``.""" + + def __init__(self, name, **options): + self.name = name + self.object_hook = options.pop('object_hook', None) + self.encoder = options.pop('encoder', None) + self.loop = options.pop('loop', asyncio.get_event_loop()) + self.lock = asyncio.Lock() + if options.pop('load_later', False): + self.loop.create_task(self.load()) + else: + self.load_from_file() + + def load_from_file(self): + try: + with open(self.name, 'r') as f: + self._db = json.load(f, object_hook=self.object_hook) + except FileNotFoundError: + self._db = {} + + async def load(self): + with await self.lock: + await self.loop.run_in_executor(None, self.load_from_file) + + def _dump(self): + temp = '%s-%s.tmp' % (uuid.uuid4(), self.name) + with open(temp, 'w', encoding='utf-8') as tmp: + json.dump(self._db.copy(), tmp, ensure_ascii=True, cls=self.encoder, separators=(',', ':')) + + # atomically move the file + os.replace(temp, self.name) + + async def save(self): + with await self.lock: + await self.loop.run_in_executor(None, self._dump) + + def get(self, key, *args): + """Retrieves a config entry.""" + return self._db.get(key, *args) + + async def put(self, key, value, *args): + """Edits a config entry.""" + self._db[key] = value + await self.save() + + async def remove(self, key): + """Removes a config entry.""" + del self._db[key] + await self.save() + + def __contains__(self, item): + return item in self._db + + def __getitem__(self, item): + return self._db[item] + + def __len__(self): + return len(self._db) + + def all(self): + return self._db diff --git a/cogs/utils/formats.py b/cogs/utils/formats.py new file mode 100644 index 0000000..d483dac --- /dev/null +++ b/cogs/utils/formats.py @@ -0,0 +1,75 @@ +async def entry_to_code(bot, entries): + width = max(map(lambda t: len(t[0]), entries)) + output = ['```'] + fmt = '{0:<{width}}: {1}' + for name, entry in entries: + output.append(fmt.format(name, entry, width=width)) + output.append('```') + await bot.say('\n'.join(output)) + +import datetime + +async def indented_entry_to_code(bot, entries): + width = max(map(lambda t: len(t[0]), entries)) + output = ['```'] + fmt = '\u200b{0:>{width}}: {1}' + for name, entry in entries: + output.append(fmt.format(name, entry, width=width)) + output.append('```') + await bot.say('\n'.join(output)) + +async def too_many_matches(bot, msg, matches, entry): + check = lambda m: m.content.isdigit() + await bot.say('There are too many matches... Which one did you mean? **Only say the number**.') + await bot.say('\n'.join(map(entry, enumerate(matches, 1)))) + + # only give them 3 tries. + for i in range(3): + message = await bot.wait_for_message(author=msg.author, channel=msg.channel, check=check) + index = int(message.content) + try: + return matches[index - 1] + except: + await bot.say('Please give me a valid number. {} tries remaining...'.format(2 - i)) + + raise ValueError('Too many tries. Goodbye.') + +class Plural: + def __init__(self, **attr): + iterator = attr.items() + self.name, self.value = next(iter(iterator)) + + def __str__(self): + v = self.value + if v > 1: + return '%s %ss' % (v, self.name) + return '%s %s' % (v, self.name) + +def human_timedelta(dt): + now = datetime.datetime.utcnow() + delta = now - dt + hours, remainder = divmod(int(delta.total_seconds()), 3600) + minutes, seconds = divmod(remainder, 60) + days, hours = divmod(hours, 24) + years, days = divmod(days, 365) + + if years: + if days: + return '%s and %s ago' % (Plural(year=years), Plural(day=days)) + return '%s ago' % Plural(year=years) + + if days: + if hours: + return '%s and %s ago' % (Plural(day=days), Plural(hour=hours)) + return '%s ago' % Plural(day=days) + + if hours: + if minutes: + return '%s and %s ago' % (Plural(hour=hours), Plural(minute=minutes)) + return '%s ago' % Plural(hour=hours) + + if minutes: + if seconds: + return '%s and %s ago' % (Plural(minute=minutes), Plural(second=seconds)) + return '%s ago' % Plural(minute=minutes) + return '%s ago' % Plural(second=seconds) diff --git a/cogs/utils/maps.py b/cogs/utils/maps.py new file mode 100644 index 0000000..c062452 --- /dev/null +++ b/cogs/utils/maps.py @@ -0,0 +1,147 @@ +#!/bin/env python + +# With credit to DanielKO + +from lxml import etree +import datetime, re +import asyncio, aiohttp + +NINTENDO_LOGIN_PAGE = "https://id.nintendo.net/oauth/authorize" +SPLATNET_CALLBACK_URL = "https://splatoon.nintendo.net/users/auth/nintendo/callback" +SPLATNET_CLIENT_ID = "12af3d0a3a1f441eb900411bb50a835a" +SPLATNET_SCHEDULE_URL = "https://splatoon.nintendo.net/schedule" + +class Rotation(object): + def __init__(self): + self.start = None + self.end = None + self.turf_maps = [] + self.ranked_mode = None + self.ranked_maps = [] + + + @property + def is_over(self): + return self.end < datetime.datetime.utcnow() + + def __str__(self): + now = datetime.datetime.utcnow() + prefix = '' + if self.start > now: + minutes_delta = int((self.start - now) / datetime.timedelta(minutes=1)) + hours = int(minutes_delta / 60) + minutes = minutes_delta % 60 + prefix = '**In {0} hours and {1} minutes**:\n'.format(hours, minutes) + else: + prefix = '**Current Rotation**:\n' + + fmt = 'Turf War is {0[0]} and {0[1]}\n{1} is {2[0]} and {2[1]}' + return prefix + fmt.format(self.turf_maps, self.ranked_mode, self.ranked_maps) + +# based on https://github.com/Wiwiweb/SakuraiBot/blob/master/src/sakuraibot.py +async def get_new_splatnet_cookie(username, password): + parameters = {'client_id': SPLATNET_CLIENT_ID, + 'response_type': 'code', + 'redirect_uri': SPLATNET_CALLBACK_URL, + 'username': username, + 'password': password} + + async with aiohttp.post(NINTENDO_LOGIN_PAGE, data=parameters) as response: + cookie = response.history[-1].cookies.get('_wag_session') + if cookie is None: + print(req) + raise Exception("Couldn't retrieve cookie") + return cookie + +def parse_splatnet_time(timestr): + # time is given as "MM/DD at H:MM [p|a].m. (PDT|PST)" + # there is a case where it goes over the year, e.g. 12/31 at ... and then 1/1 at ... + # this case is kind of weird though and is currently unexpected + # it could even end up being e.g. 12/31/2015 ... and then 1/1/2016 ... + # we'll never know + + regex = r'(?P\d+)\/(?P\d+)\s*at\s*(?P\d+)\:(?P\d+)\s*(?P

a\.m\.|p\.m\.)\s*\((?P.+)\)' + m = re.match(regex, timestr.strip()) + + if m is None: + raise RuntimeError('Apparently the timestamp "{}" does not match the regex.'.format(timestr)) + + matches = m.groupdict() + tz = matches['tz'].strip().upper() + offset = None + if tz == 'PDT': + # EDT is UTC - 4, PDT is UTC - 7, so you need +7 to make it UTC + offset = +7 + elif tz == 'PST': + # EST is UTC - 5, PST is UTC - 8, so you need +8 to make it UTC + offset = +8 + else: + raise RuntimeError('Unknown timezone found: {}'.format(tz)) + + pm = matches['p'].replace('.', '') # a.m. -> am + + current_time = datetime.datetime.utcnow() + + # Kind of hacky. + fmt = "{2}/{0[month]}/{0[day]} {0[hour]}:{0[minutes]} {1}".format(matches, pm, current_time.year) + splatoon_time = datetime.datetime.strptime(fmt, '%Y/%m/%d %I:%M %p') + datetime.timedelta(hours=offset) + + # check for new year + if current_time.month == 12 and splatoon_time.month == 1: + splatoon_time.replace(current_time.year + 1) + + return splatoon_time + + +async def get_splatnet_schedule(splatnet_cookie): + cookies = {'_wag_session': splatnet_cookie} + + + """ + This is repeated 3 times: + + ... <--- figure out how to parse this +

+
+ <--- turf war +
+ ... ... + ... ... +
+
+
+ <--- ranked +
+ ... ... <--- Splat Zones, Rainmaker, Tower Control + ... ... + ... ... +
+ """ + + schedule = [] + async with aiohttp.get(SPLATNET_SCHEDULE_URL, cookies=cookies, data={'locale':"en"}) as response: + text = await response.text() + root = etree.fromstring(text, etree.HTMLParser()) + stage_schedule_nodes = root.xpath("//*[@class='stage-schedule']") + stage_list_nodes = root.xpath("//*[@class='stage-list']") + + if len(stage_schedule_nodes)*2 != len(stage_list_nodes): + raise RuntimeError("SplatNet changed, need to update the parsing!") + + for sched_node in stage_schedule_nodes: + r = Rotation() + + start_time, end_time = sched_node.text.split("~") + r.start = parse_splatnet_time(start_time) + r.end = parse_splatnet_time(end_time) + + tw_list_node = stage_list_nodes.pop(0) + r.turf_maps = tw_list_node.xpath(".//*[@class='map-name']/text()") + + ranked_list_node = stage_list_nodes.pop(0) + r.ranked_maps = ranked_list_node.xpath(".//*[@class='map-name']/text()") + r.ranked_mode = ranked_list_node.xpath(".//*[@class='rule-description']/text()")[0] + + schedule.append(r) + + return schedule diff --git a/cogs/utils/paginator.py b/cogs/utils/paginator.py new file mode 100644 index 0000000..8914744 --- /dev/null +++ b/cogs/utils/paginator.py @@ -0,0 +1,212 @@ +import asyncio +import discord + +class CannotPaginate(Exception): + pass + +class Pages: + """Implements a paginator that queries the user for the + pagination interface. + + Pages are 1-index based, not 0-index based. + + If the user does not reply within 2 minutes then the pagination + interface exits automatically. + + Parameters + ------------ + bot + The bot instance. + message + The message that initiated this session. + entries + A list of entries to paginate. + per_page + How many entries show up per page. + + Attributes + ----------- + embed: discord.Embed + The embed object that is being used to send pagination info. + Feel free to modify this externally. Only the description, + footer fields, and colour are internally modified. + permissions: discord.Permissions + Our permissions for the channel. + """ + def __init__(self, bot, *, message, entries, per_page=12): + self.bot = bot + self.entries = entries + self.message = message + self.author = message.author + self.per_page = per_page + pages, left_over = divmod(len(self.entries), self.per_page) + if left_over: + pages += 1 + self.maximum_pages = pages + self.embed = discord.Embed() + self.paginating = len(entries) > per_page + self.reaction_emojis = [ + ('\N{BLACK LEFT-POINTING DOUBLE TRIANGLE WITH VERTICAL BAR}', self.first_page), + ('\N{BLACK LEFT-POINTING TRIANGLE}', self.previous_page), + ('\N{BLACK RIGHT-POINTING TRIANGLE}', self.next_page), + ('\N{BLACK RIGHT-POINTING DOUBLE TRIANGLE WITH VERTICAL BAR}', self.last_page), + ('\N{INPUT SYMBOL FOR NUMBERS}', self.numbered_page ), + ('\N{BLACK SQUARE FOR STOP}', self.stop_pages), + ('\N{INFORMATION SOURCE}', self.show_help), + ] + + server = self.message.server + if server is not None: + self.permissions = self.message.channel.permissions_for(server.me) + else: + self.permissions = self.message.channel.permissions_for(self.bot.user) + + if not self.permissions.embed_links: + raise CannotPaginate('Bot does not have embed links permission.') + + def get_page(self, page): + base = (page - 1) * self.per_page + return self.entries[base:base + self.per_page] + + async def show_page(self, page, *, first=False): + self.current_page = page + entries = self.get_page(page) + p = [] + for t in enumerate(entries, 1 + ((page - 1) * self.per_page)): + p.append('%s. %s' % t) + + self.embed.set_footer(text='Page %s/%s (%s entries)' % (page, self.maximum_pages, len(self.entries))) + + if not self.paginating: + self.embed.description = '\n'.join(p) + return await self.bot.send_message(self.message.channel, embed=self.embed) + + if not first: + self.embed.description = '\n'.join(p) + await self.bot.edit_message(self.message, embed=self.embed) + return + + # verify we can actually use the pagination session + if not self.permissions.add_reactions: + raise CannotPaginate('Bot does not have add reactions permission.') + + if not self.permissions.read_message_history: + raise CannotPaginate('Bot does not have Read Message History permission.') + + p.append('') + p.append('Confused? React with \N{INFORMATION SOURCE} for more info.') + self.embed.description = '\n'.join(p) + self.message = await self.bot.send_message(self.message.channel, embed=self.embed) + for (reaction, _) in self.reaction_emojis: + if self.maximum_pages == 2 and reaction in ('\u23ed', '\u23ee'): + # no |<< or >>| buttons if we only have two pages + # we can't forbid it if someone ends up using it but remove + # it from the default set + continue + + await self.bot.add_reaction(self.message, reaction) + + async def checked_show_page(self, page): + if page != 0 and page <= self.maximum_pages: + await self.show_page(page) + + async def first_page(self): + """goes to the first page""" + await self.show_page(1) + + async def last_page(self): + """goes to the last page""" + await self.show_page(self.maximum_pages) + + async def next_page(self): + """goes to the next page""" + await self.checked_show_page(self.current_page + 1) + + async def previous_page(self): + """goes to the previous page""" + await self.checked_show_page(self.current_page - 1) + + async def show_current_page(self): + if self.paginating: + await self.show_page(self.current_page) + + async def numbered_page(self): + """lets you type a page number to go to""" + to_delete = [] + to_delete.append(await self.bot.send_message(self.message.channel, 'What page do you want to go to?')) + msg = await self.bot.wait_for_message(author=self.author, channel=self.message.channel, + check=lambda m: m.content.isdigit(), timeout=30.0) + if msg is not None: + page = int(msg.content) + to_delete.append(msg) + if page != 0 and page <= self.maximum_pages: + await self.show_page(page) + else: + to_delete.append(await self.bot.say('Invalid page given. (%s/%s)' % (page, self.maximum_pages))) + await asyncio.sleep(5) + else: + to_delete.append(await self.bot.send_message(self.message.channel, 'Took too long.')) + await asyncio.sleep(5) + + try: + await self.bot.delete_messages(to_delete) + except Exception: + pass + + async def show_help(self): + """shows this message""" + e = discord.Embed() + messages = ['Welcome to the interactive paginator!\n'] + messages.append('This interactively allows you to see pages of text by navigating with ' \ + 'reactions. They are as follows:\n') + + for (emoji, func) in self.reaction_emojis: + messages.append('%s %s' % (emoji, func.__doc__)) + + e.description = '\n'.join(messages) + e.colour = 0x738bd7 # blurple + e.set_footer(text='We were on page %s before this message.' % self.current_page) + await self.bot.edit_message(self.message, embed=e) + + async def go_back_to_current_page(): + await asyncio.sleep(60.0) + await self.show_current_page() + + self.bot.loop.create_task(go_back_to_current_page()) + + async def stop_pages(self): + """stops the interactive pagination session""" + await self.bot.delete_message(self.message) + self.paginating = False + + def react_check(self, reaction, user): + if user is None or user.id != self.author.id: + return False + + for (emoji, func) in self.reaction_emojis: + if reaction.emoji == emoji: + self.match = func + return True + return False + + async def paginate(self): + """Actually paginate the entries and run the interactive loop if necessary.""" + await self.show_page(1, first=True) + + while self.paginating: + react = await self.bot.wait_for_reaction(message=self.message, check=self.react_check, timeout=120.0) + if react is None: + self.paginating = False + try: + await self.bot.clear_reactions(self.message) + except: + pass + finally: + break + + try: + await self.bot.remove_reaction(self.message, react.reaction.emoji, react.user) + except: + pass # can't remove it so don't bother doing so + + await self.match() diff --git a/config.py b/config.py deleted file mode 100755 index 6dfded8..0000000 --- a/config.py +++ /dev/null @@ -1,22 +0,0 @@ -__author__ = "Maël — outout14" -__licence__ = "WTFPL Licence 2.0" - -########################### -# TuxBot Config file # -########################### - - -## TOKEN -## Insert your DiscordAPP Token here -token = " " - -##PREFIX -##Default prefix . -prefix = "." - -##Authorized channel -op_channel = ["tuxbot-dev", "bot", "boat", "commandes"] - -##Version information -## DONT TOUCH ! -version = " Release 5.0 " diff --git a/logs/NOT A EMPTY FOLDER b/logs/NOT A EMPTY FOLDER new file mode 100644 index 0000000..e69de29 diff --git a/logs/Not a empty folder b/logs/Not a empty folder deleted file mode 100644 index a82e917..0000000 --- a/logs/Not a empty folder +++ /dev/null @@ -1 +0,0 @@ -Not a empty folder diff --git a/main.py b/main.py deleted file mode 100755 index adf5c3c..0000000 --- a/main.py +++ /dev/null @@ -1,595 +0,0 @@ -#!/usr/bin/env python -# -*- coding: utf-8 -*- - -__author__ = "Maël — outout" -__licence__ = "WTFPL Licence 2.0" - - -################# -# IMPORTS # -################# -from botassets import * -from botassets.imports import * -client = discord.Client() -status = "dnd" -wikipedia.set_lang("fr") - -########################################### -# # -# LOGGER # -# # -########################################### -from logging.handlers import RotatingFileHandler -logger = logging.getLogger() -logger.setLevel(logging.INFO) -formatter = logging.Formatter('%(asctime)s // [%(levelname)s] : %(message)s') -file_handler = RotatingFileHandler('logs/activity.log', 'a', 1000000, 1) -file_handler.setLevel(logging.DEBUG) -file_handler.setFormatter(formatter) -logger.addHandler(file_handler) -logger.info(' \n \n New TuxBot instance \n \n') - -########################################### -# OPEN GAME FILE NAME # -########################################### -game = open('msg/game.txt').read() - -#### SQL ##### -conn = sqlite3.connect('tuxbot.db') #Connexion SQL - -cursor = conn.cursor() -cursor.execute(""" -CREATE TABLE IF NOT EXISTS users( - id INTEGER PRIMARY KEY AUTOINCREMENT UNIQUE, - userid TEXT, - username TEXT, - usermention TEXT, - os TEXT, - config TEXT, - useravatar TEXT, - userbirth TEXT, - cidate TEXT, - pays TEXT -) -""")# Creation table Utilisateur si premiere fois -conn.commit() - - -########################################### -# # -# ON_READY # -# # -########################################### -@client.event -async def on_ready(): - logger.info('BOT READY !') - print("=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-") - print("TuxBot " + version) - logger.log(logging.DEBUG, 'TuxBot ' + version) - print(" ") - print("Pret ! ") - print("Vous pouvez l'utiliser.") - await client.change_presence(game=discord.Game(name=game), status=discord.Status(status), afk=False) ## Game set in config.py - print("Jeu joué : " + game) - print("Pseudo : " + client.user.name) - print("ID : " + client.user.id) - logger.debug('Bot ID : ' + client.user.id) - print("=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-") - -########################################### -# # -# JOIN AND LEAVE # -# # -########################################### -@client.event -async def on_member_join(member): - logger.log(logging.INFO, member.name + ' joined the server !') - server = member.server - prv = await client.start_private_message(member) - welcome_msg = random.choice(arrays.wlcm_msgs) - if member.server.name == "Aide GNU/Linux-fr": - fmt = 'Bienvenue {0.mention} sur le suberbe serveur discord **' + member.server.name + '** ! Je te conseil de lire #regles pour commencer et te créer une carte d\'identité dans ``#bot`` grâce à la commande ``.ci-register`` et la personnaliser :smile: !' - else: - fmt = 'Bienvenue {0.mention} sur le discord **'+ member.server.name +'**, j\'espère que tu passeras un bon moment avec nous !' ##Multi-Server - await client.send_message(prv, fmt.format(member)) - await client.send_message(member.server.default_channel, "**{0}**".format(welcome_msg.format(member))) -@client.event -async def on_member_remove(member): - adios_msg = random.choice(arrays.adios_msgs) - logger.log(logging.INFO, member.name + ' left the server !') - await client.send_message(member.server.default_channel, "**{0}**".format(adios_msg.format(member))) -########################################### -# # -# DELETE MESSAGE # -# # -########################################### -@client.event -async def on_message_delete(message): - if not message.channel.is_private and not message.author.bot: - msg_log = open('logs/deleted_msg.log', 'a') - date = time.localtime(time.time()) - msg_log.write(str(message.author.name) + " (" + message.author.id + ")\n") - msg_log.write(" -> serveur : " + message.server.name + " \n") - msg_log.write(" -> date : " + str(time.strftime("%d %b %Y %H:%M:%S", date)) + "\n") - msg_log.write(" -> message : " + str(message.content) + "\n") - msg_log.write("--------------------------------------------------------------------------------------------------\n") - msg_log.close() - -@client.event -async def on_message(message): -########################################### -# # -# CUSTOMS FUNCTIONS # -# BLOCKING AND ... # -# # -########################################### - roles = ["bot-commander", "poney"] - - def cmd(cmd_name): - if not message.channel.is_private and not message.author.bot: - return message.content.startswith(prefix + cmd_name) - - def authadmin(): - role = message.author.roles - print("A") - try: - if str(role[0]) in roles or str(role[1]) in roles or str(role[2]) in roles or str(role[3]) in roles or str(role[4]) in roles: - return True - else: - return False - except IndexError: - return False - - if message.channel.is_private and not message.author.bot: - await client.send_message(message.channel, "Désolé mais mon papa m'a dit de ne pas parler par Message Privé, viens plutot sur un serveur discord !") - - -########################################### -# # -# ADMIN COMMANDS # -# # -########################################### - - if cmd("sendlogs"): - if authadmin: - wait = await client.send_message(message.channel, message.author.mention + " Le contenue du fichier log est entrain d'être envoyé... Veuillez patienter, cela peut prendre du temps !") - await client.send_file(message.author, fp="logs/activity.log", filename="activity.log", content="Voci mon fichier ``activity.log`` comme demandé !", tts=False) - await client.edit_message(wait, message.author.mention + " C'est bon vous venez de recevoir par message privé mon fichier de logs") - else: - await client.send_message(message.channel, "[**ERREUR**] Vous n'avez pas la permission d'executer cette commande") - - elif cmd("say"): #Control - if authadmin(): - args = message.content.split("say ") - try: - await client.send_message(message.channel, args[1]) - logger.info(message.author.name + ' ordered TuxBot to say : ' + args[1]) - await client.delete_message(message) - except IndexError: - await client.send_message(message.author, "**[ERREUR]** Merci de fournir le paramètre du message à dire, je ne suis pas dans ta tête !") - await client.delete_message(message) - else: - await client.send_message(message.channel, message.author.mention + "[**ERREUR**] Vous n'avez pas la permission d'executer cette commande") - - elif cmd("clear"): - if authadmin: - try: - args = message.content.split("clear ") - argument = int(args[1]) - argument = argument+1 - logger.info(message.author.name + ' ordered TuxBot to remove ' + args[1] + ' messages') - deleted = await client.purge_from(message.channel, limit=argument) - await client.send_message(message.author, args[1] + " messages ont bien été supprimés") - except IndexError: - await client.send_message(message.author, "**[ERREUR]** Merci de fournir le paramètre du nombre de message à supprimer, je ne suis pas dans ta tête !") - await client.delete_message(message) - else: - await client.send_message(message.channel, message.author.mention + "[**ERREUR**] Vous n'avez pas la permission d'executer cette commande") - - elif cmd("changegame"): - if authadmin: - args = message.content.split("changegame ") - try: - ngame = open('msg/game.txt','w') - ngame.write(args[1]) - ngame.close() - rgame = open('msg/game.txt').read() - await client.change_presence(game=discord.Game(name=rgame), status=discord.Status(status), afk=False) - await client.send_message(message.author, "Mon jeu joué à bien été changé en : " + rgame) - await client.delete_message(message) - logger.info(message.author.name + ' changed the game played from tuxbot to : ' + args[1]) - except IndexError: - await client.send_message(message.author, "**[ERREUR]** Merci de fournir le paramètre du jeu que je dois jouer, je ne suis pas dans ta tête !") - await client.delete_message(message) - else: - await client.send_message(message.channel, message.author.mention + "[**ERREUR**] Vous n'avez pas la permission d'executer cette commande") - -########################################### -# # -# WWW COMMANDS # -# # -########################################### - elif cmd("search docubuntu"): - args_ = message.content.split(" ") - await client.send_typing(message.channel) - try: - msg = await client.send_message(message.channel, message.author.mention + " **Veuillez patienter**, Je suis entrain de parcourir le WorldWideWeb avec comme terme de recherche " + args_[2] + ", et ça peut prendre du temps ! ") - html = urllib.request.urlopen("https://doc.ubuntu-fr.org/" + args_[2]).read() - if "avez suivi un lien" in str(html): - await client.edit_message(msg, message.author.mention + " :sob: Oh non ! Cette page n'existe pas sur la doc ubuntu-fr. Mais vous pouvez commencer à la rédiger ! https://doc.ubuntu-fr.org/"+ args_[2]) - else: - await client.edit_message(msg, message.author.mention + " :ok_hand: Trouvé ! Voici la page ramenant à votre recherche https://doc.ubuntu-fr.org/"+ args_[2]) - except IndexError: - await client.edit_message(msg, message.author.mention + " **Erreur** : veuillez entrer un terme de recherche !") - - elif cmd("search wikileaks"): - args_ = message.content.split(" ") - await client.send_typing(message.channel) - try: - msg = await client.send_message(message.channel, message.author.mention + " **Veuillez patienter**, Je suis entrain de parcourir le WorldWideWeb avec comme terme de recherche " + args_[2] + ", et ça peut prendre du temps ! ") - await client.send_typing(message.channel) - html = urllib.request.urlopen("https://search.wikileaks.org/?query=" + args_[2] + "#results").read() - await client.delete_message(msg) - if "0 results" in str(html): - await client.edit_message(msg, message.author.mention + " :sob: Oh non ! Aucun élément ne correspond de pres ou de loin a votre recherche.") - else: - await client.edit_message(msg, message.author.mention + " :ok_hand: Trouvé ! Le résultat de votre recherche est ici => https://search.wikileaks.org/?query=" + args_[2] + "#results") - except IndexError: - await client.edit_message(msg, message.author.mention + " **Erreur** : veuillez entrer un terme de recherche !") - - elif cmd("search wikipedia"): - - try: - args = message.content.split("search wikipedia") - wait = await client.send_message(message.channel, message.author.mention + " **Veuillez patienter**, Je suis entrain de parcourir Wikipedia avec comme terme de recherche " + args[1] + ", et ça peut prendre du temps ! ") - results = wikipedia.search(args[1]) - nbmr = 0 - msg = "" - - for value in results: - nbmr = nbmr + 1 - msg = msg + "**{}**: {} \n".format(str(nbmr), value) - - em = discord.Embed(title='Résultats de : ' + args[1], description = msg, colour=0x4ECDC4) - em.set_thumbnail(url = "https://upload.wikimedia.org/wikipedia/commons/2/26/Paullusmagnus-logo_%28large%29.png") - await client.delete_message(wait) - final = await client.send_message(message.channel, embed=em) - - for emoji in arrays.array_emoji: - await client.add_reaction(final, emoji) - - res = await client.wait_for_reaction(message=final, user=message.author) - - for emoji in arrays.array_emoji: - num_emoji = arrays.array_emoji.index(emoji) - if res.reaction.emoji == emoji: - args_ = results[num_emoji] - - try: - await client.delete_message(final) - await client.send_typing(message.channel) - wait = await client.send_message(message.channel, message.author.mention + " **Veuillez patienter**, Je suis entrain de chercher sur Wikipedia " + args_ + ", et ça peut prendre du temps ! ") - wp = wikipedia.page(args_) - wp_contenu = wp.summary[:200] + "..." - em = discord.Embed(title='Wikipedia : ' + wp.title, description = "{} \n _Lien_ : {} ".format(wp_contenu, wp.url), colour=0x9B59B6) - em.set_thumbnail(url = "https://upload.wikimedia.org/wikipedia/commons/2/26/Paullusmagnus-logo_%28large%29.png") - em.set_footer(text = "Source : Wikipedia") - await client.delete_message(wait) - await client.send_message(message.channel, embed=em) - except wikipedia.exceptions.PageError: - await client.delete_message(msg) - await client.send_message(message.channel, message.author.mention + " **Erreur interne** : une erreur interne est survenue, si cela ce reproduit contactez votre administrateur ou faites une Issue sur github !") - except wikipedia.exceptions.DisambiguationError: - await client - except UnboundLocalError: - await client.send_message(message.channel, message.author.mention + " **Erreur** : veuillez choisir une réaction valide !") - - except IndexError: - await client.send_message(message.channel, message.author.mention + " **Erreur** : veuillez entrer un terme de recherche !") - - elif cmd("yt"): - await client.send_typing(message.channel) - chaineyt = random.choice(arrays.youtube) - ytname = chaineyt.split(",") - yturl = chaineyt.split(": ") - ytname = ytname[0] - - text = "Je peux te conseiller cette chaîne youtube : " + chaineyt - em = discord.Embed(title='Youtube Discover', description=text, colour=0xCD201F) - em.set_author(name=ytname, icon_url="http://outout.tech/tuxbot_files/loading.gif") - msg = await client.send_message(message.channel, embed=em) - - ##GET ICON## - html_doc = urllib.request.urlopen(yturl[1]).read() - soup = BeautifulSoup(html_doc, "lxml") - getatr = soup.find_all("img", { "class" : "appbar-nav-avatar" }, ["src"]) - getatr = str(getatr) - getatr = getatr.split('"') - em.set_author(name=ytname, icon_url=getatr[7]) - await client.edit_message(msg, embed=em) - -########################################### -# # -# BASICS COMMANDS # -# # -########################################### - if cmd("afk"):##AFK - msg = await client.send_message(message.channel, message.author.mention + " s'absente de discord quelques instants...") - await client.delete_message(message) - - elif cmd("back"): ##BACK - await client.send_message(message.channel, message.author.mention + " est de retour parmi nous (il a recussité !)") - await client.delete_message(message) - - elif cmd("ping"): #PING - t1 = time.perf_counter() - await client.send_typing(message.channel) - t2 = time.perf_counter() - result = round((t2-t1)*1000) - if int(result) >=200: - em = discord.Embed(title="Ping : " + str(result) + "ms", description="... c'est quoi ce ping !", colour=0xFF1111) - await client.send_message(message.channel, embed=em) - elif int(result) > 100 and int(result) < 200: - em = discord.Embed(title="Ping : " + str(result) + "ms", description="Ca va, ça peut aller, mais j'ai l'impression d'avoir 40 ans !", colour=0xFFA500) - await client.send_message(message.channel, embed=em) - elif int(result) <= 100: - em = discord.Embed(title="Ping : " + str(result) + "ms", description="Wow c'te vitesse de réaction, je m'épate moi-même !",colour=0x11FF11) - await client.send_message(message.channel, embed=em) - - elif cmd("coin"): ##PIECE - piece = random.choice(["Pile", "Face", "... Heu, je l'ai perdu !", "Pile, j'ai gagné !", "Enfaite c'est quoi pile, c'est quoi face ?"]) - await client.send_typing(message.channel) - msg = await client.send_message(message.channel, "La piece est retombé sur " + piece) - - elif cmd("joke"): ##Joke - joke = random.choice(arrays.jokes) - await client.send_typing(message.channel) - msg = await client.send_message(message.channel, message.author.mention + " " + joke) - - elif cmd("ethylotest"): - resultat = random.choice(arrays.policier) - await client.send_typing(message.channel) - msg = await client.send_message(message.channel, message.author.mention + resultat) - - elif cmd('randomcat'): ##Cat - r = requests.get('http://random.cat/meow.php') - await client.send_message(message.channel, message.author.mention + " " + r.json()['file']) - - elif cmd('pokemon'): ##Pokemon - await client.send_typing(message.channel) - poke1 = random.choice(arrays.pokemon) - poke2 = random.choice(arrays.pokemon) - win = random.choice([str(poke1),str(poke2)]) - msg1 = await client.send_message(message.channel, '**Le combat Commence !**') - msg2 = await client.send_message(message.channel, '📢 **Présentateur** : Les combatants sont : ' + str(poke1) + ' Contre ' + str(poke2)) - msg3 = await client.send_message(message.channel, '*Narateur : Le combat se déroule...*') - await client.send_typing(message.channel) - await asyncio.sleep(5) - msg4 = await client.send_message(message.channel, '**📢 Présentateur** : Le gagnant est..... ') - await client.send_typing(message.channel) - await asyncio.sleep(1) - msg5 = await client.send_message(message.channel, '**📢 Présentateur** : **' + str(win) + '**') - - if cmd("servers-list"): - nbmr = 0 - msg = "" - for serveur in list(client.servers): - nbmr = nbmr + 1 - msg = msg + "=> **{}** \n".format(serveur.name) - msg = msg + "{} se trouve sur **{} serveur(s)** au total !".format(client.user.name, nbmr) - em = discord.Embed(title='Liste des serveurs où se trouve ' + client.user.name, description=msg, colour=0x36D7B7) - em.set_author(name=client.user.name, icon_url=client.user.avatar_url) - await client.send_message(message.channel, embed=em) - - elif cmd("count-members"): - nbmr = 0 - for name in list(client.get_all_members()): - nbmr = nbmr + 1 - msg = "Il y'a **{} membres** sur le serveur Discord **{}**".format(nbmr, message.server.name) - em = discord.Embed(title='Compteur de membres', description=msg, colour=0x9A12B3) - await client.send_message(message.channel, embed=em) - -########################################### -# # -# CLOCK # -# # -########################################### - elif cmd('clock'): - args = message.content.split("clock ") - args = [element.upper() for element in args] - args_ = [element.lower() for element in args] - then = datetime.datetime.now(pytz.utc) - form = '%H heures %M' - try: - argument = args[1] - if args[1] == "MONTREAL": - utc = then.astimezone(pytz.timezone('America/Montreal')) - site = "http://ville.montreal.qc.ca/" - img = "https://upload.wikimedia.org/wikipedia/commons/e/e0/Rentier_fws_1.jpg" - country = "au Canada, Québec" - description = "Montréal est la deuxième ville la plus peuplée du Canada. Elle se situe dans la région du Québec" - elif args[1] == "VANCOUVER": - utc = then.astimezone(pytz.timezone('America/Vancouver')) - site = "http://vancouver.ca/" - img = "https://upload.wikimedia.org/wikipedia/commons/f/fe/Dock_Vancouver.JPG" - country = "au Canada" - description = "Vancouver, officiellement City of Vancouver, est une cité portuaire au Canada" - elif args[1] == "NEW-YORK" or args[1] == "N-Y": - utc = then.astimezone(pytz.timezone('America/New_York')) - site = "http://www1.nyc.gov/" - img = "https://upload.wikimedia.org/wikipedia/commons/e/e3/NewYork_LibertyStatue.jpg" - country = "aux U.S.A." - description = "New York, est la plus grande ville des États-Unis en termes d'habitants et l'une des plus importantes du continent américain. " - elif args[1] == "LOSANGELES" or args[1] == "L-A" or args[1] == "LA" or args[1] == "LACITY": - utc = then.astimezone(pytz.timezone('America/Los_Angeles')) - site = "https://www.lacity.org/" - img = "https://upload.wikimedia.org/wikipedia/commons/thumb/5/57/LA_Skyline_Mountains2.jpg/800px-LA_Skyline_Mountains2.jpg" - country = "aux U.S.A." - description = "Los Angeles est la deuxième ville la plus peuplée des États-Unis après New York. Elle est située dans le sud de l'État de Californie, sur la côte pacifique." - elif args[1] == "PARIS": - utc = then.astimezone(pytz.timezone('Europe/Paris')) - site = "http://www.paris.fr/" - img = "https://upload.wikimedia.org/wikipedia/commons/a/af/Tour_eiffel_at_sunrise_from_the_trocadero.jpg" - country = "en France" - description = "Paris est la capitale de la France. Elle se situe au cœur d'un vaste bassin sédimentaire aux sols fertiles et au climat tempéré, le bassin parisien." - elif args[1] == "BERLIN": - utc = then.astimezone(pytz.timezone('Europe/Berlin')) - site = "http://www.berlin.de/" - img = "https://upload.wikimedia.org/wikipedia/commons/9/91/Eduard_Gaertner_Schlossfreiheit.jpg" - country = "en Allemagne" - description = "Berlin est la capitale et la plus grande ville d'Allemagne. Située dans le nord-est du pays, elle compte environ 3,5 millions d'habitants. " - elif args[1] == "BERN" or args[1] == "ZURICH" or args[1] == "BERNE": - utc = then.astimezone(pytz.timezone('Europe/Zurich')) - site = "http://www.berne.ch/" - img = "https://upload.wikimedia.org/wikipedia/commons/d/db/Justitia_Statue_02.jpg" - country = "en Suisse" - description = "Berne est la cinquième plus grande ville de Suisse et la capitale du canton homonyme. Depuis 1848, Berne est la « ville fédérale »." - elif args[1] == "TOKYO": - utc = then.astimezone(pytz.timezone('Asia/Tokyo')) - site = "http://www.gotokyo.org/" - img = "https://upload.wikimedia.org/wikipedia/commons/3/37/TaroTokyo20110213-TokyoTower-01.jpg" - country = "au Japon" - description = "Tokyo, anciennement Edo, officiellement la préfecture métropolitaine de Tokyo, est la capitale du Japon." - elif args[1] == "MOSCOU": - utc = then.astimezone(pytz.timezone('Europe/Moscow')) - site = "https://www.mos.ru/" - img = "https://upload.wikimedia.org/wikipedia/commons/f/f7/Andreyevsky_Zal.jpg" - country = "en Russie" - description = "Moscou est la capitale de la Fédération de Russie et la plus grande ville d'Europe. Moscou est situé sur la rivière Moskova. " - try: - if args[1] == "LIST": - await client.send_typing(message.channel) - text = open('msg/clocks.md').read() - em = discord.Embed(title='Liste des Horloges', description=text.format(prefix), colour=0xEEEEEE) - await client.send_message(message.channel, embed=em) - else: - tt = utc.strftime(form) - em = discord.Embed(title='Heure à ' + args_[1].title(), description="A [{}]({}) {}, Il est **{}** ! \n {} \n _source des images et du texte : [Wikimedia foundation](http://commons.wikimedia.org/)_".format(str(args[1]), site, str(country), str(tt), str(description)), colour=0xEEEEEE) - em.set_thumbnail(url = img) - await client.send_message(message.channel, embed=em) - except UnboundLocalError: - await client.send_message(message.channel, message.author.mention + " **[ERREUR]** Ville inconnue, ``.clock list`` pour afficher les villes disponibles !") - except IndexError: - await client.send_message(message.channel, message.author.mention + " **[ERREUR]** Veuillez sélectionner une ville dans ``.clock list`` !") - -################### -# IDENTIY SYSTEM # -################### - - elif cmd("ci-register"): - cursor.execute("""INSERT INTO users(userid, username, usermention, useravatar, userbirth, cidate) VALUES(?, ?, ?, ?, ?, ?)""", (message.author.id, message.author.name, message.author.mention, message.author.avatar_url, message.author.created_at, message.timestamp)) - conn.commit() - await client.send_message(message.channel, message.author.mention + "> **Votre carte d'intentité à été enregistrée !** Pour plus d'informations sur le système de carte d'indentité, tapez la commande ``{}ci-info`` !".format(prefix)) - - elif cmd("ci-setos"): - try: - args = message.content.split("ci-setos ") - cursor.execute("""UPDATE users SET os = ? WHERE usermention = ?""", (args[1], message.author.mention)) - conn.commit() - await client.send_message(message.channel, message.author.mention + " l'information à bien été modifié sur votre carte d'identité !") - except IndexError: - await client.send_message(message.channel, message.author.mention + " [**ERREUR**] : Veuillez argumenter la commande !") - - elif cmd("ci-setconf"): - try: - args = message.content.split("ci-setconf ") - cursor.execute("""UPDATE users SET config = ? WHERE usermention = ?""", (args[1], message.author.mention)) - conn.commit() - await client.send_message(message.channel, message.author.mention + " l'information à bien été modifié sur votre carte d'identité !") - except IndexError: - await client.send_message(message.channel, message.author.mention + " [**ERREUR**] : Veuillez argumenter la commande !") - - elif cmd("ci-setnation"): - try: - args = message.content.split("ci-setnation ") - cursor.execute("""UPDATE users SET pays = ? WHERE usermention = ?""", (args[1], message.author.mention)) - conn.commit() - await client.send_message(message.channel, message.author.mention + " l'information à bien été modifié sur votre carte d'identité !") - except IndexError: - await client.send_message(message.channel, message.author.mention + " [**ERREUR**] : Veuillez argumenter la commande !") - - elif cmd("ci-info"): - cinfomd = open('msg/ci-info.md').read() - em = discord.Embed(title='Aide sur la carte d\'identité', description=cinfomd.format(prefix), colour=0xDEADBF) - await client.send_message(message.channel, embed=em) - - elif cmd("ci"): - try: - args = message.content.split("ci ") - cursor.execute("""SELECT userid, username, os, usermention, useravatar, userbirth, cidate, config, pays FROM users WHERE usermention=?""", (args[1],)) - result = cursor.fetchone() - if not result: - await client.send_message(message.channel, message.author.mention + "> Désolé mais {} n'a pas fait enregistrer sa Carte d'indentité".format(args[1])) - else: - userid = result[0] - username = result[1] - if not result[2]: - os = "Non renseigné" - else: - os = result[2] - - if not result[7]: - config = "Non renseigné" - else: - config = result[7] - - if not result[8]: - pays = "Non renseigné" - else: - pays = result[8] - - useravatar = result[4] - userbirth = result[5] - cidate = result[6] - userbirth = userbirth.split(" ") - cidate = cidate.split(" ") - - em_content = open('msg/identity.md').read() - em = discord.Embed(title='Carte d\'Identité de '+ username, description=em_content.format(userid, username, os, useravatar, userbirth[0], cidate[0], config, pays), colour=0xDEADBF) - em.set_author(name=username, icon_url=useravatar) - await client.send_message(message.channel, embed=em) - except IndexError: - await client.send_message(message.channel, message.author.mention + " [**ERREUR**] : Veuillez argumenter la commande !") - - -########################################### -# # -# HELP AND FIX COMMANDS # -# # -########################################### - elif cmd('help'): ##HELP - await client.send_typing(message.channel) - text = open('msg/help.md').read() - em = discord.Embed(title='Liste des Commandes', description=text.format(prefix), colour=0x89C4F4) - await client.send_message(message.channel, embed=em) - - elif cmd("info"): ##info - text = open('msg/info.md').read() - em = discord.Embed(title='Informations sur ' + client.user.name, description=text, colour=0x89C4F9) - await client.send_message(message.channel, embed=em) - - elif cmd('search help'): ##Search - text = open('msg/search.md').read() - em = discord.Embed(title='Sites de recherche', description=text.format(prefix), colour=0x4ECDC4) - await client.send_message(message.channel, embed=em) - - elif cmd('github'): ##Link to github - await client.send_typing(message.channel) - text = "How tu veux voir mon repos Github pour me disséquer ? Pas de soucis ! Je suis un Bot, je ne ressens pas la douleur !\n https://github.com/outout14/tuxbot-bot" - em = discord.Embed(title='Repos TuxBot-Bot', description=text, colour=0xE9D460) - em.set_author(name='Outout', icon_url="https://avatars0.githubusercontent.com/u/14958554?v=3&s=400") - await client.send_message(message.channel, embed=em) - - -########################################### -# # -# AUTOMATICS FUNCTIONS # -# # -########################################### - if re.search(r'^(bonjour |salut |hello |bjr |slt |s\'lut)?([^ ]+ ){0,3}(qui s\'y conna(î|i)(t|s)|des gens|quelqu\'un|qqun|des personnes|du monde s\'y connait)[^\?]+\?$', message.content): - await client.send_message(message.channel, ":question: N'hésite pas à poser ta question directement " + message.author.mention + ", il n'est pas utile de demander si quelqu'un connait quelque chose avant.") - - if message.content == message.content.upper() and not message.author.bot: - if len(message.content) > 5: - await client.send_message(message.channel, message.author.mention + " pas que des capitales dans ton message quand même !") -client.run(token) diff --git a/msg/ci-info.md b/msg/ci-info.md deleted file mode 100644 index ec29859..0000000 --- a/msg/ci-info.md +++ /dev/null @@ -1,8 +0,0 @@ -La carte d'identité est un petit système dans tuxbot permetant de vous démarquer de vos amis en ayant la possibilité d'y renseigner plusieurs informations ! - -**Liste des commandes : ** --> {0}ci _@pseudo_ : Affiche la carte d'identité de _pseudo_ --> {0}ci-register : Vous enregistre dans la base de donnée des cartes d'identité --> {0}ci-setos _nom de l'os_ : Défini le système d'exploitation (affiché sur la CI) --> {0}ci-setconf _votre configuration pc_ : Défini la configuration de votre ordinateur (affiché sur la CI) --> {0}ci-setnation : Défini votre Pays (affiché sur la CI) diff --git a/msg/game.txt b/msg/game.txt deleted file mode 100644 index ad601fb..0000000 --- a/msg/game.txt +++ /dev/null @@ -1 +0,0 @@ -passer une batterie de test \ No newline at end of file diff --git a/msg/help.md b/msg/help.md deleted file mode 100644 index 9a14347..0000000 --- a/msg/help.md +++ /dev/null @@ -1,36 +0,0 @@ - -**Commandes diverses** : --> {0}info : affiche des informations sur le bot --> {0}help : affiche l'aide --> {0}search help : affiche l'aide sur les commandes de recherche --> {0}ci-info : affiche l'aide et des infos sur le système de carte d'identité --> {0}clock list: affiche la liste des horloges des villes --> {0}ping : Ping le bot --> {0}github : Affiche le repos Github du Bot :heart: - -**Commandes utilitaires** --> {0}afk : signaler son absence --> {0}back : signaler son retour --> {0}clock _ville_: Affiche l'heure et quelques infos sur la ville en question --> {0}ytdiscover : découvrir des chaines youtube --> {0}servers-list : liste les serveurs où se trouve le bot - -**Commandes Funs** --> {0}joke : affiche une blague (au hasard) --> {0}ethylotest : simule un ethylotest détraqué (au hasard) --> {0}pokemon : Lance un combat de pokémons (au hasard) --> {0}coin : fait un pile ou face --> {0}randomcat : affiche des image de chats :heart: - -**Commandes Carte d'Identité** --> {0}ci _@pseudo_ : Affiche la carte d'identité de _pseudo_ --> {0}ci-register : Vous enregistre dans la base de donnée des cartes d'identité --> {0}ci-setos _nom de l'os_ : Défini le système d'exploitation (affiché sur la CI) --> {0}ci-setconf _votre configuration pc_ : Défini la configuration de votre ordinateur (affiché sur la CI) --> {0}ci-setnation : Défini votre Pays (affiché sur la CI) - -** Commandes d'administration ** --> {0}say _votre message_ : fait le bot écrire --> {0}clear _nombre_ : Supprime _nombre_ de messages --> {0}changegame _votre texte_ : Change le jeu joué par le Bot --> {0}sendlogs : Envoie le fichier de Log du bot par MP diff --git a/msg/identity.md b/msg/identity.md deleted file mode 100644 index 069fd50..0000000 --- a/msg/identity.md +++ /dev/null @@ -1,9 +0,0 @@ -**ID** : {0} -**Nom** : {1} -**Système d'exploitation** : {2} -**Configuration Système** : {6} -**Lien vers avatar** : [Cliquer pour accèder]({3}) -**Date de naissance** : {4} -**Pays** : {7} - -_Date de fabrication de la carte : {5}_ diff --git a/msg/info.md b/msg/info.md deleted file mode 100644 index a8a21c5..0000000 --- a/msg/info.md +++ /dev/null @@ -1,21 +0,0 @@ - -==> Développement : -└> Outout : [outout.tech](https://outout.tech/) -└> Romain : [son github](https://github.com/Rom194) -└> Langage : [Python](http://www.python.org/) -└> Api : [discord.py](https://github.com/Rapptz/discord.py) - -==> Serveur de Test: -└> Ordinateur de Outout sous [Ubuntu 16.04 LTS](http://releases.ubuntu.com/16.04/) -└> Version de Python : [3.5.2](http://www.python.org/) - -==> Serveur de Prod : -└> Machine : [RaspberryPi3](https://www.raspberrypi.org) sous Debain -└> Version de Python : [3.5](http://www.python.org/) - -==> Contact : -└> Discord : Outout#8406 -└> Mèl : outout@linuxmail.org - -==> Serveur Discord d'Origine : -└> Aide GNU/Linux-Fr : [rejoindre](https://discord.gg/B5TzW7x) diff --git a/msg/jokes.md b/msg/jokes.md deleted file mode 100644 index 8b13789..0000000 --- a/msg/jokes.md +++ /dev/null @@ -1 +0,0 @@ - diff --git a/params.json b/params.json new file mode 100644 index 0000000..88bb13d --- /dev/null +++ b/params.json @@ -0,0 +1,6 @@ +{ + "token": "token", + "bots_key": "don't touch", + "client_id": "client id!", + "carbon_key": "don't touch" +} diff --git a/readme.md b/readme.md new file mode 100644 index 0000000..8360888 --- /dev/null +++ b/readme.md @@ -0,0 +1,39 @@ +# Titre du projet + +[![forthebadge](http://forthebadge.com/images/badges/contains-cat-gifs.svg)](http://forthebadge.com) + +TuxBot, un bot discord écrit en Python. +Ici se trouve le code source de ce bot proventant du serveur Discord "Aide GNU/Linux-Fr", il à été créé spécialement pour ce discord, si vous souhaitez l'utiliser il vous faudra modifier ``settings.json`` et ``cogs/utils/checks.py`` ;) + +### Pré-requis + +Il vous faut : + +- Un ordinateur sous **linux** avec une connexion à l'internet +- Python3.5 ou + +- Installer ``requirements.txt`` (avec ``pip install -r requirements.txt`` par ex) + +### Installation + +Une fois les prérequis installés et les paramètres édités placez vous dans le repertoire du bot et lancez ``bot.py`` avec python3 (ex: ``python3 bot.py``) + +## Démarrage + +Placez vous dans le repertoire du bot et lancez ``bot.py`` avec python3 (ex: ``python3 bot.py``) + +## Fabriqué avec +* [PyCharm](https://www.jetbrains.com/pycharm/) - Editeur de texte payant :3 +* [discord.py](https://github.com/Rapptz/discord.py) - API Python pour discord + +## Versions +Liste des versions : [Cliquer pour afficher](https://github.com/outout14/tuxbot-bot/tags) + +## Auteurs +* **Maël** _alias_ [@outout14](https://github.com/outout14) +* **Romain** _alias_ [Romain le malchanceux](https://github.com/Rom194) + +## License + +Ce projet est sous licence ``WTFTPL`` - voir le fichier [LICENSE.md](LICENSE.md) pour plus d'informations + + diff --git a/start-windows.bat b/start-windows.bat deleted file mode 100755 index d3ee5e5..0000000 --- a/start-windows.bat +++ /dev/null @@ -1,4 +0,0 @@ -@ECHO off -color f8 -title TuxBOT / Windows -CMD /k python main.py diff --git a/start.sh b/start.sh index 8f34d04..b14fc8f 100755 --- a/start.sh +++ b/start.sh @@ -2,4 +2,4 @@ title="{TuxBot} - Unix Commander" echo -e '\033]2;'$title'\007' -python3 main.py +python3 bot.py diff --git a/texts/ci-info.md b/texts/ci-info.md new file mode 100644 index 0000000..a230a3e --- /dev/null +++ b/texts/ci-info.md @@ -0,0 +1,9 @@ +La carte d'identité est un petit système dans tuxbot permetant de vous démarquer de vos amis en ayant la possibilité d'y renseigner plusieurs informations ! + +**Liste des commandes : ** +-> ci : Affiche l'aide sur les cartes d'identité +-> ci show _@pseudo_ : Affiche la carte d'identité de _pseudo_ +-> ci register : Vous enregistre dans la base de donnée des cartes d'identité +-> ci setos _nom de l'os_ : Défini le système d'exploitation +-> ci setconfig _votre configuration pc_ : Défini la configuration de votre ordinateur +-> ci setcountry : Défini votre Pays diff --git a/msg/clocks.md b/texts/clocks.md similarity index 71% rename from msg/clocks.md rename to texts/clocks.md index 2f4895b..45cc12c 100644 --- a/msg/clocks.md +++ b/texts/clocks.md @@ -1,5 +1,5 @@ -_Pour utiliser les Horloges utilisez la commande : **{0}clock **nom de l'horloge_ +_Pour utiliser les Horloges utilisez la commande : **clock **nom de l'horloge_ -> Montreal (Canada, QC) -> Vancouver (Canada, BC) -> New-York / N-Y (U.S.A.) diff --git a/texts/help.md b/texts/help.md new file mode 100644 index 0000000..1c54294 --- /dev/null +++ b/texts/help.md @@ -0,0 +1,36 @@ + +**Commandes diverses** : +-> info : Affiche des informations sur le bot +-> help : Affiche ce message +-> ci : Affiche l'aide et des infos sur le système de carte d'identité +-> clock list: Affiche la liste des horloges des villes +-> ping : Ping le bot +-> github : Affiche le repos Github du Bot :heart: + +**Commandes utilitaires** +-> afk : Signaler son absence +-> back : Signaler son retour +-> clock _ville_: Affiche l'heure et quelques infos sur la ville en question +-> ytdiscover : Découvrir des chaines youtube +-> search _site_ _contenu_ : Fait une recherche sur un site (.search pour plus d'infos) +-> avatar _@pseudo_ : Récupère l'avatar de _@pseudo_ + +**Commandes Funs** +-> joke : Affiche une blague aléatoire +-> ethylotest : Simule un ethylotest détraqué +-> pokemon : Lance un combat de pokémons aléatoires +-> coin : Fait un pile ou face +-> randomcat : Affiche des image de chats :3 + +**Commandes Carte d'Identité** +-> ci : Affiche l'aide sur les cartes d'identité +-> ci show _@pseudo_ : Affiche la carte d'identité de _pseudo_ +-> ci register : Vous enregistre dans la base de donnée des cartes d'identité +-> ci setos _nom de l'os_ : Défini le système d'exploitation +-> ci setconfig _votre configuration pc_ : Défini la configuration de votre ordinateur +-> ci setcountry : Défini votre Pays + +** Commandes d'administration ** +-> say _votre message_ : fait le bot écrire +-> clear _nombre_ : Supprime _nombre_ de messages + diff --git a/texts/info.md b/texts/info.md new file mode 100644 index 0000000..8fc161a --- /dev/null +++ b/texts/info.md @@ -0,0 +1,18 @@ + +==> **Développement** : +└> Outout : [outout.tech](https://outout.tech/) +└> Romain : [son github](https://github.com/Rom194) +└> Langage : [Python3](http://www.python.org/) +└> Api : [discord.py {3}](https://github.com/Rapptz/discord.py) +└> En se basant sur : [RobotDanny](https://github.com/Rapptz/RoboDanny) + +==> **Hébergé sur "{2}"**: +└> OS : {0} +└> Version de Python : {1} + +==> **Contact** : +└> Discord : Outout#8406 +└> Mail : [outout@linuxmail.org](mailto:outout@linuxmail.org) + +==> **Serveur Discord d'Origine** : +└> Aide GNU/Linux-Fr : [rejoindre](https://discord.gg/B5TzW7x) diff --git a/texts/jokes.json b/texts/jokes.json new file mode 100644 index 0000000..b3cfb59 --- /dev/null +++ b/texts/jokes.json @@ -0,0 +1,14 @@ +{ + "1": {"content": "Les hyperboles sa sert à manger des hyper-soupes :3 (Lawl!)", "author": "Crumble14 (bukkit.fr)"}, + "2": {"content": "Le comble de Windows, c’est que pour l’arrêter, il faut cliquer sur démarrer.", "author": "Keke142 (bukkit.fr)"}, + "3": {"content": "Chrome: On est le 8 avril 2016 13h02 \n Safari: On est le 8 avril 2016 12h02 \n Internet Explorer: On est le... **[Internet Explorer a cessé de fonctionner, veuillez redémarrer votre machine]**", "author": "NyoSan"}, + "4": {"content": "Il y a 10 types de personnes dans le monde, ceux qui comprennent le binaire et les autres.", "author": "Dartasen (bukkit.fr)"}, + "5": {"content": "C'est une requête SQL qui rentre dans un bar et qui s'adresse à deux tables \"Puis-je vous joindre ?\".\"", "author": "Dartasen (bukkit.fr)"}, + "6": {"content": "Combien de développeurs faut-il pour remplacer une ampoule grillée ? Aucun, c'est un problème Hardware.", "author": "Dartasen (bukkit.fr)"}, + "7": {"content": "Tu sais que tu as affaire à un développeur quand ça ne le gêne pas d'avoir un String dans l'Array.", "author": "Dartasen (bukkit.fr)"}, + "8": {"content": "Pourquoi y'a pas d'adresse windows ou linux ? Si y'a l'addresse mac !", "author": "Antho"}, + "9": {"content": "Les appareils apple ont ils une adresse personnalisée ?", "author": "Outout"}, + "10": {"content": "Le 1er janvier 1970 c'est le jour où il y a eu le plus de plantages. (cf : http://bit.ly/2rArLVe)", "author": "NyoSan"}, + "11": {"content": "Pourquoi est-ce que les girafes aiment magasiner à bas prix? Tout est une question de cou.", "author": "Maxx_Qc (bukkit.fr)"}, + "12": {"content": "``Même éteint le hackeur peut pirater l'ordi`` \"Le SuperGeek tournant sous Ubuntu (ou Windows)\"", "author": "Outout"} +} \ No newline at end of file diff --git a/texts/pokemons.json b/texts/pokemons.json new file mode 100644 index 0000000..27f4b83 --- /dev/null +++ b/texts/pokemons.json @@ -0,0 +1 @@ +[{"Number":"001","Name":"Bulbasaur","Generation":"Generation I","About":"Bulbasaur can be seen napping in bright sunlight. There is a seed on its back. By soaking up the sun's rays, the seed grows progressively larger.","Types":["Grass","Poison"],"Resistant":["Water","Electric","Grass","Fighting","Fairy"],"Weaknesses":["Fire","Ice","Flying","Psychic"],"Fast Attack(s)":[{"Name":"Tackle","Type":"Normal","Damage":12},{"Name":"Vine Whip","Type":"Grass","Damage":7}],"Special Attack(s)":[{"Name":"Power Whip","Type":"Grass","Damage":70},{"Name":"Seed Bomb","Type":"Grass","Damage":40},{"Name":"Sludge Bomb","Type":"Poison","Damage":55}],"Weight":{"Minimum":"6.04kg","Maximum":"7.76kg"},"Height":{"Minimum":"0.61m","Maximum":"0.79m"},"Buddy Distance":"3km (Medium)","Base Stamina":"90 stamina points.","Base Attack":"118 attack points.","Base Defense":"118 defense points.","Base Flee Rate":"10% chance to flee.","Next Evolution Requirements":{"Amount":25,"Name":"Bulbasaur candies"},"Next evolution(s)":[{"Number":2,"Name":"Ivysaur"},{"Number":3,"Name":"Venusaur"}],"MaxCP":951,"MaxHP":1071},{"Number":"002","Name":"Ivysaur","Generation":"Generation I","About":"There is a bud on this Pokémon's back. To support its weight, Ivysaur's legs and trunk grow thick and strong. If it starts spending more time lying in the sunlight, it's a sign that the bud will bloom into a large flower soon.","Types":["Grass","Poison"],"Resistant":["Water","Electric","Grass","Fighting","Fairy"],"Weaknesses":["Fire","Ice","Flying","Psychic"],"Fast Attack(s)":[{"Name":"Razor Leaf","Type":"Grass","Damage":15},{"Name":"Vine Whip","Type":"Grass","Damage":7}],"Special Attack(s)":[{"Name":"Power Whip","Type":"Grass","Damage":70},{"Name":"Sludge Bomb","Type":"Poison","Damage":55},{"Name":"Solar Beam","Type":"Grass","Damage":120}],"Weight":{"Minimum":"11.38kg","Maximum":"14.63kg"},"Height":{"Minimum":"0.88m","Maximum":"1.13m"},"Buddy Distance":"3km (Big)","Base Stamina":"120 stamina points.","Base Attack":"151 attack points.","Base Defense":"151 defense points.","Base Flee Rate":"7% chance to flee.","Previous evolution(s)":[{"Number":1,"Name":"Bulbasaur"}],"Next Evolution Requirements":{"Amount":100,"Name":"Bulbasaur candies"},"Next evolution(s)":[{"Number":3,"Name":"Venusaur"}],"MaxCP":1483,"MaxHP":1632},{"Number":"003","Name":"Venusaur","Generation":"Generation I","About":"There is a large flower on Venusaur's back. The flower is said to take on vivid colors if it gets plenty of nutrition and sunlight. The flower's aroma soothes the emotions of people.","Types":["Grass","Poison"],"Resistant":["Water","Electric","Grass","Fighting","Fairy"],"Weaknesses":["Fire","Ice","Flying","Psychic"],"Fast Attack(s)":[{"Name":"Razor Leaf","Type":"Grass","Damage":15},{"Name":"Vine Whip","Type":"Grass","Damage":7}],"Special Attack(s)":[{"Name":"Petal Blizzard","Type":"Grass","Damage":65},{"Name":"Sludge Bomb","Type":"Poison","Damage":55},{"Name":"Solar Beam","Type":"Grass","Damage":120}],"Weight":{"Minimum":"87.5kg","Maximum":"112.5kg"},"Height":{"Minimum":"1.75m","Maximum":"2.25m"},"Buddy Distance":"3km (Big)","Base Stamina":"160 stamina points.","Base Attack":"198 attack points.","Base Defense":"198 defense points.","Base Flee Rate":"5% chance to flee.","Previous evolution(s)":[{"Number":1,"Name":"Bulbasaur"},{"Number":2,"Name":"Ivysaur"}],"MaxCP":2392,"MaxHP":2580},{"Number":"004","Name":"Charmander","Generation":"Generation I","About":"The flame that burns at the tip of its tail is an indication of its emotions. The flame wavers when Charmander is enjoying itself. If the Pokémon becomes enraged, the flame burns fiercely.","Types":["Fire"],"Resistant":["Fire","Grass","Ice","Bug","Steel","Fairy"],"Weaknesses":["Water","Ground","Rock"],"Fast Attack(s)":[{"Name":"Ember","Type":"Fire","Damage":10},{"Name":"Scratch","Type":"Normal","Damage":6}],"Special Attack(s)":[{"Name":"Flame Burst","Type":"Fire","Damage":30},{"Name":"Flame Charge","Type":"Fire","Damage":25},{"Name":"Flamethrower","Type":"Fire","Damage":55}],"Weight":{"Minimum":"7.44kg","Maximum":"9.56kg"},"Height":{"Minimum":"0.53m","Maximum":"0.68m"},"Buddy Distance":"3km (Medium)","Base Stamina":"78 stamina points.","Base Attack":"116 attack points.","Base Defense":"96 defense points.","Base Flee Rate":"10% chance to flee.","Next Evolution Requirements":{"Amount":25,"Name":"Charmander candies"},"Next evolution(s)":[{"Number":5,"Name":"Charmeleon"},{"Number":6,"Name":"Charizard"}],"MaxCP":841,"MaxHP":955},{"Number":"005","Name":"Charmeleon","Generation":"Generation I","About":"Charmeleon mercilessly destroys its foes using its sharp claws. If it encounters a strong foe, it turns aggressive. In this excited state, the flame at the tip of its tail flares with a bluish white color.","Types":["Fire"],"Resistant":["Fire","Grass","Ice","Bug","Steel","Fairy"],"Weaknesses":["Water","Ground","Rock"],"Fast Attack(s)":[{"Name":"Ember","Type":"Fire","Damage":10},{"Name":"Scratch","Type":"Normal","Damage":6}],"Special Attack(s)":[{"Name":"Fire Punch","Type":"Fire","Damage":40},{"Name":"Flame Burst","Type":"Fire","Damage":30},{"Name":"Flamethrower","Type":"Fire","Damage":55}],"Weight":{"Minimum":"16.63kg","Maximum":"21.38kg"},"Height":{"Minimum":"0.96m","Maximum":"1.24m"},"Buddy Distance":"3km (Medium)","Base Stamina":"116 stamina points.","Base Attack":"158 attack points.","Base Defense":"129 defense points.","Base Flee Rate":"7% chance to flee.","Previous evolution(s)":[{"Number":4,"Name":"Charmander"}],"Next Evolution Requirements":{"Amount":100,"Name":"Charmander candies"},"Next evolution(s)":[{"Number":6,"Name":"Charizard"}],"MaxCP":1411,"MaxHP":1557},{"Number":"006","Name":"Charizard","Generation":"Generation I","About":"Charizard flies around the sky in search of powerful opponents. It breathes fire of such great heat that it melts anything. However, it never turns its fiery breath on any opponent weaker than itself.","Types":["Fire","Flying"],"Resistant":["Fire","Grass","Fighting","Bug","Steel","Fairy"],"Weaknesses":["Water","Electric","Rock"],"Fast Attack(s)":[{"Name":"Ember","Type":"Fire","Damage":10},{"Name":"Wing Attack","Type":"Flying","Damage":9}],"Special Attack(s)":[{"Name":"Dragon Claw","Type":"Dragon","Damage":35},{"Name":"Fire Blast","Type":"Fire","Damage":100},{"Name":"Flamethrower","Type":"Fire","Damage":55}],"Weight":{"Minimum":"79.19kg","Maximum":"101.81kg"},"Height":{"Minimum":"1.49m","Maximum":"1.91m"},"Buddy Distance":"3km (Big)","Base Stamina":"156 stamina points.","Base Attack":"223 attack points.","Base Defense":"176 defense points.","Base Flee Rate":"5% chance to flee.","Previous evolution(s)":[{"Number":4,"Name":"Charmander"},{"Number":5,"Name":"Charmeleon"}],"MaxCP":2413,"MaxHP":2602},{"Number":"007","Name":"Squirtle","Generation":"Generation I","About":"Squirtle's shell is not merely used for protection. The shell's rounded shape and the grooves on its surface help minimize resistance in water, enabling this Pokémon to swim at high speeds.","Types":["Water"],"Resistant":["Fire","Water","Ice","Steel"],"Weaknesses":["Electric","Grass"],"Fast Attack(s)":[{"Name":"Bubble","Type":"Water","Damage":25},{"Name":"Tackle","Type":"Normal","Damage":12}],"Special Attack(s)":[{"Name":"Aqua Jet","Type":"Water","Damage":25},{"Name":"Aqua Tail","Type":"Water","Damage":45},{"Name":"Water Pulse","Type":"Water","Damage":35}],"Weight":{"Minimum":"7.88kg","Maximum":"10.13kg"},"Height":{"Minimum":"0.44m","Maximum":"0.56m"},"Buddy Distance":"3km (Medium)","Base Stamina":"88 stamina points.","Base Attack":"94 attack points.","Base Defense":"122 defense points.","Base Flee Rate":"10% chance to flee.","Next Evolution Requirements":{"Amount":25,"Name":"Squirtle candies"},"Next evolution(s)":[{"Number":8,"Name":"Wartortle"},{"Number":9,"Name":"Blastoise"}],"MaxCP":891,"MaxHP":1008},{"Number":"008","Name":"Wartortle","Generation":"Generation I","About":"Its tail is large and covered with a rich, thick fur. The tail becomes increasingly deeper in color as Wartortle ages. The scratches on its shell are evidence of this Pokémon's toughness as a battler.","Types":["Water"],"Resistant":["Fire","Water","Ice","Steel"],"Weaknesses":["Electric","Grass"],"Fast Attack(s)":[{"Name":"Bite","Type":"Dark","Damage":6},{"Name":"Water Gun","Type":"Water","Damage":6}],"Special Attack(s)":[{"Name":"Aqua Jet","Type":"Water","Damage":25},{"Name":"Hydro Pump","Type":"Water","Damage":90},{"Name":"Ice Beam","Type":"Ice","Damage":65}],"Weight":{"Minimum":"19.69kg","Maximum":"25.31kg"},"Height":{"Minimum":"0.88m","Maximum":"1.13m"},"Buddy Distance":"3km (Medium)","Base Stamina":"118 stamina points.","Base Attack":"126 attack points.","Base Defense":"155 defense points.","Base Flee Rate":"7% chance to flee.","Previous evolution(s)":[{"Number":7,"Name":"Squirtle"}],"Next Evolution Requirements":{"Amount":100,"Name":"Squirtle candies"},"Next evolution(s)":[{"Number":9,"Name":"Blastoise"}],"MaxCP":1435,"MaxHP":1582},{"Number":"009","Name":"Blastoise","Generation":"Generation I","About":"Blastoise has water spouts that protrude from its shell. The water spouts are very accurate. They can shoot bullets of water with enough accuracy to strike empty cans from a distance of over 160 feet.","Types":["Water"],"Resistant":["Fire","Water","Ice","Steel"],"Weaknesses":["Electric","Grass"],"Fast Attack(s)":[{"Name":"Bite","Type":"Dark","Damage":6},{"Name":"Water Gun","Type":"Water","Damage":6}],"Special Attack(s)":[{"Name":"Flash Cannon","Type":"Steel","Damage":60},{"Name":"Hydro Pump","Type":"Water","Damage":90},{"Name":"Ice Beam","Type":"Ice","Damage":65}],"Weight":{"Minimum":"74.81kg","Maximum":"96.19kg"},"Height":{"Minimum":"1.4m","Maximum":"1.8m"},"Buddy Distance":"3km (Big)","Base Stamina":"158 stamina points.","Base Attack":"171 attack points.","Base Defense":"210 defense points.","Base Flee Rate":"5% chance to flee.","Previous evolution(s)":[{"Number":7,"Name":"Squirtle"},{"Number":8,"Name":"Wartortle"}],"MaxCP":2355,"MaxHP":2542},{"Number":"010","Name":"Caterpie","Generation":"Generation I","About":"Caterpie has a voracious appetite. It can devour leaves bigger than its body right before your eyes. From its antenna, this Pokémon releases a terrifically strong odor.","Types":["Bug"],"Resistant":["Grass","Fighting","Ground"],"Weaknesses":["Fire","Flying","Rock"],"Fast Attack(s)":[{"Name":"Bug Bite","Type":"Bug","Damage":5},{"Name":"Tackle","Type":"Normal","Damage":12}],"Special Attack(s)":[{"Name":"Struggle","Type":"Normal","Damage":15}],"Weight":{"Minimum":"2.54kg","Maximum":"3.26kg"},"Height":{"Minimum":"0.26m","Maximum":"0.34m"},"Buddy Distance":"1km (Shoulder)","Base Stamina":"90 stamina points.","Base Attack":"55 attack points.","Base Defense":"62 defense points.","Base Flee Rate":"20% chance to flee.","Next Evolution Requirements":{"Amount":12,"Name":"Caterpie candies"},"Next evolution(s)":[{"Number":11,"Name":"Metapod"},{"Number":12,"Name":"Butterfree"}],"MaxCP":367,"MaxHP":443},{"Number":"011","Name":"Metapod","Generation":"Generation I","About":"The shell covering this Pokémon’s body is as hard as an iron slab. Metapod does not move very much. It stays still because it is preparing its soft innards for evolution inside the hard shell.","Types":["Bug"],"Resistant":["Grass","Fighting","Ground"],"Weaknesses":["Fire","Flying","Rock"],"Fast Attack(s)":[{"Name":"Bug Bite","Type":"Bug","Damage":5},{"Name":"Tackle","Type":"Normal","Damage":12}],"Special Attack(s)":[{"Name":"Struggle","Type":"Normal","Damage":15}],"Weight":{"Minimum":"8.66kg","Maximum":"11.14kg"},"Height":{"Minimum":"0.61m","Maximum":"0.79m"},"Buddy Distance":"1km (Medium)","Base Stamina":"100 stamina points.","Base Attack":"45 attack points.","Base Defense":"94 defense points.","Base Flee Rate":"9% chance to flee.","Previous evolution(s)":[{"Number":10,"Name":"Caterpie"}],"Next Evolution Requirements":{"Amount":50,"Name":"Caterpie candies"},"Next evolution(s)":[{"Number":12,"Name":"Butterfree"}],"MaxCP":397,"MaxHP":477},{"Number":"012","Name":"Butterfree","Generation":"Generation I","About":"Butterfree has a superior ability to search for delicious honey from flowers. It can even search out, extract, and carry honey from flowers that are blooming over six miles from its nest.","Types":["Bug","Flying"],"Resistant":["Grass","Fighting","Ground","Bug"],"Weaknesses":["Fire","Electric","Ice","Flying","Rock"],"Fast Attack(s)":[{"Name":"Bug Bite","Type":"Bug","Damage":5},{"Name":"Confusion","Type":"Psychic","Damage":15}],"Special Attack(s)":[{"Name":"Bug Buzz","Type":"Bug","Damage":75},{"Name":"Psychic","Type":"Psychic","Damage":55},{"Name":"Signal Beam","Type":"Bug","Damage":45}],"Weight":{"Minimum":"28kg","Maximum":"36kg"},"Height":{"Minimum":"0.96m","Maximum":"1.24m"},"Buddy Distance":"1km (Flying)","Base Stamina":"120 stamina points.","Base Attack":"167 attack points.","Base Defense":"151 defense points.","Base Flee Rate":"6% chance to flee.","Previous evolution(s)":[{"Number":10,"Name":"Caterpie"},{"Number":11,"Name":"Metapod"}],"MaxCP":1315,"MaxHP":1454},{"Number":"013","Name":"Weedle","Generation":"Generation I","About":"Weedle has an extremely acute sense of smell. It is capable of distinguishing its favorite kinds of leaves from those it dislikes just by sniffing with its big red proboscis (nose).","Types":["Bug","Poison"],"Resistant":["Grass","Fighting","Poison","Bug","Fairy"],"Weaknesses":["Fire","Flying","Psychic","Rock"],"Fast Attack(s)":[{"Name":"Bug Bite","Type":"Bug","Damage":5},{"Name":"Poison Sting","Type":"Poison","Damage":6}],"Special Attack(s)":[{"Name":"Struggle","Type":"Normal","Damage":15}],"Weight":{"Minimum":"2.8kg","Maximum":"3.6kg"},"Height":{"Minimum":"0.26m","Maximum":"0.34m"},"Buddy Distance":"1km (Shoulder)","Base Stamina":"80 stamina points.","Base Attack":"63 attack points.","Base Defense":"55 defense points.","Base Flee Rate":"20% chance to flee.","Next Evolution Requirements":{"Amount":12,"Name":"Weedle candies"},"Next evolution(s)":[{"Number":14,"Name":"Kakuna"},{"Number":15,"Name":"Beedrill"}],"MaxCP":372,"MaxHP":449},{"Number":"014","Name":"Kakuna","Generation":"Generation I","About":"Kakuna remains virtually immobile as it clings to a tree. However, on the inside, it is extremely busy as it prepares for its coming evolution. This is evident from how hot the shell becomes to the touch.","Types":["Bug","Poison"],"Resistant":["Grass","Fighting","Poison","Bug","Fairy"],"Weaknesses":["Fire","Flying","Psychic","Rock"],"Fast Attack(s)":[{"Name":"Bug Bite","Type":"Bug","Damage":5},{"Name":"Poison Sting","Type":"Poison","Damage":6}],"Special Attack(s)":[{"Name":"Struggle","Type":"Normal","Damage":15}],"Weight":{"Minimum":"8.75kg","Maximum":"11.25kg"},"Height":{"Minimum":"0.53m","Maximum":"0.68m"},"Buddy Distance":"1km (Medium)","Base Stamina":"90 stamina points.","Base Attack":"46 attack points.","Base Defense":"86 defense points.","Base Flee Rate":"9% chance to flee.","Previous evolution(s)":[{"Number":13,"Name":"Weedle"}],"Next Evolution Requirements":{"Amount":50,"Name":"Weedle candies"},"Next evolution(s)":[{"Number":15,"Name":"Beedrill"}],"MaxCP":405,"MaxHP":485},{"Number":"015","Name":"Beedrill","Generation":"Generation I","About":"Beedrill is extremely territorial. No one should ever approach its nest—this is for their own safety. If angered, they will attack in a furious swarm.","Types":["Bug","Poison"],"Resistant":["Grass","Fighting","Poison","Bug","Fairy"],"Weaknesses":["Fire","Flying","Psychic","Rock"],"Fast Attack(s)":[{"Name":"Bug Bite","Type":"Bug","Damage":5},{"Name":"Poison Jab","Type":"Poison","Damage":12}],"Special Attack(s)":[{"Name":"Aerial Ace","Type":"Flying","Damage":30},{"Name":"Sludge Bomb","Type":"Poison","Damage":55},{"Name":"X Scissor","Type":"Bug","Damage":35}],"Weight":{"Minimum":"25.81kg","Maximum":"33.19kg"},"Height":{"Minimum":"0.88m","Maximum":"1.13m"},"Buddy Distance":"1km (Flying)","Base Stamina":"130 stamina points.","Base Attack":"169 attack points.","Base Defense":"150 defense points.","Base Flee Rate":"6% chance to flee.","Previous evolution(s)":[{"Number":13,"Name":"Weedle"},{"Number":14,"Name":"Kakuna"}],"MaxCP":1301,"MaxHP":1439},{"Number":"016","Name":"Pidgey","Generation":"Generation I","About":"Pidgey has an extremely sharp sense of direction. It is capable of unerringly returning home to its nest, however far it may be removed from its familiar surroundings.","Types":["Normal","Flying"],"Resistant":["Grass","Ground","Bug","Ghost"],"Weaknesses":["Electric","Ice","Rock"],"Fast Attack(s)":[{"Name":"Quick Attack","Type":"Normal","Damage":10},{"Name":"Tackle","Type":"Normal","Damage":12}],"Special Attack(s)":[{"Name":"Aerial Ace","Type":"Flying","Damage":30},{"Name":"Air Cutter","Type":"Flying","Damage":30},{"Name":"Twister","Type":"Dragon","Damage":25}],"Weight":{"Minimum":"1.57kg","Maximum":"2.02kg"},"Height":{"Minimum":"0.26m","Maximum":"0.34m"},"Buddy Distance":"1km (Shoulder)","Base Stamina":"80 stamina points.","Base Attack":"85 attack points.","Base Defense":"76 defense points.","Base Flee Rate":"20% chance to flee.","Next Evolution Requirements":{"Amount":12,"Name":"Pidgey candies"},"Next evolution(s)":[{"Number":17,"Name":"Pidgeotto"},{"Number":18,"Name":"Pidgeot"}],"MaxCP":585,"MaxHP":679},{"Number":"017","Name":"Pidgeotto","Generation":"Generation I","About":"Pidgeotto claims a large area as its own territory. This Pokémon flies around, patrolling its living space. If its territory is violated, it shows no mercy in thoroughly punishing the foe with its sharp claws.","Types":["Normal","Flying"],"Resistant":["Grass","Ground","Bug","Ghost"],"Weaknesses":["Electric","Ice","Rock"],"Fast Attack(s)":[{"Name":"Steel Wing","Type":"Steel","Damage":15},{"Name":"Wing Attack","Type":"Flying","Damage":9}],"Special Attack(s)":[{"Name":"Aerial Ace","Type":"Flying","Damage":30},{"Name":"Air Cutter","Type":"Flying","Damage":30},{"Name":"Twister","Type":"Dragon","Damage":25}],"Weight":{"Minimum":"26.25kg","Maximum":"33.75kg"},"Height":{"Minimum":"0.96m","Maximum":"1.24m"},"Buddy Distance":"1km (Flying)","Base Stamina":"126 stamina points.","Base Attack":"117 attack points.","Base Defense":"108 defense points.","Base Flee Rate":"9% chance to flee.","Previous evolution(s)":[{"Number":16,"Name":"Pidgey"}],"Next Evolution Requirements":{"Amount":50,"Name":"Pidgey candies"},"Next evolution(s)":[{"Number":18,"Name":"Pidgeot"}],"MaxCP":1096,"MaxHP":1223},{},{"Number":"019","Name":"Rattata","Generation":"Generation I","About":"Rattata is cautious in the extreme. Even while it is asleep, it constantly listens by moving its ears around. It is not picky about where it lives—it will make its nest anywhere.","Types":["Normal"],"Resistant":["Ghost"],"Weaknesses":["Fighting"],"Fast Attack(s)":[{"Name":"Quick Attack","Type":"Normal","Damage":10},{"Name":"Tackle","Type":"Normal","Damage":12}],"Special Attack(s)":[{"Name":"Body Slam","Type":"Normal","Damage":40},{"Name":"Dig","Type":"Ground","Damage":70},{"Name":"Hyper Fang","Type":"Normal","Damage":35}],"Weight":{"Minimum":"3.06kg","Maximum":"3.94kg"},"Height":{"Minimum":"0.26m","Maximum":"0.34m"},"Buddy Distance":"1km (Medium)","Base Stamina":"60 stamina points.","Base Attack":"103 attack points.","Base Defense":"70 defense points.","Base Flee Rate":"20% chance to flee.","Next Evolution Requirements":{"Amount":25,"Name":"Rattata candies"},"Next evolution(s)":[{"Number":20,"Name":"Raticate"}],"MaxCP":493,"MaxHP":581},{"Number":"020","Name":"Raticate","Generation":"Generation I","About":"Raticate’s sturdy fangs grow steadily. To keep them ground down, it gnaws on rocks and logs. It may even chew on the walls of houses.","Types":["Normal"],"Resistant":["Ghost"],"Weaknesses":["Fighting"],"Fast Attack(s)":[{"Name":"Bite","Type":"Dark","Damage":6},{"Name":"Quick Attack","Type":"Normal","Damage":10}],"Special Attack(s)":[{"Name":"Dig","Type":"Ground","Damage":70},{"Name":"Hyper Beam","Type":"Normal","Damage":120},{"Name":"Hyper Fang","Type":"Normal","Damage":35}],"Weight":{"Minimum":"16.19kg","Maximum":"20.81kg"},"Height":{"Minimum":"0.61m","Maximum":"0.79m"},"Buddy Distance":"1km (Medium)","Base Stamina":"110 stamina points.","Base Attack":"161 attack points.","Base Defense":"144 defense points.","Base Flee Rate":"7% chance to flee.","Previous evolution(s)":[{"Number":19,"Name":"Rattata"}],"MaxCP":1304,"MaxHP":1444},{"Number":"021","Name":"Spearow","Generation":"Generation I","About":"Spearow has a very loud cry that can be heard over half a mile away. If its high, keening cry is heard echoing all around, it is a sign that they are warning each other of danger.","Types":["Normal","Flying"],"Resistant":["Grass","Ground","Bug","Ghost"],"Weaknesses":["Electric","Ice","Rock"],"Fast Attack(s)":[{"Name":"Peck","Type":"Flying","Damage":10},{"Name":"Quick Attack","Type":"Normal","Damage":10}],"Special Attack(s)":[{"Name":"Aerial Ace","Type":"Flying","Damage":30},{"Name":"Drill Peck","Type":"Flying","Damage":40},{"Name":"Twister","Type":"Dragon","Damage":25}],"Weight":{"Minimum":"1.75kg","Maximum":"2.25kg"},"Height":{"Minimum":"0.26m","Maximum":"0.34m"},"Buddy Distance":"1km (Shoulder)","Base Stamina":"80 stamina points.","Base Attack":"112 attack points.","Base Defense":"61 defense points.","Base Flee Rate":"15% chance to flee.","Next Evolution Requirements":{"Amount":50,"Name":"Spearow candies"},"Next evolution(s)":[{"Number":22,"Name":"Fearow"}],"MaxCP":591,"MaxHP":686},{"Number":"022","Name":"Fearow","Generation":"Generation I","About":"Fearow is recognized by its long neck and elongated beak. They are conveniently shaped for catching prey in soil or water. It deftly moves its long and skinny beak to pluck prey.","Types":["Normal","Flying"],"Resistant":["Grass","Ground","Bug","Ghost"],"Weaknesses":["Electric","Ice","Rock"],"Fast Attack(s)":[{"Name":"Peck","Type":"Flying","Damage":10},{"Name":"Steel Wing","Type":"Steel","Damage":15}],"Special Attack(s)":[{"Name":"Aerial Ace","Type":"Flying","Damage":30},{"Name":"Drill Run","Type":"Ground","Damage":50},{"Name":"Twister","Type":"Dragon","Damage":25}],"Weight":{"Minimum":"33.25kg","Maximum":"42.75kg"},"Height":{"Minimum":"1.05m","Maximum":"1.35m"},"Buddy Distance":"1km (Flying)","Base Stamina":"130 stamina points.","Base Attack":"182 attack points.","Base Defense":"135 defense points.","Base Flee Rate":"7% chance to flee.","Previous evolution(s)":[{"Number":21,"Name":"Spearow"}],"MaxCP":1592,"MaxHP":1746},{"Number":"023","Name":"Ekans","Generation":"Generation I","About":"Ekans curls itself up in a spiral while it rests. Assuming this position allows it to quickly respond to a threat from any direction with a glare from its upraised head.","Types":["Poison"],"Resistant":["Grass","Fighting","Poison","Bug","Fairy"],"Weaknesses":["Ground","Psychic"],"Fast Attack(s)":[{"Name":"Acid","Type":"Poison","Damage":10},{"Name":"Poison Sting","Type":"Poison","Damage":6}],"Special Attack(s)":[{"Name":"Gunk Shot","Type":"Poison","Damage":65},{"Name":"Sludge Bomb","Type":"Poison","Damage":55},{"Name":"Wrap","Type":"Normal","Damage":25}],"Weight":{"Minimum":"6.04kg","Maximum":"7.76kg"},"Height":{"Minimum":"1.75m","Maximum":"2.25m"},"Buddy Distance":"3km (Medium)","Base Stamina":"70 stamina points.","Base Attack":"110 attack points.","Base Defense":"102 defense points.","Base Flee Rate":"15% chance to flee.","Next Evolution Requirements":{"Amount":50,"Name":"Ekans candies"},"Next evolution(s)":[{"Number":24,"Name":"Arbok"}],"MaxCP":718,"MaxHP":824},{"Number":"024","Name":"Arbok","Generation":"Generation I","About":"This Pokémon is terrifically strong in order to constrict things with its body. It can even flatten steel oil drums. Once Arbok wraps its body around its foe, escaping its crunching embrace is impossible.","Types":["Poison"],"Resistant":["Grass","Fighting","Poison","Bug","Fairy"],"Weaknesses":["Ground","Psychic"],"Fast Attack(s)":[{"Name":"Acid","Type":"Poison","Damage":10},{"Name":"Bite","Type":"Dark","Damage":6}],"Special Attack(s)":[{"Name":"Dark Pulse","Type":"Dark","Damage":45},{"Name":"Gunk Shot","Type":"Poison","Damage":65},{"Name":"Sludge Wave","Type":"Poison","Damage":70}],"Weight":{"Minimum":"56.88kg","Maximum":"73.13kg"},"Height":{"Minimum":"3.06m","Maximum":"3.94m"},"Buddy Distance":"3km (Big)","Base Stamina":"120 stamina points.","Base Attack":"167 attack points.","Base Defense":"158 defense points.","Base Flee Rate":"7% chance to flee.","Previous evolution(s)":[{"Number":23,"Name":"Ekans"}],"MaxCP":1611,"MaxHP":1767},{"Number":"025","Name":"Pikachu","Generation":"Generation I","About":"Whenever Pikachu comes across something new, it blasts it with a jolt of electricity. If you come across a blackened berry, it's evidence that this Pokémon mistook the intensity of its charge.","Types":["Electric"],"Resistant":["Electric","Flying","Steel"],"Weaknesses":["Ground"],"Fast Attack(s)":[{"Name":"Quick Attack","Type":"Normal","Damage":10},{"Name":"Thunder Shock","Type":"Electric","Damage":5}],"Special Attack(s)":[{"Name":"Discharge","Type":"Electric","Damage":35},{"Name":"Thunder","Type":"Electric","Damage":100},{"Name":"Thunderbolt","Type":"Electric","Damage":55}],"Weight":{"Minimum":"5.25kg","Maximum":"6.75kg"},"Height":{"Minimum":"0.35m","Maximum":"0.45m"},"Buddy Distance":"1km (Shoulder)","Base Stamina":"70 stamina points.","Base Attack":"112 attack points.","Base Defense":"101 defense points.","Base Flee Rate":"10% chance to flee.","Previous evolution(s)":[{"Number":172,"Name":"Pichu"}],"Next Evolution Requirements":{"Amount":50,"Name":"Pikachu candies"},"Next evolution(s)":[{"Number":26,"Name":"Raichu"}],"MaxCP":777,"MaxHP":887},{"Number":"026","Name":"Raichu","Generation":"Generation I","About":"If the electrical sacs become excessively charged, Raichu plants its tail in the ground and discharges. Scorched patches of ground will be found near this Pokémon's nest.","Types":["Electric"],"Resistant":["Electric","Flying","Steel"],"Weaknesses":["Ground"],"Fast Attack(s)":[{"Name":"Spark","Type":"Electric","Damage":7},{"Name":"Thunder Shock","Type":"Electric","Damage":5}],"Special Attack(s)":[{"Name":"Brick Break","Type":"Fighting","Damage":30},{"Name":"Thunder","Type":"Electric","Damage":100},{"Name":"Thunder Punch","Type":"Electric","Damage":40}],"Weight":{"Minimum":"26.25kg","Maximum":"33.75kg"},"Height":{"Minimum":"0.7m","Maximum":"0.9m"},"Buddy Distance":"1km (Medium)","Base Stamina":"120 stamina points.","Base Attack":"193 attack points.","Base Defense":"165 defense points.","Base Flee Rate":"6% chance to flee.","Previous evolution(s)":[{"Number":172,"Name":"Pichu"},{"Number":25,"Name":"Pikachu"}],"MaxCP":1859,"MaxHP":2028},{"Number":"027","Name":"Sandshrew","Generation":"Generation I","About":"Sandshrew's body is configured to absorb water without waste, enabling it to survive in an arid desert. This Pokémon curls up to protect itself from its enemies.","Types":["Ground"],"Resistant":["Electric","Poison","Rock"],"Weaknesses":["Water","Grass","Ice"],"Fast Attack(s)":[{"Name":"Mud Shot","Type":"Ground","Damage":6},{"Name":"Scratch","Type":"Normal","Damage":6}],"Special Attack(s)":[{"Name":"Dig","Type":"Ground","Damage":70},{"Name":"Rock Slide","Type":"Rock","Damage":50},{"Name":"Rock Tomb","Type":"Rock","Damage":30}],"Weight":{"Minimum":"10.5kg","Maximum":"13.5kg"},"Height":{"Minimum":"0.53m","Maximum":"0.68m"},"Buddy Distance":"3km (Medium)","Base Stamina":"100 stamina points.","Base Attack":"126 attack points.","Base Defense":"145 defense points.","Base Flee Rate":"10% chance to flee.","Next Evolution Requirements":{"Amount":50,"Name":"Sandshrew candies"},"Next evolution(s)":[{"Number":28,"Name":"Sandslash"}],"MaxCP":695,"MaxHP":798},{"Number":"028","Name":"Sandslash","Generation":"Generation I","About":"Sandslash's body is covered by tough spikes, which are hardened sections of its hide. Once a year, the old spikes fall out, to be replaced with new spikes that grow out from beneath the old ones.","Types":["Ground"],"Resistant":["Electric","Poison","Rock"],"Weaknesses":["Water","Grass","Ice"],"Fast Attack(s)":[{"Name":"Metal Claw","Type":"Steel","Damage":8},{"Name":"Mud Shot","Type":"Ground","Damage":6}],"Special Attack(s)":[{"Name":"Bulldoze","Type":"Ground","Damage":35},{"Name":"Earthquake","Type":"Ground","Damage":100},{"Name":"Rock Tomb","Type":"Rock","Damage":30}],"Weight":{"Minimum":"25.81kg","Maximum":"33.19kg"},"Height":{"Minimum":"0.88m","Maximum":"1.13m"},"Buddy Distance":"3km (Medium)","Base Stamina":"150 stamina points.","Base Attack":"182 attack points.","Base Defense":"202 defense points.","Base Flee Rate":"6% chance to flee.","Previous evolution(s)":[{"Number":27,"Name":"Sandshrew"}],"MaxCP":1654,"MaxHP":1810},{"Number":"029","Name":"Nidoran ♀","Generation":"Generation I","About":"Nidoran♀ has barbs that secrete a powerful poison. They are thought to have developed as protection for this small-bodied Pokémon. When enraged, it releases a horrible toxin from its horn.","Types":["Poison"],"Resistant":["Grass","Fighting","Poison","Bug","Fairy"],"Weaknesses":["Ground","Psychic"],"Fast Attack(s)":[{"Name":"Bite","Type":"Dark","Damage":6},{"Name":"Poison Sting","Type":"Poison","Damage":6}],"Special Attack(s)":[{"Name":"Body Slam","Type":"Normal","Damage":40},{"Name":"Poison Fang","Type":"Poison","Damage":25},{"Name":"Sludge Bomb","Type":"Poison","Damage":55}],"Weight":{"Minimum":"6.13kg","Maximum":"7.88kg"},"Height":{"Minimum":"0.35m","Maximum":"0.45m"},"Buddy Distance":"3km (Medium)","Base Stamina":"110 stamina points.","Base Attack":"86 attack points.","Base Defense":"94 defense points.","Base Flee Rate":"15% chance to flee.","Next Evolution Requirements":{"Amount":25,"Name":"Nidoran Female candies"},"Next evolution(s)":[{"Number":30,"Name":"Nidorina"},{"Number":31,"Name":"Nidoqueen"}],"MaxCP":768,"MaxHP":876},{"Number":"030","Name":"Nidorina","Generation":"Generation I","About":"When Nidorina are with their friends or family, they keep their barbs tucked away to prevent hurting each other. This Pokémon appears to become nervous if separated from the others.","Types":["Poison"],"Resistant":["Grass","Fighting","Poison","Bug","Fairy"],"Weaknesses":["Ground","Psychic"],"Fast Attack(s)":[{"Name":"Bite","Type":"Dark","Damage":6},{"Name":"Poison Sting","Type":"Poison","Damage":6}],"Special Attack(s)":[{"Name":"Dig","Type":"Ground","Damage":70},{"Name":"Poison Fang","Type":"Poison","Damage":25},{"Name":"Sludge Bomb","Type":"Poison","Damage":55}],"Weight":{"Minimum":"17.5kg","Maximum":"22.5kg"},"Height":{"Minimum":"0.7m","Maximum":"0.9m"},"Buddy Distance":"3km (Medium)","Base Stamina":"140 stamina points.","Base Attack":"117 attack points.","Base Defense":"126 defense points.","Base Flee Rate":"7% chance to flee.","Previous evolution(s)":[{"Number":29,"Name":"Nidoran"}],"Next Evolution Requirements":{"Amount":100,"Name":"Nidoran Female candies"},"Next evolution(s)":[{"Number":31,"Name":"Nidoqueen"}],"MaxCP":1267,"MaxHP":1404},{"Number":"031","Name":"Nidoqueen","Generation":"Generation I","About":"Nidoqueen's body is encased in extremely hard scales. It is adept at sending foes flying with harsh tackles. This Pokémon is at its strongest when it is defending its young.","Types":["Poison","Ground"],"Resistant":["Electric","Fighting","Poison","Bug","Rock","Fairy"],"Weaknesses":["Water","Ice","Ground","Psychic"],"Fast Attack(s)":[{"Name":"Bite","Type":"Dark","Damage":6},{"Name":"Poison Jab","Type":"Poison","Damage":12}],"Special Attack(s)":[{"Name":"Earthquake","Type":"Ground","Damage":100},{"Name":"Sludge Wave","Type":"Poison","Damage":70},{"Name":"Stone Edge","Type":"Rock","Damage":80}],"Weight":{"Minimum":"52.5kg","Maximum":"67.5kg"},"Height":{"Minimum":"1.14m","Maximum":"1.46m"},"Buddy Distance":"3km (Big)","Base Stamina":"180 stamina points.","Base Attack":"180 attack points.","Base Defense":"174 defense points.","Base Flee Rate":"5% chance to flee.","Previous evolution(s)":[{"Number":29,"Name":"Nidoran"},{"Number":30,"Name":"Nidorina"}],"MaxCP":2301,"MaxHP":2485},{"Number":"032","Name":"Nidoran ♂","Generation":"Generation I","About":"Nidoran♂ has developed muscles for moving its ears. Thanks to them, the ears can be freely moved in any direction. Even the slightest sound does not escape this Pokémon's notice.","Types":["Poison"],"Resistant":["Grass","Fighting","Poison","Bug","Fairy"],"Weaknesses":["Ground","Psychic"],"Fast Attack(s)":[{"Name":"Peck","Type":"Flying","Damage":10},{"Name":"Poison Sting","Type":"Poison","Damage":6}],"Special Attack(s)":[{"Name":"Body Slam","Type":"Normal","Damage":40},{"Name":"Horn Attack","Type":"Normal","Damage":25},{"Name":"Sludge Bomb","Type":"Poison","Damage":55}],"Weight":{"Minimum":"7.88kg","Maximum":"10.13kg"},"Height":{"Minimum":"0.44m","Maximum":"0.56m"},"Buddy Distance":"3km (Medium)","Base Stamina":"92 stamina points.","Base Attack":"105 attack points.","Base Defense":"76 defense points.","Base Flee Rate":"15% chance to flee.","Next Evolution Requirements":{"Amount":25,"Name":"Nidoran Male candies"},"Next evolution(s)":[{"Number":33,"Name":"Nidorino"},{"Number":34,"Name":"Nidoking"}],"MaxCP":737,"MaxHP":843},{"Number":"033","Name":"Nidorino","Generation":"Generation I","About":"Nidorino has a horn that is harder than a diamond. If it senses a hostile presence, all the barbs on its back bristle up at once, and it challenges the foe with all its might.","Types":["Poison"],"Resistant":["Grass","Fighting","Poison","Bug","Fairy"],"Weaknesses":["Ground","Psychic"],"Fast Attack(s)":[{"Name":"Poison Jab","Type":"Poison","Damage":12},{"Name":"Poison Sting","Type":"Poison","Damage":6}],"Special Attack(s)":[{"Name":"Dig","Type":"Ground","Damage":70},{"Name":"Horn Attack","Type":"Normal","Damage":25},{"Name":"Sludge Bomb","Type":"Poison","Damage":55}],"Weight":{"Minimum":"17.06kg","Maximum":"21.94kg"},"Height":{"Minimum":"0.79m","Maximum":"1.01m"},"Buddy Distance":"3km (Medium)","Base Stamina":"122 stamina points.","Base Attack":"137 attack points.","Base Defense":"112 defense points.","Base Flee Rate":"7% chance to flee.","Previous evolution(s)":[{"Number":32,"Name":"Nidoran"}],"Next Evolution Requirements":{"Amount":100,"Name":"Nidoran Male candies"},"Next evolution(s)":[{"Number":34,"Name":"Nidoking"}],"MaxCP":1236,"MaxHP":1372},{"Number":"034","Name":"Nidoking","Generation":"Generation I","About":"Nidoking's thick tail packs enormously destructive power. With one swing, it can topple a metal transmission tower. Once this Pokémon goes on a rampage, there is no stopping it.","Types":["Poison","Ground"],"Resistant":["Electric","Fighting","Poison","Bug","Rock","Fairy"],"Weaknesses":["Water","Ice","Ground","Psychic"],"Fast Attack(s)":[{"Name":"Fury Cutter","Type":"Bug","Damage":3},{"Name":"Poison Jab","Type":"Poison","Damage":12}],"Special Attack(s)":[{"Name":"Earthquake","Type":"Ground","Damage":100},{"Name":"Megahorn","Type":"Bug","Damage":80},{"Name":"Sludge Wave","Type":"Poison","Damage":70}],"Weight":{"Minimum":"54.25kg","Maximum":"69.75kg"},"Height":{"Minimum":"1.22m","Maximum":"1.57m"},"Buddy Distance":"3km (Big)","Base Stamina":"162 stamina points.","Base Attack":"204 attack points.","Base Defense":"157 defense points.","Base Flee Rate":"5% chance to flee.","Previous evolution(s)":[{"Number":32,"Name":"Nidoran"},{"Number":33,"Name":"Nidorino"}],"MaxCP":2291,"MaxHP":2475},{"Number":"035","Name":"Clefairy","Generation":"Generation I","About":"On every night of a full moon, groups of this Pokémon come out to play. When dawn arrives, the tired Clefairy return to their quiet mountain retreats and go to sleep nestled up against each other.","Types":["Fairy"],"Resistant":["Fighting","Bug","Dragon","Dark"],"Weaknesses":["Poison","Steel"],"Fast Attack(s)":[{"Name":"Pound","Type":"Normal","Damage":7},{"Name":"Zen Headbutt","Type":"Psychic","Damage":12}],"Special Attack(s)":[{"Name":"Body Slam","Type":"Normal","Damage":40},{"Name":"Disarming Voice","Type":"Fairy","Damage":25},{"Name":"Moonblast","Type":"Fairy","Damage":85}],"Weight":{"Minimum":"6.56kg","Maximum":"8.44kg"},"Height":{"Minimum":"0.53m","Maximum":"0.68m"},"Buddy Distance":"1km (Medium)","Base Stamina":"140 stamina points.","Base Attack":"107 attack points.","Base Defense":"116 defense points.","Base Flee Rate":"10% chance to flee.","Previous evolution(s)":[{"Number":173,"Name":"Cleffa"}],"Next Evolution Requirements":{"Amount":50,"Name":"Clefairy candies"},"Next evolution(s)":[{"Number":36,"Name":"Clefable"}],"MaxCP":1074,"MaxHP":1200},{"Number":"036","Name":"Clefable","Generation":"Generation I","About":"Clefable moves by skipping lightly as if it were flying using its wings. Its bouncy step even lets it walk on water. It is known to take strolls on lakes on quiet, moonlit nights.","Types":["Fairy"],"Resistant":["Fighting","Bug","Dragon","Dark"],"Weaknesses":["Poison","Steel"],"Fast Attack(s)":[{"Name":"Pound","Type":"Normal","Damage":7},{"Name":"Zen Headbutt","Type":"Psychic","Damage":12}],"Special Attack(s)":[{"Name":"Dazzling Gleam","Type":"Fairy","Damage":55},{"Name":"Moonblast","Type":"Fairy","Damage":85},{"Name":"Psychic","Type":"Psychic","Damage":55}],"Weight":{"Minimum":"35kg","Maximum":"45kg"},"Height":{"Minimum":"1.14m","Maximum":"1.46m"},"Buddy Distance":"1km (Big)","Base Stamina":"190 stamina points.","Base Attack":"178 attack points.","Base Defense":"171 defense points.","Base Flee Rate":"6% chance to flee.","Previous evolution(s)":[{"Number":173,"Name":"Cleffa"},{"Number":35,"Name":"Clefairy"}],"MaxCP":2217,"MaxHP":2397},{"Number":"037","Name":"Vulpix","Generation":"Generation I","About":"At the time of its birth, Vulpix has one white tail. The tail separates into six if this Pokémon receives plenty of love from its trainer. The six tails become magnificently curled.","Types":["Fire"],"Resistant":["Fire","Grass","Ice","Bug","Steel","Fairy"],"Weaknesses":["Water","Ground","Rock"],"Fast Attack(s)":[{"Name":"Ember","Type":"Fire","Damage":10},{"Name":"Quick Attack","Type":"Normal","Damage":10}],"Special Attack(s)":[{"Name":"Body Slam","Type":"Normal","Damage":40},{"Name":"Flame Charge","Type":"Fire","Damage":25},{"Name":"Flamethrower","Type":"Fire","Damage":55}],"Weight":{"Minimum":"8.66kg","Maximum":"11.14kg"},"Height":{"Minimum":"0.53m","Maximum":"0.68m"},"Buddy Distance":"3km (Medium)","Base Stamina":"76 stamina points.","Base Attack":"96 attack points.","Base Defense":"122 defense points.","Base Flee Rate":"10% chance to flee.","Next Evolution Requirements":{"Amount":50,"Name":"Vulpi"},"Next evolution(s)":[{"Number":38,"Name":"Ninetales"}],"MaxCP":725,"MaxHP":831},{"Number":"038","Name":"Ninetales","Generation":"Generation I","About":"Ninetales casts a sinister light from its bright red eyes to gain total control over its foe's mind. This Pokémon is said to live for one thousand years.","Types":["Fire"],"Resistant":["Fire","Grass","Ice","Bug","Steel","Fairy"],"Weaknesses":["Water","Ground","Rock"],"Fast Attack(s)":[{"Name":"Ember","Type":"Fire","Damage":10},{"Name":"Feint Attack","Type":"Dark","Damage":12}],"Special Attack(s)":[{"Name":"Fire Blast","Type":"Fire","Damage":100},{"Name":"Flamethrower","Type":"Fire","Damage":55},{"Name":"Heat Wave","Type":"Fire","Damage":80}],"Weight":{"Minimum":"17.41kg","Maximum":"22.39kg"},"Height":{"Minimum":"0.96m","Maximum":"1.24m"},"Buddy Distance":"3km (Big)","Base Stamina":"146 stamina points.","Base Attack":"169 attack points.","Base Defense":"204 defense points.","Base Flee Rate":"6% chance to flee.","Previous evolution(s)":[{"Number":37,"Name":"Vulpix"}],"MaxCP":2015,"MaxHP":2188},{"Number":"039","Name":"Jigglypuff","Generation":"Generation I","About":"Jigglypuff's vocal cords can freely adjust the wavelength of its voice. This Pokémon uses this ability to sing at precisely the right wavelength to make its foes most drowsy.","Types":["Normal","Fairy"],"Resistant":["Bug","Ghost","Dragon","Dark"],"Weaknesses":["Poison","Steel"],"Fast Attack(s)":[{"Name":"Feint Attack","Type":"Dark","Damage":12},{"Name":"Pound","Type":"Normal","Damage":7}],"Special Attack(s)":[{"Name":"Body Slam","Type":"Normal","Damage":40},{"Name":"Dazzling Gleam","Type":"Fairy","Damage":55},{"Name":"Disarming Voice","Type":"Fairy","Damage":25}],"Weight":{"Minimum":"4.81kg","Maximum":"6.19kg"},"Height":{"Minimum":"0.44m","Maximum":"0.56m"},"Buddy Distance":"1km (Medium)","Base Stamina":"230 stamina points.","Base Attack":"80 attack points.","Base Defense":"44 defense points.","Base Flee Rate":"10% chance to flee.","Previous evolution(s)":[{"Number":174,"Name":"Igglybuff"}],"Next Evolution Requirements":{"Amount":50,"Name":"Jigglypuff candies"},"Next evolution(s)":[{"Number":40,"Name":"Wigglytuff"}],"MaxCP":796,"MaxHP":917},{"Number":"040","Name":"Wigglytuff","Generation":"Generation I","About":"Wigglytuff has large, saucerlike eyes. The surfaces of its eyes are always covered with a thin layer of tears. If any dust gets in this Pokémon's eyes, it is quickly washed away.","Types":["Normal","Fairy"],"Resistant":["Bug","Ghost","Dragon","Dark"],"Weaknesses":["Poison","Steel"],"Fast Attack(s)":[{"Name":"Feint Attack","Type":"Dark","Damage":12},{"Name":"Pound","Type":"Normal","Damage":7}],"Special Attack(s)":[{"Name":"Dazzling Gleam","Type":"Fairy","Damage":55},{"Name":"Hyper Beam","Type":"Normal","Damage":120},{"Name":"Play Rough","Type":"Fairy","Damage":55}],"Weight":{"Minimum":"10.5kg","Maximum":"13.5kg"},"Height":{"Minimum":"0.88m","Maximum":"1.13m"},"Buddy Distance":"1km (Big)","Base Stamina":"280 stamina points.","Base Attack":"156 attack points.","Base Defense":"93 defense points.","Base Flee Rate":"6% chance to flee.","Previous evolution(s)":[{"Number":174,"Name":"Igglybuff"},{"Number":39,"Name":"Jigglypuff"}],"MaxCP":1997,"MaxHP":2177},{"Number":"041","Name":"Zubat","Generation":"Generation I","About":"Zubat remains quietly unmoving in a dark spot during the bright daylight hours. It does so because prolonged exposure to the sun causes its body to become slightly burned.","Types":["Poison","Flying"],"Resistant":["Grass","Fighting","Poison","Bug","Fairy"],"Weaknesses":["Electric","Ice","Psychic","Rock"],"Fast Attack(s)":[{"Name":"Bite","Type":"Dark","Damage":6},{"Name":"Quick Attack","Type":"Normal","Damage":10}],"Special Attack(s)":[{"Name":"Air Cutter","Type":"Flying","Damage":30},{"Name":"Poison Fang","Type":"Poison","Damage":25},{"Name":"Sludge Bomb","Type":"Poison","Damage":55}],"Weight":{"Minimum":"6.56kg","Maximum":"8.44kg"},"Height":{"Minimum":"0.7m","Maximum":"0.9m"},"Buddy Distance":"1km (Flying)","Base Stamina":"80 stamina points.","Base Attack":"83 attack points.","Base Defense":"76 defense points.","Base Flee Rate":"20% chance to flee.","Next Evolution Requirements":{"Amount":50,"Name":"Zubat candies"},"Next evolution(s)":[{"Number":42,"Name":"Golbat"},{"Number":169,"Name":"Crobat"}],"MaxCP":550,"MaxHP":642},{"Number":"042","Name":"Golbat","Generation":"Generation I","About":"Golbat loves to drink the blood of living things. It is particularly active in the pitch black of night. This Pokémon flits around in the night skies, seeking fresh blood.","Types":["Poison","Flying"],"Resistant":["Grass","Fighting","Poison","Bug","Fairy"],"Weaknesses":["Electric","Ice","Psychic","Rock"],"Fast Attack(s)":[{"Name":"Bite","Type":"Dark","Damage":6},{"Name":"Wing Attack","Type":"Flying","Damage":9}],"Special Attack(s)":[{"Name":"Air Cutter","Type":"Flying","Damage":30},{"Name":"Ominous Wind","Type":"Ghost","Damage":30},{"Name":"Poison Fang","Type":"Poison","Damage":25}],"Weight":{"Minimum":"48.13kg","Maximum":"61.88kg"},"Height":{"Minimum":"1.4m","Maximum":"1.8m"},"Buddy Distance":"1km (Flying)","Base Stamina":"150 stamina points.","Base Attack":"161 attack points.","Base Defense":"153 defense points.","Base Flee Rate":"7% chance to flee.","Previous evolution(s)":[{"Number":41,"Name":"Zubat"}],"Next evolution(s)":[{"Number":169,"Name":"Crobat"}],"MaxCP":1760,"MaxHP":1921},{"Number":"043","Name":"Oddish","Generation":"Generation I","About":"During the daytime, Oddish buries itself in soil to absorb nutrients from the ground using its entire body. The more fertile the soil, the glossier its leaves become.","Types":["Grass","Poison"],"Resistant":["Water","Electric","Grass","Fighting","Fairy"],"Weaknesses":["Fire","Ice","Flying","Psychic"],"Fast Attack(s)":[{"Name":"Acid","Type":"Poison","Damage":10},{"Name":"Razor Leaf","Type":"Grass","Damage":15}],"Special Attack(s)":[{"Name":"Moonblast","Type":"Fairy","Damage":85},{"Name":"Seed Bomb","Type":"Grass","Damage":40},{"Name":"Sludge Bomb","Type":"Poison","Damage":55}],"Weight":{"Minimum":"4.73kg","Maximum":"6.08kg"},"Height":{"Minimum":"0.44m","Maximum":"0.56m"},"Buddy Distance":"3km (Medium)","Base Stamina":"90 stamina points.","Base Attack":"131 attack points.","Base Defense":"116 defense points.","Base Flee Rate":"15% chance to flee.","Next Evolution Requirements":{"Amount":25,"Name":"Oddish candies"},"Next evolution(s)":[{"Number":44,"Name":"Gloom"},{"Number":45,"Name":"Vileplume"},{"Number":182,"Name":"Bellossom"}],"MaxCP":1023,"MaxHP":1148},{"Number":"044","Name":"Gloom","Generation":"Generation I","About":"Gloom releases a foul fragrance from the pistil of its flower. When faced with danger, the stench worsens. If this Pokémon is feeling calm and secure, it does not release its usual stinky aroma.","Types":["Grass","Poison"],"Resistant":["Water","Electric","Grass","Fighting","Fairy"],"Weaknesses":["Fire","Ice","Flying","Psychic"],"Fast Attack(s)":[{"Name":"Acid","Type":"Poison","Damage":10},{"Name":"Razor Leaf","Type":"Grass","Damage":15}],"Special Attack(s)":[{"Name":"Moonblast","Type":"Fairy","Damage":85},{"Name":"Petal Blizzard","Type":"Grass","Damage":65},{"Name":"Sludge Bomb","Type":"Poison","Damage":55}],"Weight":{"Minimum":"7.53kg","Maximum":"9.68kg"},"Height":{"Minimum":"0.7m","Maximum":"0.9m"},"Buddy Distance":"3km (Medium)","Base Stamina":"120 stamina points.","Base Attack":"153 attack points.","Base Defense":"139 defense points.","Base Flee Rate":"7% chance to flee.","Previous evolution(s)":[{"Number":43,"Name":"Oddish"}],"Next Evolution Requirements":{"Amount":100,"Name":"Oddish candies"},"Next evolution(s)":[{"Number":45,"Name":"Vileplume"},{"Number":182,"Name":"Bellossom"}],"MaxCP":1537,"MaxHP":1689},{"Number":"045","Name":"Vileplume","Generation":"Generation I","About":"Vileplume's toxic pollen triggers atrocious allergy attacks. That's why it is advisable never to approach any attractive flowers in a jungle, however pretty they may be.","Types":["Grass","Poison"],"Resistant":["Water","Electric","Grass","Fighting","Fairy"],"Weaknesses":["Fire","Ice","Flying","Psychic"],"Fast Attack(s)":[{"Name":"Acid","Type":"Poison","Damage":10},{"Name":"Razor Leaf","Type":"Grass","Damage":15}],"Special Attack(s)":[{"Name":"Moonblast","Type":"Fairy","Damage":85},{"Name":"Petal Blizzard","Type":"Grass","Damage":65},{"Name":"Solar Beam","Type":"Grass","Damage":120}],"Weight":{"Minimum":"16.28kg","Maximum":"20.93kg"},"Height":{"Minimum":"1.05m","Maximum":"1.35m"},"Buddy Distance":"3km (Big)","Base Stamina":"150 stamina points.","Base Attack":"202 attack points.","Base Defense":"170 defense points.","Base Flee Rate":"5% chance to flee.","Previous evolution(s)":[{"Number":43,"Name":"Oddish"},{"Number":44,"Name":"Gloom"}],"MaxCP":2307,"MaxHP":2492},{"Number":"046","Name":"Paras","Generation":"Generation I","About":"Paras has parasitic mushrooms growing on its back called tochukaso. They grow large by drawing nutrients from this Bug Pokémon host. They are highly valued as a medicine for extending life.","Types":["Bug","Grass"],"Resistant":["Water","Electric","Grass","Fighting","Ground"],"Weaknesses":["Fire","Ice","Poison","Flying","Bug","Rock"],"Fast Attack(s)":[{"Name":"Bug Bite","Type":"Bug","Damage":5},{"Name":"Scratch","Type":"Normal","Damage":6}],"Special Attack(s)":[{"Name":"Cross Poison","Type":"Poison","Damage":25},{"Name":"Seed Bomb","Type":"Grass","Damage":40},{"Name":"X Scissor","Type":"Bug","Damage":35}],"Weight":{"Minimum":"4.73kg","Maximum":"6.08kg"},"Height":{"Minimum":"0.26m","Maximum":"0.34m"},"Buddy Distance":"3km (Medium)","Base Stamina":"70 stamina points.","Base Attack":"121 attack points.","Base Defense":"99 defense points.","Base Flee Rate":"15% chance to flee.","Next Evolution Requirements":{"Amount":50,"Name":"Paras candies"},"Next evolution(s)":[{"Number":47,"Name":"Parasect"}],"MaxCP":804,"MaxHP":916},{"Number":"047","Name":"Parasect","Generation":"Generation I","About":"Parasect is known to infest large trees en masse and drain nutrients from the lower trunk and roots. When an infested tree dies, they move onto another tree all at once.","Types":["Bug","Grass"],"Resistant":["Water","Electric","Grass","Fighting","Ground"],"Weaknesses":["Fire","Ice","Poison","Flying","Bug","Rock"],"Fast Attack(s)":[{"Name":"Bug Bite","Type":"Bug","Damage":5},{"Name":"Fury Cutter","Type":"Bug","Damage":3}],"Special Attack(s)":[{"Name":"Cross Poison","Type":"Poison","Damage":25},{"Name":"Solar Beam","Type":"Grass","Damage":120},{"Name":"X Scissor","Type":"Bug","Damage":35}],"Weight":{"Minimum":"25.81kg","Maximum":"33.19kg"},"Height":{"Minimum":"0.88m","Maximum":"1.13m"},"Buddy Distance":"3km (Medium)","Base Stamina":"120 stamina points.","Base Attack":"165 attack points.","Base Defense":"146 defense points.","Base Flee Rate":"7% chance to flee.","Previous evolution(s)":[{"Number":46,"Name":"Paras"}],"MaxCP":1592,"MaxHP":1747},{"Number":"048","Name":"Venonat","Generation":"Generation I","About":"Venonat is said to have evolved with a coat of thin, stiff hair that covers its entire body for protection. It possesses large eyes that never fail to spot even miniscule prey.","Types":["Bug","Poison"],"Resistant":["Grass","Fighting","Poison","Bug","Fairy"],"Weaknesses":["Fire","Flying","Psychic","Rock"],"Fast Attack(s)":[{"Name":"Bug Bite","Type":"Bug","Damage":5},{"Name":"Confusion","Type":"Psychic","Damage":15}],"Special Attack(s)":[{"Name":"Poison Fang","Type":"Poison","Damage":25},{"Name":"Psybeam","Type":"Psychic","Damage":40},{"Name":"Signal Beam","Type":"Bug","Damage":45}],"Weight":{"Minimum":"26.25kg","Maximum":"33.75kg"},"Height":{"Minimum":"0.88m","Maximum":"1.13m"},"Buddy Distance":"3km (Medium)","Base Stamina":"120 stamina points.","Base Attack":"100 attack points.","Base Defense":"102 defense points.","Base Flee Rate":"15% chance to flee.","Next Evolution Requirements":{"Amount":50,"Name":"Venonat candies"},"Next evolution(s)":[{"Number":49,"Name":"Venomoth"}],"MaxCP":912,"MaxHP":1029},{"Number":"049","Name":"Venomoth","Generation":"Generation I","About":"Venomoth is nocturnal—it is a Pokémon that only becomes active at night. Its favorite prey are small insects that gather around streetlights, attracted by the light in the darkness.","Types":["Bug","Poison"],"Resistant":["Grass","Fighting","Poison","Bug","Fairy"],"Weaknesses":["Fire","Flying","Psychic","Rock"],"Fast Attack(s)":[{"Name":"Bug Bite","Type":"Bug","Damage":5},{"Name":"Confusion","Type":"Psychic","Damage":15}],"Special Attack(s)":[{"Name":"Bug Buzz","Type":"Bug","Damage":75},{"Name":"Poison Fang","Type":"Poison","Damage":25},{"Name":"Psychic","Type":"Psychic","Damage":55}],"Weight":{"Minimum":"10.94kg","Maximum":"14.06kg"},"Height":{"Minimum":"1.31m","Maximum":"1.69m"},"Buddy Distance":"3km (Flying)","Base Stamina":"140 stamina points.","Base Attack":"179 attack points.","Base Defense":"150 defense points.","Base Flee Rate":"7% chance to flee.","Previous evolution(s)":[{"Number":48,"Name":"Venonat"}],"MaxCP":1730,"MaxHP":1890},{"Number":"050","Name":"Diglett","Generation":"Generation I","About":"Diglett are raised in most farms. The reason is simple—wherever this Pokémon burrows, the soil is left perfectly tilled for planting crops. This soil is made ideal for growing delicious vegetables.","Types":["Ground"],"Resistant":["Electric","Poison","Rock"],"Weaknesses":["Water","Grass","Ice"],"Fast Attack(s)":[{"Name":"Mud Slap","Type":"Ground","Damage":15},{"Name":"Scratch","Type":"Normal","Damage":6}],"Special Attack(s)":[{"Name":"Dig","Type":"Ground","Damage":70},{"Name":"Mud Bomb","Type":"Ground","Damage":30},{"Name":"Rock Tomb","Type":"Rock","Damage":30}],"Weight":{"Minimum":"0.7kg","Maximum":"0.9kg"},"Height":{"Minimum":"0.18m","Maximum":"0.23m"},"Buddy Distance":"3km (Medium)","Base Stamina":"20 stamina points.","Base Attack":"109 attack points.","Base Defense":"88 defense points.","Base Flee Rate":"10% chance to flee.","Next Evolution Requirements":{"Amount":50,"Name":"Diglett candies"},"Next evolution(s)":[{"Number":51,"Name":"Dugtrio"}],"MaxCP":365,"MaxHP":456},{"Number":"051","Name":"Dugtrio","Generation":"Generation I","About":"Dugtrio are actually triplets that emerged from one body. As a result, each triplet thinks exactly like the other two triplets. They work cooperatively to burrow endlessly.","Types":["Ground"],"Resistant":["Electric","Poison","Rock"],"Weaknesses":["Water","Grass","Ice"],"Fast Attack(s)":[{"Name":"Mud Slap","Type":"Ground","Damage":15},{"Name":"Sucker Punch","Type":"Dark","Damage":7}],"Special Attack(s)":[{"Name":"Earthquake","Type":"Ground","Damage":100},{"Name":"Mud Bomb","Type":"Ground","Damage":30},{"Name":"Stone Edge","Type":"Rock","Damage":80}],"Weight":{"Minimum":"29.14kg","Maximum":"37.46kg"},"Height":{"Minimum":"0.61m","Maximum":"0.79m"},"Buddy Distance":"3km (Big)","Base Stamina":"70 stamina points.","Base Attack":"167 attack points.","Base Defense":"147 defense points.","Base Flee Rate":"6% chance to flee.","Previous evolution(s)":[{"Number":50,"Name":"Diglett"}],"MaxCP":1038,"MaxHP":1168},{"Number":"052","Name":"Meowth","Generation":"Generation I","About":"Meowth withdraws its sharp claws into its paws to slinkily sneak about without making any incriminating footsteps. For some reason, this Pokémon loves shiny coins that glitter with light.","Types":["Normal"],"Resistant":["Ghost"],"Weaknesses":["Fighting"],"Fast Attack(s)":[{"Name":"Bite","Type":"Dark","Damage":6},{"Name":"Scratch","Type":"Normal","Damage":6}],"Special Attack(s)":[{"Name":"Body Slam","Type":"Normal","Damage":40},{"Name":"Dark Pulse","Type":"Dark","Damage":45},{"Name":"Night Slash","Type":"Dark","Damage":30}],"Weight":{"Minimum":"3.67kg","Maximum":"4.72kg"},"Height":{"Minimum":"0.35m","Maximum":"0.45m"},"Buddy Distance":"3km (Medium)","Base Stamina":"80 stamina points.","Base Attack":"92 attack points.","Base Defense":"81 defense points.","Base Flee Rate":"15% chance to flee.","Next Evolution Requirements":{"Amount":50,"Name":"Meowth candies"},"Next evolution(s)":[{"Number":53,"Name":"Persian"}],"MaxCP":656,"MaxHP":756},{"Number":"053","Name":"Persian","Generation":"Generation I","About":"Persian has six bold whiskers that give it a look of toughness. The whiskers sense air movements to determine what is in the Pokémon's surrounding vicinity. It becomes docile if grabbed by the whiskers.","Types":["Normal"],"Resistant":["Ghost"],"Weaknesses":["Fighting"],"Fast Attack(s)":[{"Name":"Feint Attack","Type":"Dark","Damage":12},{"Name":"Scratch","Type":"Normal","Damage":6}],"Special Attack(s)":[{"Name":"Night Slash","Type":"Dark","Damage":30},{"Name":"Play Rough","Type":"Fairy","Damage":55},{"Name":"Power Gem","Type":"Rock","Damage":40}],"Weight":{"Minimum":"28kg","Maximum":"36kg"},"Height":{"Minimum":"0.88m","Maximum":"1.13m"},"Buddy Distance":"3km (Medium)","Base Stamina":"130 stamina points.","Base Attack":"150 attack points.","Base Defense":"139 defense points.","Base Flee Rate":"7% chance to flee.","Previous evolution(s)":[{"Number":52,"Name":"Meowth"}],"MaxCP":1483,"MaxHP":1631},{"Number":"054","Name":"Psyduck","Generation":"Generation I","About":"Psyduck uses a mysterious power. When it does so, this Pokémon generates brain waves that are supposedly only seen in sleepers. This discovery spurred controversy among scholars.","Types":["Water"],"Resistant":["Fire","Water","Ice","Steel"],"Weaknesses":["Electric","Grass"],"Fast Attack(s)":[{"Name":"Water Gun","Type":"Water","Damage":6},{"Name":"Zen Headbutt","Type":"Psychic","Damage":12}],"Special Attack(s)":[{"Name":"Aqua Tail","Type":"Water","Damage":45},{"Name":"Cross Chop","Type":"Fighting","Damage":60},{"Name":"Psybeam","Type":"Psychic","Damage":40}],"Weight":{"Minimum":"17.15kg","Maximum":"22.05kg"},"Height":{"Minimum":"0.7m","Maximum":"0.9m"},"Buddy Distance":"3km (Medium)","Base Stamina":"100 stamina points.","Base Attack":"122 attack points.","Base Defense":"96 defense points.","Base Flee Rate":"10% chance to flee.","Next Evolution Requirements":{"Amount":50,"Name":"Psyduck candies"},"Next evolution(s)":[{"Number":55,"Name":"Golduck"}],"MaxCP":987,"MaxHP":1109},{"Number":"055","Name":"Golduck","Generation":"Generation I","About":"The webbed flippers on its forelegs and hind legs and the streamlined body of Golduck give it frightening speed. The Pokémon is definitely much faster than even the most athletic swimmer.","Types":["Water"],"Resistant":["Fire","Water","Ice","Steel"],"Weaknesses":["Electric","Grass"],"Fast Attack(s)":[{"Name":"Confusion","Type":"Psychic","Damage":15},{"Name":"Water Gun","Type":"Water","Damage":6}],"Special Attack(s)":[{"Name":"Hydro Pump","Type":"Water","Damage":90},{"Name":"Ice Beam","Type":"Ice","Damage":65},{"Name":"Psychic","Type":"Psychic","Damage":55}],"Weight":{"Minimum":"67.02kg","Maximum":"86.17kg"},"Height":{"Minimum":"1.49m","Maximum":"1.91m"},"Buddy Distance":"3km (Big)","Base Stamina":"160 stamina points.","Base Attack":"191 attack points.","Base Defense":"163 defense points.","Base Flee Rate":"6% chance to flee.","Previous evolution(s)":[{"Number":54,"Name":"Psyduck"}],"MaxCP":2206,"MaxHP":2386},{"Number":"056","Name":"Mankey","Generation":"Generation I","About":"When Mankey starts shaking and its nasal breathing turns rough, it's a sure sign that it is becoming angry. However, because it goes into a towering rage almost instantly, it is impossible for anyone to flee its wrath.","Types":["Fighting"],"Resistant":["Bug","Rock","Dark"],"Weaknesses":["Flying","Psychic","Fairy"],"Fast Attack(s)":[{"Name":"Karate Chop","Type":"Fighting","Damage":6},{"Name":"Scratch","Type":"Normal","Damage":6}],"Special Attack(s)":[{"Name":"Brick Break","Type":"Fighting","Damage":30},{"Name":"Cross Chop","Type":"Fighting","Damage":60},{"Name":"Low Sweep","Type":"Fighting","Damage":30}],"Weight":{"Minimum":"24.5kg","Maximum":"31.5kg"},"Height":{"Minimum":"0.44m","Maximum":"0.56m"},"Buddy Distance":"3km (Medium)","Base Stamina":"80 stamina points.","Base Attack":"148 attack points.","Base Defense":"87 defense points.","Base Flee Rate":"10% chance to flee.","Next Evolution Requirements":{"Amount":50,"Name":"Mankey candies"},"Next evolution(s)":[{"Number":57,"Name":"Primeape"}],"MaxCP":769,"MaxHP":878},{"Number":"057","Name":"Primeape","Generation":"Generation I","About":"When Primeape becomes furious, its blood circulation is boosted. In turn, its muscles are made even stronger. However, it also becomes much less intelligent at the same time.","Types":["Fighting"],"Resistant":["Bug","Rock","Dark"],"Weaknesses":["Flying","Psychic","Fairy"],"Fast Attack(s)":[{"Name":"Karate Chop","Type":"Fighting","Damage":6},{"Name":"Low Kick","Type":"Fighting","Damage":5}],"Special Attack(s)":[{"Name":"Cross Chop","Type":"Fighting","Damage":60},{"Name":"Low Sweep","Type":"Fighting","Damage":30},{"Name":"Night Slash","Type":"Dark","Damage":30}],"Weight":{"Minimum":"28kg","Maximum":"36kg"},"Height":{"Minimum":"0.88m","Maximum":"1.13m"},"Buddy Distance":"3km (Big)","Base Stamina":"130 stamina points.","Base Attack":"207 attack points.","Base Defense":"144 defense points.","Base Flee Rate":"6% chance to flee.","Previous evolution(s)":[{"Number":56,"Name":"Mankey"}],"MaxCP":1704,"MaxHP":1864},{"Number":"058","Name":"Growlithe","Generation":"Generation I","About":"Growlithe has a superb sense of smell. Once it smells anything, this Pokémon won't forget the scent, no matter what. It uses its advanced olfactory sense to determine the emotions of other living things.","Types":["Fire"],"Resistant":["Fire","Grass","Ice","Bug","Steel","Fairy"],"Weaknesses":["Water","Ground","Rock"],"Fast Attack(s)":[{"Name":"Bite","Type":"Dark","Damage":6},{"Name":"Ember","Type":"Fire","Damage":10}],"Special Attack(s)":[{"Name":"Body Slam","Type":"Normal","Damage":40},{"Name":"Flame Wheel","Type":"Fire","Damage":40},{"Name":"Flamethrower","Type":"Fire","Damage":55}],"Weight":{"Minimum":"16.63kg","Maximum":"21.38kg"},"Height":{"Minimum":"0.61m","Maximum":"0.79m"},"Buddy Distance":"3km (Medium)","Base Stamina":"110 stamina points.","Base Attack":"136 attack points.","Base Defense":"96 defense points.","Base Flee Rate":"10% chance to flee.","Next Evolution Requirements":{"Amount":50,"Name":"Growlithe candies"},"Next evolution(s)":[{"Number":59,"Name":"Arcanine"}],"MaxCP":1199,"MaxHP":1335},{"Number":"059","Name":"Arcanine","Generation":"Generation I","About":"Arcanine is known for its high speed. It is said to be capable of running over 6,200 miles in a single day and night. The fire that blazes wildly within this Pokémon's body is its source of power.","Types":["Fire"],"Resistant":["Fire","Grass","Ice","Bug","Steel","Fairy"],"Weaknesses":["Water","Ground","Rock"],"Fast Attack(s)":[{"Name":"Bite","Type":"Dark","Damage":6},{"Name":"Fire Fang","Type":"Fire","Damage":10}],"Special Attack(s)":[{"Name":"Bulldoze","Type":"Ground","Damage":35},{"Name":"Fire Blast","Type":"Fire","Damage":100},{"Name":"Flamethrower","Type":"Fire","Damage":55}],"Weight":{"Minimum":"135.63kg","Maximum":"174.38kg"},"Height":{"Minimum":"1.66m","Maximum":"2.14m"},"Buddy Distance":"3km (Big)","Base Stamina":"180 stamina points.","Base Attack":"227 attack points.","Base Defense":"166 defense points.","Base Flee Rate":"6% chance to flee.","Previous evolution(s)":[{"Number":58,"Name":"Growlithe"}],"MaxCP":2781,"MaxHP":2983},{"Number":"060","Name":"Poliwag","Generation":"Generation I","About":"Poliwag has a very thin skin. It is possible to see the Pokémon's spiral innards right through the skin. Despite its thinness, however, the skin is also very flexible. Even sharp fangs bounce right off it.","Types":["Water"],"Resistant":["Fire","Water","Ice","Steel"],"Weaknesses":["Electric","Grass"],"Fast Attack(s)":[{"Name":"Bubble","Type":"Water","Damage":25},{"Name":"Mud Shot","Type":"Ground","Damage":6}],"Special Attack(s)":[{"Name":"Body Slam","Type":"Normal","Damage":40},{"Name":"Bubble Beam","Type":"Water","Damage":30},{"Name":"Mud Bomb","Type":"Ground","Damage":30}],"Weight":{"Minimum":"10.85kg","Maximum":"13.95kg"},"Height":{"Minimum":"0.53m","Maximum":"0.68m"},"Buddy Distance":"3km (Medium)","Base Stamina":"80 stamina points.","Base Attack":"101 attack points.","Base Defense":"82 defense points.","Base Flee Rate":"15% chance to flee.","Next Evolution Requirements":{"Amount":25,"Name":"Poliwag candies"},"Next evolution(s)":[{"Number":61,"Name":"Poliwhirl"},{"Number":62,"Name":"Poliwrath"},{"Number":186,"Name":"Politoed"}],"MaxCP":693,"MaxHP":795},{"Number":"061","Name":"Poliwhirl","Generation":"Generation I","About":"The surface of Poliwhirl's body is always wet and slick with an oily fluid. Because of this greasy covering, it can easily slip and slide out of the clutches of any enemy in battle.","Types":["Water"],"Resistant":["Fire","Water","Ice","Steel"],"Weaknesses":["Electric","Grass"],"Fast Attack(s)":[{"Name":"Bubble","Type":"Water","Damage":25},{"Name":"Mud Shot","Type":"Ground","Damage":6}],"Special Attack(s)":[{"Name":"Bubble Beam","Type":"Water","Damage":30},{"Name":"Mud Bomb","Type":"Ground","Damage":30},{"Name":"Scald","Type":"Water","Damage":55}],"Weight":{"Minimum":"17.5kg","Maximum":"22.5kg"},"Height":{"Minimum":"0.88m","Maximum":"1.13m"},"Buddy Distance":"3km (Big)","Base Stamina":"130 stamina points.","Base Attack":"130 attack points.","Base Defense":"130 defense points.","Base Flee Rate":"7% chance to flee.","Previous evolution(s)":[{"Number":60,"Name":"Poliwag"}],"Next Evolution Requirements":{"Amount":100,"Name":"Poliwag candies"},"Next evolution(s)":[{"Number":62,"Name":"Poliwrath"},{"Number":186,"Name":"Politoed"}],"MaxCP":1206,"MaxHP":1340},{"Number":"062","Name":"Poliwrath","Generation":"Generation I","About":"Poliwrath's highly developed, brawny muscles never grow fatigued, however much it exercises. It is so tirelessly strong, this Pokémon can swim back and forth across the ocean without effort.","Types":["Water","Fighting"],"Resistant":["Fire","Water","Ice","Bug","Rock","Dark","Steel"],"Weaknesses":["Electric","Grass","Flying","Psychic","Fairy"],"Fast Attack(s)":[{"Name":"Bubble","Type":"Water","Damage":25},{"Name":"Mud Shot","Type":"Ground","Damage":6}],"Special Attack(s)":[{"Name":"Hydro Pump","Type":"Water","Damage":90},{"Name":"Ice Punch","Type":"Ice","Damage":45},{"Name":"Submission","Type":"Fighting","Damage":30}],"Weight":{"Minimum":"47.25kg","Maximum":"60.75kg"},"Height":{"Minimum":"1.14m","Maximum":"1.46m"},"Buddy Distance":"3km (Big)","Base Stamina":"180 stamina points.","Base Attack":"182 attack points.","Base Defense":"187 defense points.","Base Flee Rate":"5% chance to flee.","Previous evolution(s)":[{"Number":60,"Name":"Poliwag"},{"Number":61,"Name":"Poliwhirl"}],"MaxCP":2321,"MaxHP":2505},{"Number":"063","Name":"Abra","Generation":"Generation I","About":"Abra sleeps for eighteen hours a day. However, it can sense the presence of foes even while it is sleeping. In such a situation, this Pokémon immediately teleports to safety.","Types":["Psychic"],"Resistant":["Fighting","Psychic"],"Weaknesses":["Bug","Ghost","Dark"],"Fast Attack(s)":[{"Name":"Zen Headbutt","Type":"Psychic","Damage":12}],"Special Attack(s)":[{"Name":"Psyshock","Type":"Psychic","Damage":40},{"Name":"Shadow Ball","Type":"Ghost","Damage":45},{"Name":"Signal Beam","Type":"Bug","Damage":45}],"Weight":{"Minimum":"17.06kg","Maximum":"21.94kg"},"Height":{"Minimum":"0.79m","Maximum":"1.01m"},"Buddy Distance":"3km (Medium)","Base Stamina":"50 stamina points.","Base Attack":"195 attack points.","Base Defense":"103 defense points.","Base Flee Rate":"99% chance to flee.","Next Evolution Requirements":{"Amount":25,"Name":"Abra candies"},"Next evolution(s)":[{"Number":64,"Name":"Kadabra"},{"Number":65,"Name":"Alakazam"}],"MaxCP":508,"MaxHP":600},{"Number":"064","Name":"Kadabra","Generation":"Generation I","About":"Kadabra emits a peculiar alpha wave if it develops a headache. Only those people with a particularly strong psyche can hope to become a trainer of this Pokémon.","Types":["Psychic"],"Resistant":["Fighting","Psychic"],"Weaknesses":["Bug","Ghost","Dark"],"Fast Attack(s)":[{"Name":"Confusion","Type":"Psychic","Damage":15},{"Name":"Psycho Cut","Type":"Psychic","Damage":7}],"Special Attack(s)":[{"Name":"Dazzling Gleam","Type":"Fairy","Damage":55},{"Name":"Psybeam","Type":"Psychic","Damage":40},{"Name":"Shadow Ball","Type":"Ghost","Damage":45}],"Weight":{"Minimum":"49.44kg","Maximum":"63.56kg"},"Height":{"Minimum":"1.14m","Maximum":"1.46m"},"Buddy Distance":"3km (Big)","Base Stamina":"80 stamina points.","Base Attack":"232 attack points.","Base Defense":"138 defense points.","Base Flee Rate":"7% chance to flee.","Previous evolution(s)":[{"Number":63,"Name":"Abra"}],"Next Evolution Requirements":{"Amount":100,"Name":"Abra candies"},"Next evolution(s)":[{"Number":65,"Name":"Alakazam"}],"MaxCP":1005,"MaxHP":1131},{"Number":"065","Name":"Alakazam","Generation":"Generation I","About":"Alakazam's brain continually grows, making its head far too heavy to support with its neck. This Pokémon holds its head up using its psychokinetic power instead.","Types":["Psychic"],"Resistant":["Fighting","Psychic"],"Weaknesses":["Bug","Ghost","Dark"],"Fast Attack(s)":[{"Name":"Confusion","Type":"Psychic","Damage":15},{"Name":"Psycho Cut","Type":"Psychic","Damage":7}],"Special Attack(s)":[{"Name":"Dazzling Gleam","Type":"Fairy","Damage":55},{"Name":"Psychic","Type":"Psychic","Damage":55},{"Name":"Shadow Ball","Type":"Ghost","Damage":45}],"Weight":{"Minimum":"42kg","Maximum":"54kg"},"Height":{"Minimum":"1.31m","Maximum":"1.69m"},"Buddy Distance":"3km (Big)","Base Stamina":"110 stamina points.","Base Attack":"271 attack points.","Base Defense":"194 defense points.","Base Flee Rate":"5% chance to flee.","Previous evolution(s)":[{"Number":63,"Name":"Abra"},{"Number":64,"Name":"Kadabra"}],"MaxCP":1654,"MaxHP":1813},{"Number":"066","Name":"Machop","Generation":"Generation I","About":"Machop's muscles are special—they never get sore no matter how much they are used in exercise. This Pokémon has sufficient power to hurl a hundred adult humans.","Types":["Fighting"],"Resistant":["Bug","Rock","Dark"],"Weaknesses":["Flying","Psychic","Fairy"],"Fast Attack(s)":[{"Name":"Karate Chop","Type":"Fighting","Damage":6},{"Name":"Low Kick","Type":"Fighting","Damage":5}],"Special Attack(s)":[{"Name":"Brick Break","Type":"Fighting","Damage":30},{"Name":"Cross Chop","Type":"Fighting","Damage":60},{"Name":"Low Sweep","Type":"Fighting","Damage":30}],"Weight":{"Minimum":"17.06kg","Maximum":"21.94kg"},"Height":{"Minimum":"0.7m","Maximum":"0.9m"},"Buddy Distance":"3km (Medium)","Base Stamina":"140 stamina points.","Base Attack":"137 attack points.","Base Defense":"88 defense points.","Base Flee Rate":"10% chance to flee.","Next Evolution Requirements":{"Amount":25,"Name":"Machop candies"},"Next evolution(s)":[{"Number":67,"Name":"Machoke"},{"Number":68,"Name":"Machamp"}],"MaxCP":968,"MaxHP":1089},{"Number":"067","Name":"Machoke","Generation":"Generation I","About":"Machoke's thoroughly toned muscles possess the hardness of steel. This Pokémon has so much strength, it can easily hold aloft a sumo wrestler on just one finger.","Types":["Fighting"],"Resistant":["Bug","Rock","Dark"],"Weaknesses":["Flying","Psychic","Fairy"],"Fast Attack(s)":[{"Name":"Karate Chop","Type":"Fighting","Damage":6},{"Name":"Low Kick","Type":"Fighting","Damage":5}],"Special Attack(s)":[{"Name":"Brick Break","Type":"Fighting","Damage":30},{"Name":"Cross Chop","Type":"Fighting","Damage":60},{"Name":"Submission","Type":"Fighting","Damage":30}],"Weight":{"Minimum":"61.69kg","Maximum":"79.31kg"},"Height":{"Minimum":"1.31m","Maximum":"1.69m"},"Buddy Distance":"3km (Big)","Base Stamina":"160 stamina points.","Base Attack":"177 attack points.","Base Defense":"130 defense points.","Base Flee Rate":"7% chance to flee.","Previous evolution(s)":[{"Number":66,"Name":"Machop"}],"Next Evolution Requirements":{"Amount":100,"Name":"Machop candies"},"Next evolution(s)":[{"Number":68,"Name":"Machamp"}],"MaxCP":1606,"MaxHP":1760},{"Number":"068","Name":"Machamp","Generation":"Generation I","About":"Machamp has the power to hurl anything aside. However, trying to do any work requiring care and dexterity causes its arms to get tangled. This Pokémon tends to leap into action before it thinks.","Types":["Fighting"],"Resistant":["Bug","Rock","Dark"],"Weaknesses":["Flying","Psychic","Fairy"],"Fast Attack(s)":[{"Name":"Bullet Punch","Type":"Steel","Damage":10},{"Name":"Karate Chop","Type":"Fighting","Damage":6}],"Special Attack(s)":[{"Name":"Cross Chop","Type":"Fighting","Damage":60},{"Name":"Stone Edge","Type":"Rock","Damage":80},{"Name":"Submission","Type":"Fighting","Damage":30}],"Weight":{"Minimum":"113.75kg","Maximum":"146.25kg"},"Height":{"Minimum":"1.4m","Maximum":"1.8m"},"Buddy Distance":"3km (Big)","Base Stamina":"180 stamina points.","Base Attack":"234 attack points.","Base Defense":"162 defense points.","Base Flee Rate":"5% chance to flee.","Previous evolution(s)":[{"Number":66,"Name":"Machop"},{"Number":67,"Name":"Machoke"}],"MaxCP":2406,"MaxHP":2594},{"Number":"069","Name":"Bellsprout","Generation":"Generation I","About":"Bellsprout's thin and flexible body lets it bend and sway to avoid any attack, however strong it may be. From its mouth, this Pokémon spits a corrosive fluid that melts even iron.","Types":["Grass","Poison"],"Resistant":["Water","Electric","Grass","Fighting","Fairy"],"Weaknesses":["Fire","Ice","Flying","Psychic"],"Fast Attack(s)":[{"Name":"Acid","Type":"Poison","Damage":10},{"Name":"Vine Whip","Type":"Grass","Damage":7}],"Special Attack(s)":[{"Name":"Power Whip","Type":"Grass","Damage":70},{"Name":"Sludge Bomb","Type":"Poison","Damage":55},{"Name":"Wrap","Type":"Normal","Damage":25}],"Weight":{"Minimum":"3.5kg","Maximum":"4.5kg"},"Height":{"Minimum":"0.61m","Maximum":"0.79m"},"Buddy Distance":"3km (Medium)","Base Stamina":"100 stamina points.","Base Attack":"139 attack points.","Base Defense":"64 defense points.","Base Flee Rate":"15% chance to flee.","Next Evolution Requirements":{"Amount":25,"Name":"Bellsprout candies"},"Next evolution(s)":[{"Number":70,"Name":"Weepinbell"},{"Number":71,"Name":"Victreebel"}],"MaxCP":990,"MaxHP":1117},{"Number":"070","Name":"Weepinbell","Generation":"Generation I","About":"Weepinbell has a large hook on its rear end. At night, the Pokémon hooks on to a tree branch and goes to sleep. If it moves around in its sleep, it may wake up to find itself on the ground.","Types":["Grass","Poison"],"Resistant":["Water","Electric","Grass","Fighting","Fairy"],"Weaknesses":["Fire","Ice","Flying","Psychic"],"Fast Attack(s)":[{"Name":"Acid","Type":"Poison","Damage":10},{"Name":"Razor Leaf","Type":"Grass","Damage":15}],"Special Attack(s)":[{"Name":"Power Whip","Type":"Grass","Damage":70},{"Name":"Seed Bomb","Type":"Grass","Damage":40},{"Name":"Sludge Bomb","Type":"Poison","Damage":55}],"Weight":{"Minimum":"5.6kg","Maximum":"7.2kg"},"Height":{"Minimum":"0.88m","Maximum":"1.13m"},"Buddy Distance":"3km (Big)","Base Stamina":"130 stamina points.","Base Attack":"172 attack points.","Base Defense":"95 defense points.","Base Flee Rate":"7% chance to flee.","Previous evolution(s)":[{"Number":69,"Name":"Bellsprout"}],"Next Evolution Requirements":{"Amount":100,"Name":"Bellsprout candies"},"Next evolution(s)":[{"Number":71,"Name":"Victreebel"}],"MaxCP":1567,"MaxHP":1723},{"Number":"071","Name":"Victreebel","Generation":"Generation I","About":"Victreebel has a long vine that extends from its head. This vine is waved and flicked about as if it were an animal to attract prey. When an unsuspecting prey draws near, this Pokémon swallows it whole.","Types":["Grass","Poison"],"Resistant":["Water","Electric","Grass","Fighting","Fairy"],"Weaknesses":["Fire","Ice","Flying","Psychic"],"Fast Attack(s)":[{"Name":"Acid","Type":"Poison","Damage":10},{"Name":"Razor Leaf","Type":"Grass","Damage":15}],"Special Attack(s)":[{"Name":"Leaf Blade","Type":"Grass","Damage":55},{"Name":"Sludge Bomb","Type":"Poison","Damage":55},{"Name":"Solar Beam","Type":"Grass","Damage":120}],"Weight":{"Minimum":"13.56kg","Maximum":"17.44kg"},"Height":{"Minimum":"1.49m","Maximum":"1.91m"},"Buddy Distance":"3km (Big)","Base Stamina":"160 stamina points.","Base Attack":"207 attack points.","Base Defense":"138 defense points.","Base Flee Rate":"5% chance to flee.","Previous evolution(s)":[{"Number":69,"Name":"Bellsprout"},{"Number":70,"Name":"Weepinbell"}],"MaxCP":2342,"MaxHP":2530},{"Number":"072","Name":"Tentacool","Generation":"Generation I","About":"Tentacool's body is largely composed of water. If it is removed from the sea, it dries up like parchment. If this Pokémon happens to become dehydrated, put it back into the sea.","Types":["Water","Poison"],"Resistant":["Fire","Water","Ice","Fighting","Poison","Bug","Steel","Fairy"],"Weaknesses":["Electric","Ground","Psychic"],"Fast Attack(s)":[{"Name":"Bubble","Type":"Water","Damage":25},{"Name":"Poison Sting","Type":"Poison","Damage":6}],"Special Attack(s)":[{"Name":"Bubble Beam","Type":"Water","Damage":30},{"Name":"Water Pulse","Type":"Water","Damage":35},{"Name":"Wrap","Type":"Normal","Damage":25}],"Weight":{"Minimum":"39.81kg","Maximum":"51.19kg"},"Height":{"Minimum":"0.79m","Maximum":"1.01m"},"Buddy Distance":"3km (Medium)","Base Stamina":"80 stamina points.","Base Attack":"97 attack points.","Base Defense":"182 defense points.","Base Flee Rate":"15% chance to flee.","Next Evolution Requirements":{"Amount":50,"Name":"Tentacool candies"},"Next evolution(s)":[{"Number":73,"Name":"Tentacruel"}],"MaxCP":794,"MaxHP":905},{"Number":"073","Name":"Tentacruel","Generation":"Generation I","About":"Tentacruel has large red orbs on its head. The orbs glow before lashing the vicinity with a harsh ultrasonic blast. This Pokémon's outburst creates rough waves around it.","Types":["Water","Poison"],"Resistant":["Fire","Water","Ice","Fighting","Poison","Bug","Steel","Fairy"],"Weaknesses":["Electric","Ground","Psychic"],"Fast Attack(s)":[{"Name":"Acid","Type":"Poison","Damage":10},{"Name":"Poison Jab","Type":"Poison","Damage":12}],"Special Attack(s)":[{"Name":"Blizzard","Type":"Ice","Damage":100},{"Name":"Hydro Pump","Type":"Water","Damage":90},{"Name":"Sludge Wave","Type":"Poison","Damage":70}],"Weight":{"Minimum":"48.13kg","Maximum":"61.88kg"},"Height":{"Minimum":"1.4m","Maximum":"1.8m"},"Buddy Distance":"3km (Big)","Base Stamina":"160 stamina points.","Base Attack":"166 attack points.","Base Defense":"237 defense points.","Base Flee Rate":"7% chance to flee.","Previous evolution(s)":[{"Number":72,"Name":"Tentacool"}],"MaxCP":2046,"MaxHP":2220},{"Number":"074","Name":"Geodude","Generation":"Generation I","About":"The longer a Geodude lives, the more its edges are chipped and worn away, making it more rounded in appearance. However, this Pokémon's heart will remain hard, craggy, and rough always.","Types":["Rock","Ground"],"Resistant":["Normal","Fire","Electric","Poison","Flying","Rock"],"Weaknesses":["Water","Grass","Ice","Fighting","Ground","Steel"],"Fast Attack(s)":[{"Name":"Rock Throw","Type":"Rock","Damage":12},{"Name":"Tackle","Type":"Normal","Damage":12}],"Special Attack(s)":[{"Name":"Dig","Type":"Ground","Damage":70},{"Name":"Rock Slide","Type":"Rock","Damage":50},{"Name":"Rock Tomb","Type":"Rock","Damage":30}],"Weight":{"Minimum":"17.5kg","Maximum":"22.5kg"},"Height":{"Minimum":"0.35m","Maximum":"0.45m"},"Buddy Distance":"1km (Medium)","Base Stamina":"80 stamina points.","Base Attack":"132 attack points.","Base Defense":"163 defense points.","Base Flee Rate":"10% chance to flee.","Next Evolution Requirements":{"Amount":25,"Name":"Geodude candies"},"Next evolution(s)":[{"Number":75,"Name":"Graveler"},{"Number":76,"Name":"Golem"}],"MaxCP":742,"MaxHP":849},{"Number":"075","Name":"Graveler","Generation":"Generation I","About":"Graveler grows by feeding on rocks. Apparently, it prefers to eat rocks that are covered in moss. This Pokémon eats its way through a ton of rocks on a daily basis.","Types":["Rock","Ground"],"Resistant":["Normal","Fire","Electric","Poison","Flying","Rock"],"Weaknesses":["Water","Grass","Ice","Fighting","Ground","Steel"],"Fast Attack(s)":[{"Name":"Mud Slap","Type":"Ground","Damage":15},{"Name":"Rock Throw","Type":"Rock","Damage":12}],"Special Attack(s)":[{"Name":"Dig","Type":"Ground","Damage":70},{"Name":"Rock Slide","Type":"Rock","Damage":50},{"Name":"Stone Edge","Type":"Rock","Damage":80}],"Weight":{"Minimum":"91.88kg","Maximum":"118.13kg"},"Height":{"Minimum":"0.88m","Maximum":"1.13m"},"Buddy Distance":"1km (Big)","Base Stamina":"110 stamina points.","Base Attack":"164 attack points.","Base Defense":"196 defense points.","Base Flee Rate":"7% chance to flee.","Previous evolution(s)":[{"Number":74,"Name":"Geodude"}],"Next Evolution Requirements":{"Amount":100,"Name":"Geodude candies"},"Next evolution(s)":[{"Number":76,"Name":"Golem"}],"MaxCP":1294,"MaxHP":1433},{"Number":"076","Name":"Golem","Generation":"Generation I","About":"Golem live up on mountains. If there is a large earthquake, these Pokémon will come rolling down off the mountains en masse to the foothills below.","Types":["Rock","Ground"],"Resistant":["Normal","Fire","Electric","Poison","Flying","Rock"],"Weaknesses":["Water","Grass","Ice","Fighting","Ground","Steel"],"Fast Attack(s)":[{"Name":"Mud Slap","Type":"Ground","Damage":15},{"Name":"Rock Throw","Type":"Rock","Damage":12}],"Special Attack(s)":[{"Name":"Ancient Power","Type":"Rock","Damage":35},{"Name":"Earthquake","Type":"Ground","Damage":100},{"Name":"Stone Edge","Type":"Rock","Damage":80}],"Weight":{"Minimum":"262.5kg","Maximum":"337.5kg"},"Height":{"Minimum":"1.22m","Maximum":"1.57m"},"Buddy Distance":"1km (Big)","Base Stamina":"160 stamina points.","Base Attack":"211 attack points.","Base Defense":"229 defense points.","Base Flee Rate":"5% chance to flee.","Previous evolution(s)":[{"Number":74,"Name":"Geodude"},{"Number":75,"Name":"Graveler"}],"MaxCP":2126,"MaxHP":2303},{"Number":"077","Name":"Ponyta","Generation":"Generation I","About":"Ponyta is very weak at birth. It can barely stand up. This Pokémon becomes stronger by stumbling and falling to keep up with its parent.","Types":["Fire"],"Resistant":["Fire","Grass","Ice","Bug","Steel","Fairy"],"Weaknesses":["Water","Ground","Rock"],"Fast Attack(s)":[{"Name":"Ember","Type":"Fire","Damage":10},{"Name":"Tackle","Type":"Normal","Damage":12}],"Special Attack(s)":[{"Name":"Fire Blast","Type":"Fire","Damage":100},{"Name":"Flame Charge","Type":"Fire","Damage":25},{"Name":"Flame Wheel","Type":"Fire","Damage":40}],"Weight":{"Minimum":"26.25kg","Maximum":"33.75kg"},"Height":{"Minimum":"0.88m","Maximum":"1.13m"},"Buddy Distance":"3km (Medium)","Base Stamina":"100 stamina points.","Base Attack":"170 attack points.","Base Defense":"132 defense points.","Base Flee Rate":"10% chance to flee.","Next Evolution Requirements":{"Amount":50,"Name":"Ponyta candies"},"Next evolution(s)":[{"Number":78,"Name":"Rapidash"}],"MaxCP":1370,"MaxHP":1516},{"Number":"078","Name":"Rapidash","Generation":"Generation I","About":"Rapidash usually can be seen casually cantering in the fields and plains. However, when this Pokémon turns serious, its fiery manes flare and blaze as it gallops its way up to 150 mph.","Types":["Fire"],"Resistant":["Fire","Grass","Ice","Bug","Steel","Fairy"],"Weaknesses":["Water","Ground","Rock"],"Fast Attack(s)":[{"Name":"Ember","Type":"Fire","Damage":10},{"Name":"Low Kick","Type":"Fighting","Damage":5}],"Special Attack(s)":[{"Name":"Drill Run","Type":"Ground","Damage":50},{"Name":"Fire Blast","Type":"Fire","Damage":100},{"Name":"Heat Wave","Type":"Fire","Damage":80}],"Weight":{"Minimum":"83.13kg","Maximum":"106.88kg"},"Height":{"Minimum":"1.49m","Maximum":"1.91m"},"Buddy Distance":"3km (Big)","Base Stamina":"130 stamina points.","Base Attack":"207 attack points.","Base Defense":"167 defense points.","Base Flee Rate":"6% chance to flee.","Previous evolution(s)":[{"Number":77,"Name":"Ponyta"}],"MaxCP":2024,"MaxHP":2199},{"Number":"079","Name":"Slowpoke","Generation":"Generation I","About":"Slowpoke uses its tail to catch prey by dipping it in water at the side of a river. However, this Pokémon often forgets what it's doing and often spends entire days just loafing at water's edge.","Types":["Water","Psychic"],"Resistant":["Fire","Water","Ice","Fighting","Psychic","Steel"],"Weaknesses":["Electric","Grass","Bug","Ghost","Dark"],"Fast Attack(s)":[{"Name":"Confusion","Type":"Psychic","Damage":15},{"Name":"Water Gun","Type":"Water","Damage":6}],"Special Attack(s)":[{"Name":"Psychic","Type":"Psychic","Damage":55},{"Name":"Psyshock","Type":"Psychic","Damage":40},{"Name":"Water Pulse","Type":"Water","Damage":35}],"Weight":{"Minimum":"31.5kg","Maximum":"40.5kg"},"Height":{"Minimum":"1.05m","Maximum":"1.35m"},"Buddy Distance":"3km (Medium)","Base Stamina":"180 stamina points.","Base Attack":"109 attack points.","Base Defense":"109 defense points.","Base Flee Rate":"10% chance to flee.","Next Evolution Requirements":{"Amount":50,"Name":"Slowpoke candies"},"Next evolution(s)":[{"Number":80,"Name":"Slowbro"},{"Number":199,"Name":"Slowking"}],"MaxCP":1089,"MaxHP":1218},{"Number":"080","Name":"Slowbro","Generation":"Generation I","About":"Slowbro's tail has a Shellder firmly attached with a bite. As a result, the tail can't be used for fishing anymore. This causes Slowbro to grudgingly swim and catch prey instead.","Types":["Water","Psychic"],"Resistant":["Fire","Water","Ice","Fighting","Psychic","Steel"],"Weaknesses":["Electric","Grass","Bug","Ghost","Dark"],"Fast Attack(s)":[{"Name":"Confusion","Type":"Psychic","Damage":15},{"Name":"Water Gun","Type":"Water","Damage":6}],"Special Attack(s)":[{"Name":"Ice Beam","Type":"Ice","Damage":65},{"Name":"Psychic","Type":"Psychic","Damage":55},{"Name":"Water Pulse","Type":"Water","Damage":35}],"Weight":{"Minimum":"68.69kg","Maximum":"88.31kg"},"Height":{"Minimum":"1.4m","Maximum":"1.8m"},"Buddy Distance":"3km (Big)","Base Stamina":"190 stamina points.","Base Attack":"177 attack points.","Base Defense":"194 defense points.","Base Flee Rate":"6% chance to flee.","Previous evolution(s)":[{"Number":79,"Name":"Slowpoke"}],"MaxCP":2409,"MaxHP":2597},{"Number":"081","Name":"Magnemite","Generation":"Generation I","About":"Magnemite attaches itself to power lines to feed on electricity. If your house has a power outage, check your circuit breakers. You may find a large number of this Pokémon clinging to the breaker box.","Types":["Electric","Steel"],"Resistant":["Normal","Electric","Grass","Ice","Poison","Flying","Psychic","Bug","Rock","Dragon","Steel","Fairy"],"Weaknesses":["Fire","Fighting","Ground"],"Fast Attack(s)":[{"Name":"Spark","Type":"Electric","Damage":7},{"Name":"Thunder Shock","Type":"Electric","Damage":5}],"Special Attack(s)":[{"Name":"Discharge","Type":"Electric","Damage":35},{"Name":"Magnet Bomb","Type":"Steel","Damage":30},{"Name":"Thunderbolt","Type":"Electric","Damage":55}],"Weight":{"Minimum":"5.25kg","Maximum":"6.75kg"},"Height":{"Minimum":"0.26m","Maximum":"0.34m"},"Buddy Distance":"3km (Flying)","Base Stamina":"50 stamina points.","Base Attack":"165 attack points.","Base Defense":"128 defense points.","Base Flee Rate":"10% chance to flee.","Next Evolution Requirements":{"Amount":50,"Name":"Magnemite candies"},"Next evolution(s)":[{"Number":82,"Name":"Magneton"}],"MaxCP":774,"MaxHP":890},{"Number":"082","Name":"Magneton","Generation":"Generation I","About":"Magneton emits a powerful magnetic force that is fatal to mechanical devices. As a result, large cities sound sirens to warn citizens of large-scale outbreaks of this Pokémon.","Types":["Electric","Steel"],"Resistant":["Normal","Electric","Grass","Ice","Poison","Flying","Psychic","Bug","Rock","Dragon","Steel","Fairy"],"Weaknesses":["Fire","Fighting","Ground"],"Fast Attack(s)":[{"Name":"Spark","Type":"Electric","Damage":7},{"Name":"Thunder Shock","Type":"Electric","Damage":5}],"Special Attack(s)":[{"Name":"Discharge","Type":"Electric","Damage":35},{"Name":"Flash Cannon","Type":"Steel","Damage":60},{"Name":"Magnet Bomb","Type":"Steel","Damage":30}],"Weight":{"Minimum":"52.5kg","Maximum":"67.5kg"},"Height":{"Minimum":"0.88m","Maximum":"1.13m"},"Buddy Distance":"3km (Big)","Base Stamina":"100 stamina points.","Base Attack":"223 attack points.","Base Defense":"182 defense points.","Base Flee Rate":"6% chance to flee.","Previous evolution(s)":[{"Number":81,"Name":"Magnemite"}],"MaxCP":1715,"MaxHP":1879},{"Number":"083","Name":"Farfetchd","Generation":"Generation I","About":"Farfetch'd is always seen with a stalk from a plant of some sort. Apparently, there are good stalks and bad stalks. This Pokémon has been known to fight with others over stalks.","Types":["Normal","Flying"],"Resistant":["Grass","Ground","Bug","Ghost"],"Weaknesses":["Electric","Ice","Rock"],"Fast Attack(s)":[{"Name":"Cut","Type":"Normal","Damage":12},{"Name":"Fury Cutter","Type":"Bug","Damage":3}],"Special Attack(s)":[{"Name":"Aerial Ace","Type":"Flying","Damage":30},{"Name":"Air Cutter","Type":"Flying","Damage":30},{"Name":"Leaf Blade","Type":"Grass","Damage":55}],"Weight":{"Minimum":"13.13kg","Maximum":"16.88kg"},"Height":{"Minimum":"0.7m","Maximum":"0.9m"},"Buddy Distance":"3km (Medium)","Base Stamina":"104 stamina points.","Base Attack":"124 attack points.","Base Defense":"118 defense points.","Base Flee Rate":"9% chance to flee.","Common Capture Area":"Early reports that this Pokèmon is likely to be found in: Asia or hatched from an Egg in that geographic area.","Asia":"Common Capture Area","MaxCP":1133,"MaxHP":1263},{"Number":"084","Name":"Doduo","Generation":"Generation I","About":"Doduo's two heads never sleep at the same time. Its two heads take turns sleeping, so one head can always keep watch for enemies while the other one sleeps.","Types":["Normal","Flying"],"Resistant":["Grass","Ground","Bug","Ghost"],"Weaknesses":["Electric","Ice","Rock"],"Fast Attack(s)":[{"Name":"Peck","Type":"Flying","Damage":10},{"Name":"Quick Attack","Type":"Normal","Damage":10}],"Special Attack(s)":[{"Name":"Aerial Ace","Type":"Flying","Damage":30},{"Name":"Drill Peck","Type":"Flying","Damage":40},{"Name":"Swift","Type":"Normal","Damage":30}],"Weight":{"Minimum":"34.3kg","Maximum":"44.1kg"},"Height":{"Minimum":"1.22m","Maximum":"1.57m"},"Buddy Distance":"3km (Medium)","Base Stamina":"70 stamina points.","Base Attack":"158 attack points.","Base Defense":"88 defense points.","Base Flee Rate":"10% chance to flee.","Next Evolution Requirements":{"Amount":50,"Name":"Doduo candies"},"Next evolution(s)":[{"Number":85,"Name":"Dodrio"}],"MaxCP":746,"MaxHP":855},{"Number":"085","Name":"Dodrio","Generation":"Generation I","About":"Watch out if Dodrio's three heads are looking in three separate directions. It's a sure sign that it is on its guard. Don't go near this Pokémon if it's being wary-it may decide to peck you.","Types":["Normal","Flying"],"Resistant":["Grass","Ground","Bug","Ghost"],"Weaknesses":["Electric","Ice","Rock"],"Fast Attack(s)":[{"Name":"Feint Attack","Type":"Dark","Damage":12},{"Name":"Steel Wing","Type":"Steel","Damage":15}],"Special Attack(s)":[{"Name":"Aerial Ace","Type":"Flying","Damage":30},{"Name":"Air Cutter","Type":"Flying","Damage":30},{"Name":"Drill Peck","Type":"Flying","Damage":40}],"Weight":{"Minimum":"74.55kg","Maximum":"95.85kg"},"Height":{"Minimum":"1.57m","Maximum":"2.02m"},"Buddy Distance":"3km (Big)","Base Stamina":"120 stamina points.","Base Attack":"218 attack points.","Base Defense":"145 defense points.","Base Flee Rate":"6% chance to flee.","Previous evolution(s)":[{"Number":84,"Name":"Doduo"}],"MaxCP":1677,"MaxHP":1836},{"Number":"086","Name":"Seel","Generation":"Generation I","About":"Seel hunts for prey in the frigid sea underneath sheets of ice. When it needs to breathe, it punches a hole through the ice with the sharply protruding section of its head.","Types":["Water"],"Resistant":["Fire","Water","Ice","Steel"],"Weaknesses":["Electric","Grass"],"Fast Attack(s)":[{"Name":"Ice Shard","Type":"Ice","Damage":15},{"Name":"Lick","Type":"Ghost","Damage":5}],"Special Attack(s)":[{"Name":"Aqua Jet","Type":"Water","Damage":25},{"Name":"Aqua Tail","Type":"Water","Damage":45},{"Name":"Icy Wind","Type":"Ice","Damage":25}],"Weight":{"Minimum":"78.75kg","Maximum":"101.25kg"},"Height":{"Minimum":"0.96m","Maximum":"1.24m"},"Buddy Distance":"3km (Medium)","Base Stamina":"130 stamina points.","Base Attack":"85 attack points.","Base Defense":"128 defense points.","Base Flee Rate":"9% chance to flee.","Next Evolution Requirements":{"Amount":50,"Name":"Seel candies"},"Next evolution(s)":[{"Number":87,"Name":"Dewgong"}],"MaxCP":985,"MaxHP":1107},{"Number":"087","Name":"Dewgong","Generation":"Generation I","About":"Dewgong loves to snooze on bitterly cold ice. The sight of this Pokémon sleeping on a glacier was mistakenly thought to be a mermaid by a mariner long ago.","Types":["Water","Ice"],"Resistant":["Water","Ice"],"Weaknesses":["Electric","Grass","Fighting","Rock"],"Fast Attack(s)":[{"Name":"Frost Breath","Type":"Ice","Damage":9},{"Name":"Ice Shard","Type":"Ice","Damage":15}],"Special Attack(s)":[{"Name":"Aqua Jet","Type":"Water","Damage":25},{"Name":"Blizzard","Type":"Ice","Damage":100},{"Name":"Icy Wind","Type":"Ice","Damage":25}],"Weight":{"Minimum":"105kg","Maximum":"135kg"},"Height":{"Minimum":"1.49m","Maximum":"1.91m"},"Buddy Distance":"3km (Medium)","Base Stamina":"180 stamina points.","Base Attack":"139 attack points.","Base Defense":"184 defense points.","Base Flee Rate":"6% chance to flee.","Previous evolution(s)":[{"Number":86,"Name":"Seel"}],"MaxCP":1975,"MaxHP":2145},{"Number":"088","Name":"Grimer","Generation":"Generation I","About":"Grimer's sludgy and rubbery body can be forced through any opening, however small it may be. This Pokémon enters sewer pipes to drink filthy wastewater.","Types":["Poison"],"Resistant":["Grass","Fighting","Poison","Bug","Fairy"],"Weaknesses":["Ground","Psychic"],"Fast Attack(s)":[{"Name":"Mud Slap","Type":"Ground","Damage":15},{"Name":"Poison Jab","Type":"Poison","Damage":12}],"Special Attack(s)":[{"Name":"Mud Bomb","Type":"Ground","Damage":30},{"Name":"Sludge","Type":"Poison","Damage":30},{"Name":"Sludge Bomb","Type":"Poison","Damage":55}],"Weight":{"Minimum":"26.25kg","Maximum":"33.75kg"},"Height":{"Minimum":"0.79m","Maximum":"1.01m"},"Buddy Distance":"3km (Big)","Base Stamina":"160 stamina points.","Base Attack":"135 attack points.","Base Defense":"90 defense points.","Base Flee Rate":"10% chance to flee.","Next Evolution Requirements":{"Amount":50,"Name":"Grimer candies"},"Next evolution(s)":[{"Number":89,"Name":"Muk"}],"MaxCP":1152,"MaxHP":1284},{"Number":"089","Name":"Muk","Generation":"Generation I","About":"From Muk's body seeps a foul fluid that gives off a nose-bendingly horrible stench. Just one drop of this Pokémon's body fluid can turn a pool stagnant and rancid.","Types":["Poison"],"Resistant":["Grass","Fighting","Poison","Bug","Fairy"],"Weaknesses":["Ground","Psychic"],"Fast Attack(s)":[{"Name":"Lick","Type":"Ghost","Damage":5},{"Name":"Poison Jab","Type":"Poison","Damage":12}],"Special Attack(s)":[{"Name":"Dark Pulse","Type":"Dark","Damage":45},{"Name":"Gunk Shot","Type":"Poison","Damage":65},{"Name":"Sludge Wave","Type":"Poison","Damage":70}],"Weight":{"Minimum":"26.25kg","Maximum":"33.75kg"},"Height":{"Minimum":"1.05m","Maximum":"1.35m"},"Buddy Distance":"3km (Big)","Base Stamina":"210 stamina points.","Base Attack":"190 attack points.","Base Defense":"184 defense points.","Base Flee Rate":"6% chance to flee.","Previous evolution(s)":[{"Number":88,"Name":"Grimer"}],"MaxCP":2414,"MaxHP":2602},{"Number":"090","Name":"Shellder","Generation":"Generation I","About":"At night, this Pokémon uses its broad tongue to burrow a hole in the seafloor sand and then sleep in it. While it is sleeping, Shellder closes its shell, but leaves its tongue hanging out.","Types":["Water"],"Resistant":["Fire","Water","Ice","Steel"],"Weaknesses":["Electric","Grass"],"Fast Attack(s)":[{"Name":"Ice Shard","Type":"Ice","Damage":15},{"Name":"Tackle","Type":"Normal","Damage":12}],"Special Attack(s)":[{"Name":"Bubble Beam","Type":"Water","Damage":30},{"Name":"Icy Wind","Type":"Ice","Damage":25},{"Name":"Water Pulse","Type":"Water","Damage":35}],"Weight":{"Minimum":"3.5kg","Maximum":"4.5kg"},"Height":{"Minimum":"0.26m","Maximum":"0.34m"},"Buddy Distance":"3km (Medium)","Base Stamina":"60 stamina points.","Base Attack":"116 attack points.","Base Defense":"168 defense points.","Base Flee Rate":"10% chance to flee.","Next Evolution Requirements":{"Amount":50,"Name":"Shellder candies"},"Next evolution(s)":[{"Number":91,"Name":"Cloyster"}],"MaxCP":715,"MaxHP":822},{"Number":"091","Name":"Cloyster","Generation":"Generation I","About":"Cloyster is capable of swimming in the sea. It does so by swallowing water, then jetting it out toward the rear. This Pokémon shoots spikes from its shell using the same system.","Types":["Water","Ice"],"Resistant":["Water","Ice"],"Weaknesses":["Electric","Grass","Fighting","Rock"],"Fast Attack(s)":[{"Name":"Frost Breath","Type":"Ice","Damage":9},{"Name":"Ice Shard","Type":"Ice","Damage":15}],"Special Attack(s)":[{"Name":"Blizzard","Type":"Ice","Damage":100},{"Name":"Hydro Pump","Type":"Water","Damage":90},{"Name":"Icy Wind","Type":"Ice","Damage":25}],"Weight":{"Minimum":"115.94kg","Maximum":"149.06kg"},"Height":{"Minimum":"1.31m","Maximum":"1.69m"},"Buddy Distance":"3km (Big)","Base Stamina":"100 stamina points.","Base Attack":"186 attack points.","Base Defense":"323 defense points.","Base Flee Rate":"6% chance to flee.","Previous evolution(s)":[{"Number":90,"Name":"Shellder"}],"MaxCP":1879,"MaxHP":2052},{"Number":"092","Name":"Gastly","Generation":"Generation I","About":"Gastly is largely composed of gaseous matter. When exposed to a strong wind, the gaseous body quickly dwindles away. Groups of this Pokémon cluster under the eaves of houses to escape the ravages of wind.","Types":["Ghost","Poison"],"Resistant":["Normal","Grass","Fighting","Poison","Bug","Fairy"],"Weaknesses":["Ground","Psychic","Ghost","Dark"],"Fast Attack(s)":[{"Name":"Lick","Type":"Ghost","Damage":5},{"Name":"Sucker Punch","Type":"Dark","Damage":7}],"Special Attack(s)":[{"Name":"Dark Pulse","Type":"Dark","Damage":45},{"Name":"Ominous Wind","Type":"Ghost","Damage":30},{"Name":"Sludge Bomb","Type":"Poison","Damage":55}],"Weight":{"Minimum":"0.09kg","Maximum":"0.11kg"},"Height":{"Minimum":"1.14m","Maximum":"1.46m"},"Buddy Distance":"3km (Flying)","Base Stamina":"60 stamina points.","Base Attack":"186 attack points.","Base Defense":"70 defense points.","Base Flee Rate":"10% chance to flee.","Next Evolution Requirements":{"Amount":25,"Name":"Gastly candies"},"Next evolution(s)":[{"Number":93,"Name":"Haunter"},{"Number":94,"Name":"Gengar"}],"MaxCP":696,"MaxHP":804},{"Number":"093","Name":"Haunter","Generation":"Generation I","About":"Haunter is a dangerous Pokémon. If one beckons you while floating in darkness, you must never approach it. This Pokémon will try to lick you with its tongue and steal your life away.","Types":["Ghost","Poison"],"Resistant":["Normal","Grass","Fighting","Poison","Bug","Fairy"],"Weaknesses":["Ground","Psychic","Ghost","Dark"],"Fast Attack(s)":[{"Name":"Lick","Type":"Ghost","Damage":5},{"Name":"Shadow Claw","Type":"Ghost","Damage":11}],"Special Attack(s)":[{"Name":"Dark Pulse","Type":"Dark","Damage":45},{"Name":"Shadow Ball","Type":"Ghost","Damage":45},{"Name":"Sludge Bomb","Type":"Poison","Damage":55}],"Weight":{"Minimum":"0.09kg","Maximum":"0.11kg"},"Height":{"Minimum":"1.4m","Maximum":"1.8m"},"Buddy Distance":"3km (Flying)","Base Stamina":"90 stamina points.","Base Attack":"223 attack points.","Base Defense":"112 defense points.","Base Flee Rate":"7% chance to flee.","Previous evolution(s)":[{"Number":92,"Name":"Gastly"}],"Next Evolution Requirements":{"Amount":100,"Name":"Gastly candies"},"Next evolution(s)":[{"Number":94,"Name":"Gengar"}],"MaxCP":1240,"MaxHP":1380},{"Number":"094","Name":"Gengar","Generation":"Generation I","About":"Sometimes, on a dark night, your shadow thrown by a streetlight will suddenly and startlingly overtake you. It is actually a Gengar running past you, pretending to be your shadow.","Types":["Ghost","Poison"],"Resistant":["Normal","Grass","Fighting","Poison","Bug","Fairy"],"Weaknesses":["Ground","Psychic","Ghost","Dark"],"Fast Attack(s)":[{"Name":"Shadow Claw","Type":"Ghost","Damage":11},{"Name":"Sucker Punch","Type":"Dark","Damage":7}],"Special Attack(s)":[{"Name":"Dark Pulse","Type":"Dark","Damage":45},{"Name":"Shadow Ball","Type":"Ghost","Damage":45},{"Name":"Sludge Bomb","Type":"Poison","Damage":55}],"Weight":{"Minimum":"35.44kg","Maximum":"45.56kg"},"Height":{"Minimum":"1.31m","Maximum":"1.69m"},"Buddy Distance":"3km (Big)","Base Stamina":"120 stamina points.","Base Attack":"261 attack points.","Base Defense":"156 defense points.","Base Flee Rate":"5% chance to flee.","Previous evolution(s)":[{"Number":92,"Name":"Gastly"},{"Number":93,"Name":"Haunter"}],"MaxCP":1907,"MaxHP":2078},{"Number":"095","Name":"Onix","Generation":"Generation I","About":"Onix has a magnet in its brain. It acts as a compass so that this Pokémon does not lose direction while it is tunneling. As it grows older, its body becomes increasingly rounder and smoother.","Types":["Rock","Ground"],"Resistant":["Normal","Fire","Electric","Poison","Flying","Rock"],"Weaknesses":["Water","Grass","Ice","Fighting","Ground","Steel"],"Fast Attack(s)":[{"Name":"Rock Throw","Type":"Rock","Damage":12},{"Name":"Tackle","Type":"Normal","Damage":12}],"Special Attack(s)":[{"Name":"Iron Head","Type":"Steel","Damage":30},{"Name":"Rock Slide","Type":"Rock","Damage":50},{"Name":"Stone Edge","Type":"Rock","Damage":80}],"Weight":{"Minimum":"183.75kg","Maximum":"236.25kg"},"Height":{"Minimum":"7.7m","Maximum":"9.9m"},"Buddy Distance":"5km (Big)","Base Stamina":"70 stamina points.","Base Attack":"85 attack points.","Base Defense":"288 defense points.","Base Flee Rate":"9% chance to flee.","Next evolution(s)":[{"Number":208,"Name":"Steelix"}],"MaxCP":745,"MaxHP":857},{"Number":"096","Name":"Drowzee","Generation":"Generation I","About":"If your nose becomes itchy while you are sleeping, it's a sure sign that one of these Pokémon is standing above your pillow and trying to eat you dream through your nostrils.","Types":["Psychic"],"Resistant":["Fighting","Psychic"],"Weaknesses":["Bug","Ghost","Dark"],"Fast Attack(s)":[{"Name":"Confusion","Type":"Psychic","Damage":15},{"Name":"Pound","Type":"Normal","Damage":7}],"Special Attack(s)":[{"Name":"Psybeam","Type":"Psychic","Damage":40},{"Name":"Psychic","Type":"Psychic","Damage":55},{"Name":"Psyshock","Type":"Psychic","Damage":40}],"Weight":{"Minimum":"28.35kg","Maximum":"36.45kg"},"Height":{"Minimum":"0.88m","Maximum":"1.13m"},"Buddy Distance":"3km (Big)","Base Stamina":"120 stamina points.","Base Attack":"89 attack points.","Base Defense":"158 defense points.","Base Flee Rate":"10% chance to flee.","Next Evolution Requirements":{"Amount":50,"Name":"Drowzee candies"},"Next evolution(s)":[{"Number":97,"Name":"Hypno"}],"MaxCP":955,"MaxHP":1075},{"Number":"097","Name":"Hypno","Generation":"Generation I","About":"Hypno holds a pendulum in its hand. The arcing movement and glitter of the pendulum lull the foe into a deep state of hypnosis. While this Pokémon searches for prey, it polishes the pendulum.","Types":["Psychic"],"Resistant":["Fighting","Psychic"],"Weaknesses":["Bug","Ghost","Dark"],"Fast Attack(s)":[{"Name":"Confusion","Type":"Psychic","Damage":15},{"Name":"Zen Headbutt","Type":"Psychic","Damage":12}],"Special Attack(s)":[{"Name":"Psychic","Type":"Psychic","Damage":55},{"Name":"Psyshock","Type":"Psychic","Damage":40},{"Name":"Shadow Ball","Type":"Ghost","Damage":45}],"Weight":{"Minimum":"66.15kg","Maximum":"85.05kg"},"Height":{"Minimum":"1.4m","Maximum":"1.8m"},"Buddy Distance":"3km (Big)","Base Stamina":"170 stamina points.","Base Attack":"144 attack points.","Base Defense":"215 defense points.","Base Flee Rate":"6% chance to flee.","Previous evolution(s)":[{"Number":96,"Name":"Drowzee"}],"MaxCP":2012,"MaxHP":2184},{"Number":"098","Name":"Krabby","Generation":"Generation I","About":"Krabby live on beaches, burrowed inside holes dug into the sand. On sandy beaches with little in the way of food, these Pokémon can be seen squabbling with each other over territory.","Types":["Water"],"Resistant":["Fire","Water","Ice","Steel"],"Weaknesses":["Electric","Grass"],"Fast Attack(s)":[{"Name":"Bubble","Type":"Water","Damage":25},{"Name":"Mud Shot","Type":"Ground","Damage":6}],"Special Attack(s)":[{"Name":"Bubble Beam","Type":"Water","Damage":30},{"Name":"Vice Grip","Type":"Normal","Damage":25},{"Name":"Water Pulse","Type":"Water","Damage":35}],"Weight":{"Minimum":"5.69kg","Maximum":"7.31kg"},"Height":{"Minimum":"0.35m","Maximum":"0.45m"},"Buddy Distance":"3km (Medium)","Base Stamina":"60 stamina points.","Base Attack":"181 attack points.","Base Defense":"156 defense points.","Base Flee Rate":"15% chance to flee.","Next Evolution Requirements":{"Amount":50,"Name":"Krabby candies"},"Next evolution(s)":[{"Number":99,"Name":"Kingler"}],"MaxCP":686,"MaxHP":792},{"Number":"099","Name":"Kingler","Generation":"Generation I","About":"Kingler has an enormous, oversized claw. It waves this huge claw in the air to communicate with others. However, because the claw is so heavy, the Pokémon quickly tires.","Types":["Water"],"Resistant":["Fire","Water","Ice","Steel"],"Weaknesses":["Electric","Grass"],"Fast Attack(s)":[{"Name":"Metal Claw","Type":"Steel","Damage":8},{"Name":"Mud Shot","Type":"Ground","Damage":6}],"Special Attack(s)":[{"Name":"Vice Grip","Type":"Normal","Damage":25},{"Name":"Water Pulse","Type":"Water","Damage":35},{"Name":"X Scissor","Type":"Bug","Damage":35}],"Weight":{"Minimum":"52.5kg","Maximum":"67.5kg"},"Height":{"Minimum":"1.14m","Maximum":"1.46m"},"Buddy Distance":"3km (Big)","Base Stamina":"110 stamina points.","Base Attack":"240 attack points.","Base Defense":"214 defense points.","Base Flee Rate":"7% chance to flee.","Previous evolution(s)":[{"Number":98,"Name":"Krabby"}],"MaxCP":1663,"MaxHP":1823},{"Number":"100","Name":"Voltorb","Generation":"Generation I","About":"Voltorb was first sighted at a company that manufactures Poké Balls. The link between that sighting and the fact that this Pokémon looks very similar to a Poké Ball remains a mystery.","Types":["Electric"],"Resistant":["Electric","Flying","Steel"],"Weaknesses":["Ground"],"Fast Attack(s)":[{"Name":"Spark","Type":"Electric","Damage":7},{"Name":"Tackle","Type":"Normal","Damage":12}],"Special Attack(s)":[{"Name":"Discharge","Type":"Electric","Damage":35},{"Name":"Signal Beam","Type":"Bug","Damage":45},{"Name":"Thunderbolt","Type":"Electric","Damage":55}],"Weight":{"Minimum":"9.1kg","Maximum":"11.7kg"},"Height":{"Minimum":"0.44m","Maximum":"0.56m"},"Buddy Distance":"3km (Medium)","Base Stamina":"80 stamina points.","Base Attack":"109 attack points.","Base Defense":"114 defense points.","Base Flee Rate":"10% chance to flee.","Next Evolution Requirements":{"Amount":50,"Name":"Voltorb candies"},"Next evolution(s)":[{"Number":101,"Name":"Electrode"}],"MaxCP":733,"MaxHP":839},{"Number":"101","Name":"Electrode","Generation":"Generation I","About":"Electrode eats electricity in the atmosphere. On days when lightning strikes, you can see this Pokémon exploding all over the place from eating too much electricity.","Types":["Electric"],"Resistant":["Electric","Flying","Steel"],"Weaknesses":["Ground"],"Fast Attack(s)":[{"Name":"Spark","Type":"Electric","Damage":7},{"Name":"Tackle","Type":"Normal","Damage":12}],"Special Attack(s)":[{"Name":"Discharge","Type":"Electric","Damage":35},{"Name":"Hyper Beam","Type":"Normal","Damage":120},{"Name":"Thunderbolt","Type":"Electric","Damage":55}],"Weight":{"Minimum":"58.27kg","Maximum":"74.92kg"},"Height":{"Minimum":"1.05m","Maximum":"1.35m"},"Buddy Distance":"3km (Big)","Base Stamina":"120 stamina points.","Base Attack":"173 attack points.","Base Defense":"179 defense points.","Base Flee Rate":"6% chance to flee.","Previous evolution(s)":[{"Number":100,"Name":"Voltorb"}],"MaxCP":1496,"MaxHP":1646},{"Number":"102","Name":"Exeggcute","Generation":"Generation I","About":"This Pokémon consists of six eggs that form a closely knit cluster. The six eggs attract each other and spin around. When cracks increasingly appear on the eggs, Exeggcute is close to evolution.","Types":["Grass","Psychic"],"Resistant":["Water","Electric","Grass","Fighting","Ground","Psychic"],"Weaknesses":["Fire","Ice","Poison","Flying","Bug","Ghost","Dark"],"Fast Attack(s)":[{"Name":"Confusion","Type":"Psychic","Damage":15}],"Special Attack(s)":[{"Name":"Ancient Power","Type":"Rock","Damage":35},{"Name":"Psychic","Type":"Psychic","Damage":55},{"Name":"Seed Bomb","Type":"Grass","Damage":40}],"Weight":{"Minimum":"2.19kg","Maximum":"2.81kg"},"Height":{"Minimum":"0.35m","Maximum":"0.45m"},"Buddy Distance":"3km (Medium)","Base Stamina":"120 stamina points.","Base Attack":"107 attack points.","Base Defense":"140 defense points.","Base Flee Rate":"10% chance to flee.","Next Evolution Requirements":{"Amount":50,"Name":"E"},"Next evolution(s)":[{"Number":103,"Name":"Exeggutor"}],"MaxCP":978,"MaxHP":1099},{"Number":"103","Name":"Exeggutor","Generation":"Generation I","About":"Exeggutor originally came from the tropics. Its heads steadily grow larger from exposure to strong sunlight. It is said that when the heads fall off, they group together to form Exeggcute.","Types":["Grass","Psychic"],"Resistant":["Water","Electric","Grass","Fighting","Ground","Psychic"],"Weaknesses":["Fire","Ice","Poison","Flying","Bug","Ghost","Dark"],"Fast Attack(s)":[{"Name":"Confusion","Type":"Psychic","Damage":15},{"Name":"Zen Headbutt","Type":"Psychic","Damage":12}],"Special Attack(s)":[{"Name":"Psychic","Type":"Psychic","Damage":55},{"Name":"Seed Bomb","Type":"Grass","Damage":40},{"Name":"Solar Beam","Type":"Grass","Damage":120}],"Weight":{"Minimum":"105kg","Maximum":"135kg"},"Height":{"Minimum":"1.75m","Maximum":"2.25m"},"Buddy Distance":"3km (Big)","Base Stamina":"190 stamina points.","Base Attack":"233 attack points.","Base Defense":"158 defense points.","Base Flee Rate":"6% chance to flee.","Previous evolution(s)":[{"Number":102,"Name":"Exeggcute"}],"MaxCP":2752,"MaxHP":2955},{"Number":"104","Name":"Cubone","Generation":"Generation I","About":"Cubone pines for the mother it will never see again. Seeing a likeness of its mother in the full moon, it cries. The stains on the skull the Pokémon wears are made by the tears it sheds.","Types":["Ground"],"Resistant":["Electric","Poison","Rock"],"Weaknesses":["Water","Grass","Ice"],"Fast Attack(s)":[{"Name":"Mud Slap","Type":"Ground","Damage":15},{"Name":"Rock Smash","Type":"Fighting","Damage":15}],"Special Attack(s)":[{"Name":"Bone Club","Type":"Ground","Damage":25},{"Name":"Bulldoze","Type":"Ground","Damage":35},{"Name":"Dig","Type":"Ground","Damage":70}],"Weight":{"Minimum":"5.69kg","Maximum":"7.31kg"},"Height":{"Minimum":"0.35m","Maximum":"0.45m"},"Buddy Distance":"3km (Medium)","Base Stamina":"100 stamina points.","Base Attack":"90 attack points.","Base Defense":"165 defense points.","Base Flee Rate":"10% chance to flee.","Next Evolution Requirements":{"Amount":50,"Name":"Cubone candies"},"Next evolution(s)":[{"Number":105,"Name":"Marowak"}],"MaxCP":889,"MaxHP":1006},{"Number":"105","Name":"Marowak","Generation":"Generation I","About":"Marowak is the evolved form of a Cubone that has overcome its sadness at the loss of its mother and grown tough. This Pokémon's tempered and hardened spirit is not easily broken.","Types":["Ground"],"Resistant":["Electric","Poison","Rock"],"Weaknesses":["Water","Grass","Ice"],"Fast Attack(s)":[{"Name":"Mud Slap","Type":"Ground","Damage":15},{"Name":"Rock Smash","Type":"Fighting","Damage":15}],"Special Attack(s)":[{"Name":"Bone Club","Type":"Ground","Damage":25},{"Name":"Dig","Type":"Ground","Damage":70},{"Name":"Earthquake","Type":"Ground","Damage":100}],"Weight":{"Minimum":"39.38kg","Maximum":"50.63kg"},"Height":{"Minimum":"0.88m","Maximum":"1.13m"},"Buddy Distance":"3km (Medium)","Base Stamina":"120 stamina points.","Base Attack":"144 attack points.","Base Defense":"200 defense points.","Base Flee Rate":"6% chance to flee.","Previous evolution(s)":[{"Number":104,"Name":"Cubone"}],"MaxCP":1505,"MaxHP":1656},{"Number":"106","Name":"Hitmonlee","Generation":"Generation I","About":"Hitmonlee's legs freely contract and stretch. Using these springlike legs, it bowls over foes with devastating kicks. After battle, it rubs down its legs and loosens the muscles to overcome fatigue.","Types":["Fighting"],"Resistant":["Bug","Rock","Dark"],"Weaknesses":["Flying","Psychic","Fairy"],"Fast Attack(s)":[{"Name":"Low Kick","Type":"Fighting","Damage":5},{"Name":"Rock Smash","Type":"Fighting","Damage":15}],"Special Attack(s)":[{"Name":"Brick Break","Type":"Fighting","Damage":30},{"Name":"Low Sweep","Type":"Fighting","Damage":30},{"Name":"Stone Edge","Type":"Rock","Damage":80}],"Weight":{"Minimum":"43.57kg","Maximum":"56.02kg"},"Height":{"Minimum":"1.31m","Maximum":"1.69m"},"Buddy Distance":"5km (Big)","Base Stamina":"100 stamina points.","Base Attack":"224 attack points.","Base Defense":"211 defense points.","Base Flee Rate":"9% chance to flee.","Previous evolution(s)":[{"Number":236,"Name":"Tyrogue"}],"MaxCP":1349,"MaxHP":1492},{"Number":"107","Name":"Hitmonchan","Generation":"Generation I","About":"Hitmonchan is said to possess the spirit of a boxer who had been working toward a world championship. This Pokémon has an indomitable spirit and will never give up in the face of adversity.","Types":["Fighting"],"Resistant":["Bug","Rock","Dark"],"Weaknesses":["Flying","Psychic","Fairy"],"Fast Attack(s)":[{"Name":"Bullet Punch","Type":"Steel","Damage":10},{"Name":"Rock Smash","Type":"Fighting","Damage":15}],"Special Attack(s)":[{"Name":"Brick Break","Type":"Fighting","Damage":30},{"Name":"Fire Punch","Type":"Fire","Damage":40},{"Name":"Ice Punch","Type":"Ice","Damage":45},{"Name":"Thunder Punch","Type":"Electric","Damage":40}],"Weight":{"Minimum":"43.93kg","Maximum":"56.48kg"},"Height":{"Minimum":"1.22m","Maximum":"1.57m"},"Buddy Distance":"5km (Big)","Base Stamina":"100 stamina points.","Base Attack":"193 attack points.","Base Defense":"212 defense points.","Base Flee Rate":"9% chance to flee.","Previous evolution(s)":[{"Number":236,"Name":"Tyrogue"}],"MaxCP":1370,"MaxHP":1516},{"Number":"108","Name":"Lickitung","Generation":"Generation I","About":"Whenever Lickitung comes across something new, it will unfailingly give it a lick. It does so because it memorizes things by texture and by taste. It is somewhat put off by sour things.","Types":["Normal"],"Resistant":["Ghost"],"Weaknesses":["Fighting"],"Fast Attack(s)":[{"Name":"Lick","Type":"Ghost","Damage":5},{"Name":"Zen Headbutt","Type":"Psychic","Damage":12}],"Special Attack(s)":[{"Name":"Hyper Beam","Type":"Normal","Damage":120},{"Name":"Power Whip","Type":"Grass","Damage":70},{"Name":"Stomp","Type":"Normal","Damage":30}],"Weight":{"Minimum":"57.31kg","Maximum":"73.69kg"},"Height":{"Minimum":"1.05m","Maximum":"1.35m"},"Buddy Distance":"3km (Medium)","Base Stamina":"180 stamina points.","Base Attack":"108 attack points.","Base Defense":"137 defense points.","Base Flee Rate":"9% chance to flee.","MaxCP":1477,"MaxHP":1626},{"Number":"109","Name":"Koffing","Generation":"Generation I","About":"If Koffing becomes agitated, it raises the toxicity of its internal gases and then jets them out from all over its body. This Pokémon may also overinflate its round body, then explode.","Types":["Poison"],"Resistant":["Grass","Fighting","Poison","Bug","Fairy"],"Weaknesses":["Ground","Psychic"],"Fast Attack(s)":[{"Name":"Tackle","Type":"Normal","Damage":12}],"Special Attack(s)":[{"Name":"Dark Pulse","Type":"Dark","Damage":45},{"Name":"Sludge","Type":"Poison","Damage":30},{"Name":"Sludge Bomb","Type":"Poison","Damage":55}],"Weight":{"Minimum":"0.88kg","Maximum":"1.13kg"},"Height":{"Minimum":"0.53m","Maximum":"0.68m"},"Buddy Distance":"3km (Big)","Base Stamina":"80 stamina points.","Base Attack":"119 attack points.","Base Defense":"164 defense points.","Base Flee Rate":"10% chance to flee.","Next Evolution Requirements":{"Amount":50,"Name":"Koffing candies"},"Next evolution(s)":[{"Number":110,"Name":"Weezing"}],"MaxCP":1025,"MaxHP":1151},{"Number":"110","Name":"Weezing","Generation":"Generation I","About":"Weezing loves the gases given off by rotted kitchen garbage. This Pokémon will find a dirty, unkempt house and make it its home. At night, when the people in the house are asleep, it will go through the trash.","Types":["Poison"],"Resistant":["Grass","Fighting","Poison","Bug","Fairy"],"Weaknesses":["Ground","Psychic"],"Fast Attack(s)":[{"Name":"Tackle","Type":"Normal","Damage":12}],"Special Attack(s)":[{"Name":"Dark Pulse","Type":"Dark","Damage":45},{"Name":"Shadow Ball","Type":"Ghost","Damage":45},{"Name":"Sludge Bomb","Type":"Poison","Damage":55}],"Weight":{"Minimum":"8.31kg","Maximum":"10.69kg"},"Height":{"Minimum":"1.05m","Maximum":"1.35m"},"Buddy Distance":"3km (Big)","Base Stamina":"130 stamina points.","Base Attack":"174 attack points.","Base Defense":"221 defense points.","Base Flee Rate":"6% chance to flee.","Previous evolution(s)":[{"Number":109,"Name":"Koffing"}],"MaxCP":2073,"MaxHP":2250},{"Number":"111","Name":"Rhyhorn","Generation":"Generation I","About":"Rhyhorn runs in a straight line, smashing everything in its path. It is not bothered even if it rushes headlong into a block of steel. This Pokémon may feel some pain from the collision the next day, however.","Types":["Ground","Rock"],"Resistant":["Normal","Fire","Electric","Poison","Flying","Rock"],"Weaknesses":["Water","Grass","Ice","Fighting","Ground","Steel"],"Fast Attack(s)":[{"Name":"Mud Slap","Type":"Ground","Damage":15},{"Name":"Rock Smash","Type":"Fighting","Damage":15}],"Special Attack(s)":[{"Name":"Bulldoze","Type":"Ground","Damage":35},{"Name":"Horn Attack","Type":"Normal","Damage":25},{"Name":"Stomp","Type":"Normal","Damage":30}],"Weight":{"Minimum":"100.63kg","Maximum":"129.38kg"},"Height":{"Minimum":"0.88m","Maximum":"1.13m"},"Buddy Distance":"3km (Big)","Base Stamina":"160 stamina points.","Base Attack":"140 attack points.","Base Defense":"157 defense points.","Base Flee Rate":"10% chance to flee.","Next Evolution Requirements":{"Amount":50,"Name":"Rhyhorn candies"},"Next evolution(s)":[{"Number":112,"Name":"Rhydon"}],"MaxCP":1055,"MaxHP":1182},{"Number":"112","Name":"Rhydon","Generation":"Generation I","About":"Rhydon's horn can crush even uncut diamonds. One sweeping blow of its tail can topple a building. This Pokémon's hide is extremely tough. Even direct cannon hits don't leave a scratch.","Types":["Ground","Rock"],"Resistant":["Normal","Fire","Electric","Poison","Flying","Rock"],"Weaknesses":["Water","Grass","Ice","Fighting","Ground","Steel"],"Fast Attack(s)":[{"Name":"Mud Slap","Type":"Ground","Damage":15},{"Name":"Rock Smash","Type":"Fighting","Damage":15}],"Special Attack(s)":[{"Name":"Earthquake","Type":"Ground","Damage":100},{"Name":"Megahorn","Type":"Bug","Damage":80},{"Name":"Stone Edge","Type":"Rock","Damage":80}],"Weight":{"Minimum":"105kg","Maximum":"135kg"},"Height":{"Minimum":"1.66m","Maximum":"2.14m"},"Buddy Distance":"3km (Big)","Base Stamina":"210 stamina points.","Base Attack":"222 attack points.","Base Defense":"206 defense points.","Base Flee Rate":"6% chance to flee.","Previous evolution(s)":[{"Number":111,"Name":"Rhyhorn"}],"MaxCP":2068,"MaxHP":2243},{"Number":"113","Name":"Chansey","Generation":"Generation I","About":"Chansey lays nutritionally excellent eggs on an everyday basis. The eggs are so delicious, they are easily and eagerly devoured by even those people who have lost their appetite.","Types":["Normal"],"Resistant":["Ghost"],"Weaknesses":["Fighting"],"Fast Attack(s)":[{"Name":"Pound","Type":"Normal","Damage":7},{"Name":"Zen Headbutt","Type":"Psychic","Damage":12}],"Special Attack(s)":[{"Name":"Dazzling Gleam","Type":"Fairy","Damage":55},{"Name":"Hyper Beam","Type":"Normal","Damage":120},{"Name":"Psychic","Type":"Psychic","Damage":55}],"Weight":{"Minimum":"30.27kg","Maximum":"38.92kg"},"Height":{"Minimum":"0.96m","Maximum":"1.24m"},"Buddy Distance":"5km (Big)","Base Stamina":"500 stamina points.","Base Attack":"60 attack points.","Base Defense":"176 defense points.","Base Flee Rate":"9% chance to flee.","Next evolution(s)":[{"Number":242,"Name":"Blissey"}],"MaxCP":549,"MaxHP":675},{"Number":"114","Name":"Tangela","Generation":"Generation I","About":"Tangela's vines snap off easily if they are grabbed. This happens without pain, allowing it to make a quick getaway. The lost vines are replaced by newly grown vines the very next day.","Types":["Grass"],"Resistant":["Water","Electric","Grass","Ground"],"Weaknesses":["Fire","Ice","Poison","Flying","Bug"],"Fast Attack(s)":[{"Name":"Vine Whip","Type":"Grass","Damage":7}],"Special Attack(s)":[{"Name":"Power Whip","Type":"Grass","Damage":70},{"Name":"Sludge Bomb","Type":"Poison","Damage":55},{"Name":"Solar Beam","Type":"Grass","Damage":120}],"Weight":{"Minimum":"30.63kg","Maximum":"39.38kg"},"Height":{"Minimum":"0.88m","Maximum":"1.13m"},"Buddy Distance":"3km (Medium)","Base Stamina":"130 stamina points.","Base Attack":"183 attack points.","Base Defense":"205 defense points.","Base Flee Rate":"9% chance to flee.","MaxCP":1586,"MaxHP":1739},{"Number":"115","Name":"Kangaskhan","Generation":"Generation I","About":"If you come across a young Kangaskhan playing by itself, you must never disturb it or attempt to catch it. The baby Pokémon's parent is sure to be in the area, and it will become violently enraged at you.","Types":["Normal"],"Resistant":["Ghost"],"Weaknesses":["Fighting"],"Fast Attack(s)":[{"Name":"Low Kick","Type":"Fighting","Damage":5},{"Name":"Mud Slap","Type":"Ground","Damage":15}],"Special Attack(s)":[{"Name":"Brick Break","Type":"Fighting","Damage":30},{"Name":"Earthquake","Type":"Ground","Damage":100},{"Name":"Stomp","Type":"Normal","Damage":30}],"Weight":{"Minimum":"70kg","Maximum":"90kg"},"Height":{"Minimum":"1.93m","Maximum":"2.48m"},"Buddy Distance":"3km (Big)","Base Stamina":"210 stamina points.","Base Attack":"181 attack points.","Base Defense":"165 defense points.","Base Flee Rate":"9% chance to flee.","Common Capture Area":"Early reports that this Pokèmon is likely to be found in: Australia, New Zealand or hatched from an Egg in that geographic area.","Australia, New Zealand":"Common Capture Area","MaxCP":1875,"MaxHP":2043},{"Number":"116","Name":"Horsea","Generation":"Generation I","About":"Horsea eats small insects and moss off of rocks. If the ocean current turns fast, this Pokémon anchors itself by wrapping its tail around rocks or coral to prevent being washed away.","Types":["Water"],"Resistant":["Fire","Water","Ice","Steel"],"Weaknesses":["Electric","Grass"],"Fast Attack(s)":[{"Name":"Bubble","Type":"Water","Damage":25},{"Name":"Water Gun","Type":"Water","Damage":6}],"Special Attack(s)":[{"Name":"Bubble Beam","Type":"Water","Damage":30},{"Name":"Dragon Pulse","Type":"Dragon","Damage":65},{"Name":"Flash Cannon","Type":"Steel","Damage":60}],"Weight":{"Minimum":"7kg","Maximum":"9kg"},"Height":{"Minimum":"0.35m","Maximum":"0.45m"},"Buddy Distance":"3km (Medium)","Base Stamina":"60 stamina points.","Base Attack":"129 attack points.","Base Defense":"125 defense points.","Base Flee Rate":"10% chance to flee.","Next Evolution Requirements":{"Amount":50,"Name":"Horsea candies"},"Next evolution(s)":[{"Number":117,"Name":"Seadra"},{"Number":230,"Name":"Kingdra"}],"MaxCP":688,"MaxHP":794},{"Number":"117","Name":"Seadra","Generation":"Generation I","About":"Seadra sleeps after wriggling itself between the branches of coral. Those trying to harvest coral are occasionally stung by this Pokémon's poison barbs if they fail to notice it.","Types":["Water"],"Resistant":["Fire","Water","Ice","Steel"],"Weaknesses":["Electric","Grass"],"Fast Attack(s)":[{"Name":"Dragon Breath","Type":"Dragon","Damage":6},{"Name":"Water Gun","Type":"Water","Damage":6}],"Special Attack(s)":[{"Name":"Blizzard","Type":"Ice","Damage":100},{"Name":"Dragon Pulse","Type":"Dragon","Damage":65},{"Name":"Hydro Pump","Type":"Water","Damage":90}],"Weight":{"Minimum":"21.88kg","Maximum":"28.13kg"},"Height":{"Minimum":"1.05m","Maximum":"1.35m"},"Buddy Distance":"3km (Big)","Base Stamina":"110 stamina points.","Base Attack":"187 attack points.","Base Defense":"182 defense points.","Base Flee Rate":"6% chance to flee.","Previous evolution(s)":[{"Number":116,"Name":"Horsea"}],"Next evolution(s)":[{"Number":230,"Name":"Kingdra"}],"MaxCP":1559,"MaxHP":1713},{"Number":"118","Name":"Goldeen","Generation":"Generation I","About":"Goldeen is a very beautiful Pokémon with fins that billow elegantly in water. However, don't let your guard down around this Pokémon—it could ram you powerfully with its horn.","Types":["Water"],"Resistant":["Fire","Water","Ice","Steel"],"Weaknesses":["Electric","Grass"],"Fast Attack(s)":[{"Name":"Mud Shot","Type":"Ground","Damage":6},{"Name":"Peck","Type":"Flying","Damage":10}],"Special Attack(s)":[{"Name":"Aqua Tail","Type":"Water","Damage":45},{"Name":"Horn Attack","Type":"Normal","Damage":25},{"Name":"Water Pulse","Type":"Water","Damage":35}],"Weight":{"Minimum":"13.13kg","Maximum":"16.88kg"},"Height":{"Minimum":"0.53m","Maximum":"0.68m"},"Buddy Distance":"3km (Medium)","Base Stamina":"90 stamina points.","Base Attack":"123 attack points.","Base Defense":"115 defense points.","Base Flee Rate":"15% chance to flee.","Next Evolution Requirements":{"Amount":50,"Name":"Goldeen candies"},"Next evolution(s)":[{"Number":119,"Name":"Seaking"}],"MaxCP":851,"MaxHP":965},{"Number":"119","Name":"Seaking","Generation":"Generation I","About":"In the autumn, Seaking males can be seen performing courtship dances in riverbeds to woo females. During this season, this Pokémon's body coloration is at its most beautiful.","Types":["Water"],"Resistant":["Fire","Water","Ice","Steel"],"Weaknesses":["Electric","Grass"],"Fast Attack(s)":[{"Name":"Peck","Type":"Flying","Damage":10},{"Name":"Poison Jab","Type":"Poison","Damage":12}],"Special Attack(s)":[{"Name":"Drill Run","Type":"Ground","Damage":50},{"Name":"Icy Wind","Type":"Ice","Damage":25},{"Name":"Megahorn","Type":"Bug","Damage":80}],"Weight":{"Minimum":"34.13kg","Maximum":"43.88kg"},"Height":{"Minimum":"1.14m","Maximum":"1.46m"},"Buddy Distance":"3km (Big)","Base Stamina":"160 stamina points.","Base Attack":"175 attack points.","Base Defense":"154 defense points.","Base Flee Rate":"7% chance to flee.","Previous evolution(s)":[{"Number":118,"Name":"Goldeen"}],"MaxCP":1877,"MaxHP":2043},{"Number":"120","Name":"Staryu","Generation":"Generation I","About":"Staryu's center section has an organ called the core that shines bright red. If you go to a beach toward the end of summer, the glowing cores of these Pokémon look like the stars in the sky.","Types":["Water"],"Resistant":["Fire","Water","Ice","Steel"],"Weaknesses":["Electric","Grass"],"Fast Attack(s)":[{"Name":"Tackle","Type":"Normal","Damage":12},{"Name":"Water Gun","Type":"Water","Damage":6}],"Special Attack(s)":[{"Name":"Bubble Beam","Type":"Water","Damage":30},{"Name":"Power Gem","Type":"Rock","Damage":40},{"Name":"Swift","Type":"Normal","Damage":30}],"Weight":{"Minimum":"30.19kg","Maximum":"38.81kg"},"Height":{"Minimum":"0.7m","Maximum":"0.9m"},"Buddy Distance":"3km (Medium)","Base Stamina":"60 stamina points.","Base Attack":"137 attack points.","Base Defense":"112 defense points.","Base Flee Rate":"15% chance to flee.","Next Evolution Requirements":{"Amount":50,"Name":"Staryu candies"},"Next evolution(s)":[{"Number":121,"Name":"Starmie"}],"MaxCP":821,"MaxHP":937},{"Number":"121","Name":"Starmie","Generation":"Generation I","About":"Starmie's center section-the core-glows brightly in seven colors. Because of its luminous nature, this Pokémon has been given the nickname the gem of the sea.\"\"","Types":["Water","Psychic"],"Resistant":["Fire","Water","Ice","Fighting","Psychic","Steel"],"Weaknesses":["Electric","Grass","Bug","Ghost","Dark"],"Fast Attack(s)":[{"Name":"Tackle","Type":"Normal","Damage":12},{"Name":"Water Gun","Type":"Water","Damage":6}],"Special Attack(s)":[{"Name":"Hydro Pump","Type":"Water","Damage":90},{"Name":"Power Gem","Type":"Rock","Damage":40},{"Name":"Psychic","Type":"Psychic","Damage":55}],"Weight":{"Minimum":"70kg","Maximum":"90kg"},"Height":{"Minimum":"0.96m","Maximum":"1.24m"},"Buddy Distance":"3km (Big)","Base Stamina":"120 stamina points.","Base Attack":"210 attack points.","Base Defense":"184 defense points.","Base Flee Rate":"6% chance to flee.","Previous evolution(s)":[{"Number":120,"Name":"Staryu"}],"MaxCP":2007,"MaxHP":2182},{"Number":"122","Name":"Mr Mime","Generation":"Generation I","About":"Mr. Mime is a master of pantomime. Its gestures and motions convince watchers that something unseeable actually exists. Once the watchers are convinced, the unseeable thing exists as if it were real.","Types":["Psychic","Fairy"],"Resistant":["Fighting","Psychic","Dragon"],"Weaknesses":["Poison","Ghost","Steel"],"Fast Attack(s)":[{"Name":"Confusion","Type":"Psychic","Damage":15},{"Name":"Zen Headbutt","Type":"Psychic","Damage":12}],"Special Attack(s)":[{"Name":"Psybeam","Type":"Psychic","Damage":40},{"Name":"Psychic","Type":"Psychic","Damage":55},{"Name":"Shadow Ball","Type":"Ghost","Damage":45}],"Weight":{"Minimum":"47.69kg","Maximum":"61.31kg"},"Height":{"Minimum":"1.14m","Maximum":"1.46m"},"Buddy Distance":"5km (Medium)","Base Stamina":"80 stamina points.","Base Attack":"192 attack points.","Base Defense":"233 defense points.","Base Flee Rate":"9% chance to flee.","Common Capture Area":"Early reports that this Pokèmon is likely to be found in: Western Europe or hatched from an Egg in that geographic area.","Western Europe":"Common Capture Area","MaxCP":1345,"MaxHP":1494},{"Number":"123","Name":"Scyther","Generation":"Generation I","About":"Scyther is blindingly fast. Its blazing speed enhances the effectiveness of the twin scythes on its forearms. This Pokémon's scythes are so effective, they can slice through thick logs in one wicked stroke.","Types":["Bug","Flying"],"Resistant":["Grass","Fighting","Ground","Bug"],"Weaknesses":["Fire","Electric","Ice","Flying","Rock"],"Fast Attack(s)":[{"Name":"Fury Cutter","Type":"Bug","Damage":3},{"Name":"Steel Wing","Type":"Steel","Damage":15}],"Special Attack(s)":[{"Name":"Bug Buzz","Type":"Bug","Damage":75},{"Name":"Night Slash","Type":"Dark","Damage":30},{"Name":"X Scissor","Type":"Bug","Damage":35}],"Weight":{"Minimum":"49kg","Maximum":"63kg"},"Height":{"Minimum":"1.31m","Maximum":"1.69m"},"Buddy Distance":"5km (Big)","Base Stamina":"140 stamina points.","Base Attack":"218 attack points.","Base Defense":"170 defense points.","Base Flee Rate":"9% chance to flee.","Next evolution(s)":[{"Number":212,"Name":"Scizor"}],"MaxCP":1905,"MaxHP":2073},{"Number":"124","Name":"Jynx","Generation":"Generation I","About":"Jynx walks rhythmically, swaying and shaking its hips as if it were dancing. Its motions are so bouncingly alluring, people seeing it are compelled to shake their hips without giving any thought to what they are doing.","Types":["Ice","Psychic"],"Resistant":["Ice","Psychic"],"Weaknesses":["Fire","Bug","Rock","Ghost","Dark","Steel"],"Fast Attack(s)":[{"Name":"Frost Breath","Type":"Ice","Damage":9},{"Name":"Pound","Type":"Normal","Damage":7}],"Special Attack(s)":[{"Name":"Draining Kiss","Type":"Fairy","Damage":25},{"Name":"Ice Punch","Type":"Ice","Damage":45},{"Name":"Psyshock","Type":"Psychic","Damage":40}],"Weight":{"Minimum":"35.52kg","Maximum":"45.67kg"},"Height":{"Minimum":"1.22m","Maximum":"1.57m"},"Buddy Distance":"5km (Big)","Base Stamina":"130 stamina points.","Base Attack":"223 attack points.","Base Defense":"182 defense points.","Base Flee Rate":"9% chance to flee.","Previous evolution(s)":[{"Number":238,"Name":"Smoochum"}],"MaxCP":1563,"MaxHP":1716},{"Number":"125","Name":"Electabuzz","Generation":"Generation I","About":"When a storm arrives, gangs of this Pokémon compete with each other to scale heights that are likely to be stricken by lightning bolts. Some towns use Electabuzz in place of lightning rods.","Types":["Electric"],"Resistant":["Electric","Flying","Steel"],"Weaknesses":["Ground"],"Fast Attack(s)":[{"Name":"Low Kick","Type":"Fighting","Damage":5},{"Name":"Thunder Shock","Type":"Electric","Damage":5}],"Special Attack(s)":[{"Name":"Thunder","Type":"Electric","Damage":100},{"Name":"Thunder Punch","Type":"Electric","Damage":40},{"Name":"Thunderbolt","Type":"Electric","Damage":55}],"Weight":{"Minimum":"26.25kg","Maximum":"33.75kg"},"Height":{"Minimum":"0.96m","Maximum":"1.24m"},"Buddy Distance":"5km (Medium)","Base Stamina":"130 stamina points.","Base Attack":"198 attack points.","Base Defense":"173 defense points.","Base Flee Rate":"9% chance to flee.","Previous evolution(s)":[{"Number":239,"Name":"Elekid"}],"MaxCP":1947,"MaxHP":2119},{"Number":"126","Name":"Magmar","Generation":"Generation I","About":"In battle, Magmar blows out intensely hot flames from all over its body to intimidate its opponent. This Pokémon's fiery bursts create heat waves that ignite grass and trees in its surroundings.","Types":["Fire"],"Resistant":["Fire","Grass","Ice","Bug","Steel","Fairy"],"Weaknesses":["Water","Ground","Rock"],"Fast Attack(s)":[{"Name":"Ember","Type":"Fire","Damage":10},{"Name":"Karate Chop","Type":"Fighting","Damage":6}],"Special Attack(s)":[{"Name":"Fire Blast","Type":"Fire","Damage":100},{"Name":"Fire Punch","Type":"Fire","Damage":40},{"Name":"Flamethrower","Type":"Fire","Damage":55}],"Weight":{"Minimum":"38.94kg","Maximum":"50.06kg"},"Height":{"Minimum":"1.14m","Maximum":"1.46m"},"Buddy Distance":"5km (Big)","Base Stamina":"130 stamina points.","Base Attack":"206 attack points.","Base Defense":"169 defense points.","Base Flee Rate":"9% chance to flee.","Previous evolution(s)":[{"Number":240,"Name":"Magby"}],"MaxCP":2086,"MaxHP":2265},{"Number":"127","Name":"Pinsir","Generation":"Generation I","About":"Pinsir is astoundingly strong. It can grip a foe weighing twice its weight in its horns and easily lift it. This Pokémon's movements turn sluggish in cold places.","Types":["Bug"],"Resistant":["Grass","Fighting","Ground"],"Weaknesses":["Fire","Flying","Rock"],"Fast Attack(s)":[{"Name":"Fury Cutter","Type":"Bug","Damage":3},{"Name":"Rock Smash","Type":"Fighting","Damage":15}],"Special Attack(s)":[{"Name":"Submission","Type":"Fighting","Damage":30},{"Name":"Vice Grip","Type":"Normal","Damage":25},{"Name":"X Scissor","Type":"Bug","Damage":35}],"Weight":{"Minimum":"48.13kg","Maximum":"61.88kg"},"Height":{"Minimum":"1.31m","Maximum":"1.69m"},"Buddy Distance":"5km (Big)","Base Stamina":"130 stamina points.","Base Attack":"238 attack points.","Base Defense":"197 defense points.","Base Flee Rate":"9% chance to flee.","MaxCP":1950,"MaxHP":2121},{"Number":"128","Name":"Tauros","Generation":"Generation I","About":"This Pokémon is not satisfied unless it is rampaging at all times. If there is no opponent for Tauros to battle, it will charge at thick trees and knock them down to calm itself.","Types":["Normal"],"Resistant":["Ghost"],"Weaknesses":["Fighting"],"Fast Attack(s)":[{"Name":"Tackle","Type":"Normal","Damage":12},{"Name":"Zen Headbutt","Type":"Psychic","Damage":12}],"Special Attack(s)":[{"Name":"Earthquake","Type":"Ground","Damage":100},{"Name":"Horn Attack","Type":"Normal","Damage":25},{"Name":"Iron Head","Type":"Steel","Damage":30}],"Weight":{"Minimum":"77.35kg","Maximum":"99.45kg"},"Height":{"Minimum":"1.22m","Maximum":"1.57m"},"Buddy Distance":"3km (Big)","Base Stamina":"150 stamina points.","Base Attack":"198 attack points.","Base Defense":"197 defense points.","Base Flee Rate":"9% chance to flee.","Common Capture Area":"Early reports that this Pokèmon is likely to be found in: North America or hatched from an Egg in that geographic area.","North America":"Common Capture Area","MaxCP":1686,"MaxHP":1844},{"Number":"129","Name":"Magikarp","Generation":"Generation I","About":"Magikarp is a pathetic excuse for a Pokémon that is only capable of flopping and splashing. This behavior prompted scientists to undertake research into it.","Types":["Water"],"Resistant":["Fire","Water","Ice","Steel"],"Weaknesses":["Electric","Grass"],"Fast Attack(s)":[{"Name":"Splash","Type":"Water","Damage":0}],"Special Attack(s)":[{"Name":"Struggle","Type":"Normal","Damage":15}],"Weight":{"Minimum":"8.75kg","Maximum":"11.25kg"},"Height":{"Minimum":"0.79m","Maximum":"1.01m"},"Buddy Distance":"1km (Medium)","Base Stamina":"40 stamina points.","Base Attack":"29 attack points.","Base Defense":"102 defense points.","Base Flee Rate":"15% chance to flee.","Next Evolution Requirements":{"Amount":400,"Name":"Magikarp candies"},"Next evolution(s)":[{"Number":130,"Name":"Gyarados"}],"MaxCP":203,"MaxHP":262},{"Number":"130","Name":"Gyarados","Generation":"Generation I","About":"When Magikarp evolves into Gyarados, its brain cells undergo a structural transformation. It is said that this transformation is to blame for this Pokémon's wildly violent nature.","Types":["Water","Flying"],"Resistant":["Fire","Water","Fighting","Ground","Bug","Steel"],"Weaknesses":["Electric","Rock"],"Fast Attack(s)":[{"Name":"Bite","Type":"Dark","Damage":6}],"Special Attack(s)":[{"Name":"Dragon Pulse","Type":"Dragon","Damage":65},{"Name":"Hydro Pump","Type":"Water","Damage":90},{"Name":"Twister","Type":"Dragon","Damage":25}],"Weight":{"Minimum":"205.63kg","Maximum":"264.38kg"},"Height":{"Minimum":"5.69m","Maximum":"7.31m"},"Buddy Distance":"1km (Big)","Base Stamina":"190 stamina points.","Base Attack":"237 attack points.","Base Defense":"197 defense points.","Base Flee Rate":"7% chance to flee.","Previous evolution(s)":[{"Number":129,"Name":"Magikarp"}],"MaxCP":2498,"MaxHP":2688},{"Number":"131","Name":"Lapras","Generation":"Generation I","About":"People have driven Lapras almost to the point of extinction. In the evenings, this Pokémon is said to sing plaintively as it seeks what few others of its kind still remain.","Types":["Water","Ice"],"Resistant":["Water","Ice"],"Weaknesses":["Electric","Grass","Fighting","Rock"],"Fast Attack(s)":[{"Name":"Frost Breath","Type":"Ice","Damage":9},{"Name":"Ice Shard","Type":"Ice","Damage":15}],"Special Attack(s)":[{"Name":"Blizzard","Type":"Ice","Damage":100},{"Name":"Dragon Pulse","Type":"Dragon","Damage":65},{"Name":"Ice Beam","Type":"Ice","Damage":65}],"Weight":{"Minimum":"192.5kg","Maximum":"247.5kg"},"Height":{"Minimum":"2.19m","Maximum":"2.81m"},"Buddy Distance":"5km (Big)","Base Stamina":"260 stamina points.","Base Attack":"186 attack points.","Base Defense":"190 defense points.","Base Flee Rate":"9% chance to flee.","MaxCP":2777,"MaxHP":2980},{"Number":"132","Name":"Ditto","Generation":"Generation I","About":"Ditto rearranges its cell structure to transform itself into other shapes. However, if it tries to transform itself into something by relying on its memory, this Pokémon manages to get details wrong.","Types":["Normal"],"Resistant":["Ghost"],"Weaknesses":["Fighting"],"Fast Attack(s)":[{"Name":"Transform","Type":"Normal","Damage":0}],"Special Attack(s)":[{"Name":"Struggle","Type":"Normal","Damage":15}],"Weight":{"Minimum":"3.5kg","Maximum":"4.5kg"},"Height":{"Minimum":"0.26m","Maximum":"0.34m"},"Buddy Distance":"3km (Medium)","Base Stamina":"96 stamina points.","Base Attack":"91 attack points.","Base Defense":"91 defense points.","Base Flee Rate":"10% chance to flee.","MaxCP":809,"MaxHP":919},{"Number":"133","Name":"Eevee","Generation":"Generation I","About":"Eevee has an unstable genetic makeup that suddenly mutates due to the environment in which it lives. Radiation from various stones causes this Pokémon to evolve.","Types":["Normal"],"Resistant":["Ghost"],"Weaknesses":["Fighting"],"Fast Attack(s)":[{"Name":"Quick Attack","Type":"Normal","Damage":10},{"Name":"Tackle","Type":"Normal","Damage":12}],"Special Attack(s)":[{"Name":"Body Slam","Type":"Normal","Damage":40},{"Name":"Dig","Type":"Ground","Damage":70},{"Name":"Swift","Type":"Normal","Damage":30}],"Weight":{"Minimum":"5.69kg","Maximum":"7.31kg"},"Height":{"Minimum":"0.26m","Maximum":"0.34m"},"Buddy Distance":"5km (Shoulder)","Base Stamina":"110 stamina points.","Base Attack":"104 attack points.","Base Defense":"121 defense points.","Base Flee Rate":"10% chance to flee.","Next Evolution Requirements":{"Amount":25,"Name":"Eevee candies"},"Next evolution(s)":[{"Number":134,"Name":"Vaporeon"},{"Number":135,"Name":"Jolteon"},{"Number":136,"Name":"Flareon"},{"Number":196,"Name":"Espeon"},{"Number":197,"Name":"Umbreon"}],"MaxCP":957,"MaxHP":1077},{"Number":"134","Name":"Vaporeon","Generation":"Generation I","About":"Vaporeon underwent a spontaneous mutation and grew fins and gills that allow it to live underwater. This Pokémon has the ability to freely control water.","Types":["Water"],"Resistant":["Fire","Water","Ice","Steel"],"Weaknesses":["Electric","Grass"],"Fast Attack(s)":[{"Name":"Water Gun","Type":"Water","Damage":6}],"Special Attack(s)":[{"Name":"Aqua Tail","Type":"Water","Damage":45},{"Name":"Hydro Pump","Type":"Water","Damage":90},{"Name":"Water Pulse","Type":"Water","Damage":35}],"Weight":{"Minimum":"25.38kg","Maximum":"32.63kg"},"Height":{"Minimum":"0.88m","Maximum":"1.13m"},"Buddy Distance":"5km (Medium)","Base Stamina":"260 stamina points.","Base Attack":"205 attack points.","Base Defense":"177 defense points.","Base Flee Rate":"6% chance to flee.","Previous evolution(s)":[{"Number":133,"Name":"Eevee"}],"MaxCP":2618,"MaxHP":2816},{"Number":"135","Name":"Jolteon","Generation":"Generation I","About":"Jolteon's cells generate a low level of electricity. This power is amplified by the static electricity of its fur, enabling the Pokémon to drop thunderbolts. The bristling fur is made of electrically charged needles.","Types":["Electric"],"Resistant":["Electric","Flying","Steel"],"Weaknesses":["Ground"],"Fast Attack(s)":[{"Name":"Thunder Shock","Type":"Electric","Damage":5}],"Special Attack(s)":[{"Name":"Discharge","Type":"Electric","Damage":35},{"Name":"Thunder","Type":"Electric","Damage":100},{"Name":"Thunderbolt","Type":"Electric","Damage":55}],"Weight":{"Minimum":"21.44kg","Maximum":"27.56kg"},"Height":{"Minimum":"0.7m","Maximum":"0.9m"},"Buddy Distance":"5km (Medium)","Base Stamina":"130 stamina points.","Base Attack":"232 attack points.","Base Defense":"201 defense points.","Base Flee Rate":"6% chance to flee.","Previous evolution(s)":[{"Number":133,"Name":"Eevee"}],"MaxCP":1968,"MaxHP":2140},{"Number":"136","Name":"Flareon","Generation":"Generation I","About":"Flareon's fluffy fur has a functional purpose-it releases heat into the air so that its body does not get excessively hot. This Pokémon's body temperature can rise to a maximum of 1,650 degrees Fahrenheit.","Types":["Fire"],"Resistant":["Fire","Grass","Ice","Bug","Steel","Fairy"],"Weaknesses":["Water","Ground","Rock"],"Fast Attack(s)":[{"Name":"Ember","Type":"Fire","Damage":10}],"Special Attack(s)":[{"Name":"Fire Blast","Type":"Fire","Damage":100},{"Name":"Flamethrower","Type":"Fire","Damage":55},{"Name":"Heat Wave","Type":"Fire","Damage":80}],"Weight":{"Minimum":"21.88kg","Maximum":"28.13kg"},"Height":{"Minimum":"0.79m","Maximum":"1.01m"},"Buddy Distance":"5km (Medium)","Base Stamina":"130 stamina points.","Base Attack":"246 attack points.","Base Defense":"204 defense points.","Base Flee Rate":"6% chance to flee.","Previous evolution(s)":[{"Number":133,"Name":"Eevee"}],"MaxCP":2448,"MaxHP":2643},{"Number":"137","Name":"Porygon","Generation":"Generation I","About":"Porygon is capable of reverting itself entirely back to program data and entering cyberspace. This Pokémon is copy-protected so it cannot be duplicated by copying.","Types":["Normal"],"Resistant":["Ghost"],"Weaknesses":["Fighting"],"Fast Attack(s)":[{"Name":"Tackle","Type":"Normal","Damage":12},{"Name":"Zen Headbutt","Type":"Psychic","Damage":12}],"Special Attack(s)":[{"Name":"Discharge","Type":"Electric","Damage":35},{"Name":"Psybeam","Type":"Psychic","Damage":40},{"Name":"Signal Beam","Type":"Bug","Damage":45}],"Weight":{"Minimum":"31.94kg","Maximum":"41.06kg"},"Height":{"Minimum":"0.7m","Maximum":"0.9m"},"Buddy Distance":"3km (Big)","Base Stamina":"130 stamina points.","Base Attack":"153 attack points.","Base Defense":"139 defense points.","Base Flee Rate":"9% chance to flee.","Next evolution(s)":[{"Number":233,"Name":"Porygon2"}],"MaxCP":1540,"MaxHP":1691},{"Number":"138","Name":"Omanyte","Generation":"Generation I","About":"Omanyte is one of the ancient and long-since-extinct Pokémon that have been regenerated from fossils by people. If attacked by an enemy, it withdraws itself inside its hard shell.","Types":["Rock","Water"],"Resistant":["Normal","Fire","Ice","Poison","Flying"],"Weaknesses":["Electric","Grass","Fighting","Ground"],"Fast Attack(s)":[{"Name":"Mud Shot","Type":"Ground","Damage":6},{"Name":"Water Gun","Type":"Water","Damage":6}],"Special Attack(s)":[{"Name":"Ancient Power","Type":"Rock","Damage":35},{"Name":"Brine","Type":"Water","Damage":25},{"Name":"Rock Tomb","Type":"Rock","Damage":30}],"Weight":{"Minimum":"6.56kg","Maximum":"8.44kg"},"Height":{"Minimum":"0.35m","Maximum":"0.45m"},"Buddy Distance":"5km (Medium)","Base Stamina":"70 stamina points.","Base Attack":"155 attack points.","Base Defense":"174 defense points.","Base Flee Rate":"9% chance to flee.","Next Evolution Requirements":{"Amount":50,"Name":"Omanyte candies"},"Next evolution(s)":[{"Number":139,"Name":"Omastar"}],"MaxCP":992,"MaxHP":1119},{},{"Number":"140","Name":"Kabuto","Generation":"Generation I","About":"Kabuto is a Pokémon that has been regenerated from a fossil. However, in extremely rare cases, living examples have been discovered. The Pokémon has not changed at all for 300 million years.","Types":["Rock","Water"],"Resistant":["Normal","Fire","Ice","Poison","Flying"],"Weaknesses":["Electric","Grass","Fighting","Ground"],"Fast Attack(s)":[{"Name":"Mud Shot","Type":"Ground","Damage":6},{"Name":"Scratch","Type":"Normal","Damage":6}],"Special Attack(s)":[{"Name":"Ancient Power","Type":"Rock","Damage":35},{"Name":"Aqua Jet","Type":"Water","Damage":25},{"Name":"Rock Tomb","Type":"Rock","Damage":30}],"Weight":{"Minimum":"10.06kg","Maximum":"12.94kg"},"Height":{"Minimum":"0.44m","Maximum":"0.56m"},"Buddy Distance":"5km (Medium)","Base Stamina":"60 stamina points.","Base Attack":"148 attack points.","Base Defense":"162 defense points.","Base Flee Rate":"9% chance to flee.","Next Evolution Requirements":{"Amount":50,"Name":"Kabuto candies"},"Next evolution(s)":[{"Number":141,"Name":"Kabutops"}],"MaxCP":975,"MaxHP":1104},{"Number":"141","Name":"Kabutops","Generation":"Generation I","About":"Kabutops swam underwater to hunt for its prey in ancient times. The Pokémon was apparently evolving from being a water-dweller to living on land as evident from the beginnings of change in its gills and legs.","Types":["Rock","Water"],"Resistant":["Normal","Fire","Ice","Poison","Flying"],"Weaknesses":["Electric","Grass","Fighting","Ground"],"Fast Attack(s)":[{"Name":"Fury Cutter","Type":"Bug","Damage":3},{"Name":"Mud Shot","Type":"Ground","Damage":6}],"Special Attack(s)":[{"Name":"Ancient Power","Type":"Rock","Damage":35},{"Name":"Stone Edge","Type":"Rock","Damage":80},{"Name":"Water Pulse","Type":"Water","Damage":35}],"Weight":{"Minimum":"35.44kg","Maximum":"45.56kg"},"Height":{"Minimum":"1.14m","Maximum":"1.46m"},"Buddy Distance":"5km (Big)","Base Stamina":"120 stamina points.","Base Attack":"220 attack points.","Base Defense":"203 defense points.","Base Flee Rate":"5% chance to flee.","Previous evolution(s)":[{"Number":140,"Name":"Kabuto"}],"MaxCP":1957,"MaxHP":2130},{"Number":"142","Name":"Aerodactyl","Generation":"Generation I","About":"Aerodactyl is a Pokémon from the age of dinosaurs. It was regenerated from genetic material extracted from amber. It is imagined to have been the king of the skies in ancient times.","Types":["Rock","Flying"],"Resistant":["Normal","Fire","Poison","Flying","Bug"],"Weaknesses":["Water","Electric","Ice","Rock","Steel"],"Fast Attack(s)":[{"Name":"Bite","Type":"Dark","Damage":6},{"Name":"Steel Wing","Type":"Steel","Damage":15}],"Special Attack(s)":[{"Name":"Ancient Power","Type":"Rock","Damage":35},{"Name":"Hyper Beam","Type":"Normal","Damage":120},{"Name":"Iron Head","Type":"Steel","Damage":30}],"Weight":{"Minimum":"51.63kg","Maximum":"66.38kg"},"Height":{"Minimum":"1.57m","Maximum":"2.02m"},"Buddy Distance":"5km (Big)","Base Stamina":"160 stamina points.","Base Attack":"221 attack points.","Base Defense":"164 defense points.","Base Flee Rate":"9% chance to flee.","MaxCP":1994,"MaxHP":2165},{"Number":"143","Name":"Snorlax","Generation":"Generation I","About":"Snorlax's typical day consists of nothing more than eating and sleeping. It is such a docile Pokémon that there are children who use its expansive belly as a place to play.","Types":["Normal"],"Resistant":["Ghost"],"Weaknesses":["Fighting"],"Fast Attack(s)":[{"Name":"Lick","Type":"Ghost","Damage":5},{"Name":"Zen Headbutt","Type":"Psychic","Damage":12}],"Special Attack(s)":[{"Name":"Body Slam","Type":"Normal","Damage":40},{"Name":"Earthquake","Type":"Ground","Damage":100},{"Name":"Hyper Beam","Type":"Normal","Damage":120}],"Weight":{"Minimum":"402.5kg","Maximum":"517.5kg"},"Height":{"Minimum":"1.84m","Maximum":"2.36m"},"Buddy Distance":"5km (Big)","Base Stamina":"320 stamina points.","Base Attack":"190 attack points.","Base Defense":"190 defense points.","Base Flee Rate":"9% chance to flee.","MaxCP":2901,"MaxHP":3112},{"Number":"144","Name":"Articuno","Generation":"Generation I","About":"Articuno is a legendary bird Pokémon that can control ice. The flapping of its wings chills the air. As a result, it is said that when this Pokémon flies, snow will fall.","Types":["Ice","Flying"],"Resistant":["Grass","Ground","Bug"],"Weaknesses":["Fire","Electric","Rock","Steel"],"Fast Attack(s)":[{"Name":"Frost Breath","Type":"Ice","Damage":9}],"Special Attack(s)":[{"Name":"Blizzard","Type":"Ice","Damage":100},{"Name":"Ice Beam","Type":"Ice","Damage":65},{"Name":"Icy Wind","Type":"Ice","Damage":25}],"Weight":{"Minimum":"48.48kg","Maximum":"62.33kg"},"Height":{"Minimum":"1.49m","Maximum":"1.91m"},"Buddy Distance":"5km (Flying)","Base Stamina":"180 stamina points.","Base Attack":"192 attack points.","Base Defense":"249 defense points.","Base Flee Rate":"10% chance to flee.","Pokèmon Class":"This is a LEGENDARY Pokèmon.","LEGENDARY":"Pokèmon Class","MaxCP":2776,"MaxHP":2978},{"Number":"145","Name":"Zapdos","Generation":"Generation I","About":"Zapdos is a legendary bird Pokémon that has the ability to control electricity. It usually lives in thunderclouds. The Pokémon gains power if it is stricken by lightning bolts.","Types":["Electric","Flying"],"Resistant":["Grass","Fighting","Flying","Bug","Steel"],"Weaknesses":["Ice","Rock"],"Fast Attack(s)":[{"Name":"Thunder Shock","Type":"Electric","Damage":5}],"Special Attack(s)":[{"Name":"Discharge","Type":"Electric","Damage":35},{"Name":"Thunder","Type":"Electric","Damage":100},{"Name":"Thunderbolt","Type":"Electric","Damage":55}],"Weight":{"Minimum":"46.02kg","Maximum":"59.17kg"},"Height":{"Minimum":"1.4m","Maximum":"1.8m"},"Buddy Distance":"5km (Flying)","Base Stamina":"180 stamina points.","Base Attack":"253 attack points.","Base Defense":"188 defense points.","Base Flee Rate":"10% chance to flee.","Pokèmon Class":"This is a LEGENDARY Pokèmon.","LEGENDARY":"Pokèmon Class","MaxCP":2907,"MaxHP":3114},{"Number":"146","Name":"Moltres","Generation":"Generation I","About":"Moltres is a legendary bird Pokémon that has the ability to control fire. If this Pokémon is injured, it is said to dip its body in the molten magma of a volcano to burn and heal itself.","Types":["Fire","Flying"],"Resistant":["Fire","Grass","Fighting","Bug","Steel","Fairy"],"Weaknesses":["Water","Electric","Rock"],"Fast Attack(s)":[{"Name":"Ember","Type":"Fire","Damage":10}],"Special Attack(s)":[{"Name":"Fire Blast","Type":"Fire","Damage":100},{"Name":"Flamethrower","Type":"Fire","Damage":55},{"Name":"Heat Wave","Type":"Fire","Damage":80}],"Weight":{"Minimum":"52.5kg","Maximum":"67.5kg"},"Height":{"Minimum":"1.75m","Maximum":"2.25m"},"Buddy Distance":"5km (Big)","Base Stamina":"180 stamina points.","Base Attack":"251 attack points.","Base Defense":"184 defense points.","Base Flee Rate":"10% chance to flee.","Pokèmon Class":"This is a LEGENDARY Pokèmon.","LEGENDARY":"Pokèmon Class","MaxCP":3028,"MaxHP":3240},{"Number":"147","Name":"Dratini","Generation":"Generation I","About":"Dratini continually molts and sloughs off its old skin. It does so because the life energy within its body steadily builds to reach uncontrollable levels.","Types":["Dragon"],"Resistant":["Fire","Water","Electric","Grass"],"Weaknesses":["Ice","Dragon","Fairy"],"Fast Attack(s)":[{"Name":"Dragon Breath","Type":"Dragon","Damage":6}],"Special Attack(s)":[{"Name":"Aqua Tail","Type":"Water","Damage":45},{"Name":"Twister","Type":"Dragon","Damage":25},{"Name":"Wrap","Type":"Normal","Damage":25}],"Weight":{"Minimum":"2.89kg","Maximum":"3.71kg"},"Height":{"Minimum":"1.57m","Maximum":"2.02m"},"Buddy Distance":"5km (Medium)","Base Stamina":"82 stamina points.","Base Attack":"119 attack points.","Base Defense":"94 defense points.","Base Flee Rate":"9% chance to flee.","Next Evolution Requirements":{"Amount":25,"Name":"Dratini candies"},"Next evolution(s)":[{"Number":148,"Name":"Dragonair"},{"Number":149,"Name":"Dragonite"}],"MaxCP":867,"MaxHP":983},{"Number":"148","Name":"Dragonair","Generation":"Generation I","About":"Dragonair stores an enormous amount of energy inside its body. It is said to alter weather conditions in its vicinity by discharging energy from its crystals on its neck and tail.","Types":["Dragon"],"Resistant":["Fire","Water","Electric","Grass"],"Weaknesses":["Ice","Dragon","Fairy"],"Fast Attack(s)":[{"Name":"Dragon Breath","Type":"Dragon","Damage":6}],"Special Attack(s)":[{"Name":"Aqua Tail","Type":"Water","Damage":45},{"Name":"Dragon Pulse","Type":"Dragon","Damage":65},{"Name":"Wrap","Type":"Normal","Damage":25}],"Weight":{"Minimum":"14.44kg","Maximum":"18.56kg"},"Height":{"Minimum":"3.5m","Maximum":"4.5m"},"Buddy Distance":"5km (Big)","Base Stamina":"122 stamina points.","Base Attack":"163 attack points.","Base Defense":"138 defense points.","Base Flee Rate":"6% chance to flee.","Previous evolution(s)":[{"Number":147,"Name":"Dratini"}],"Next Evolution Requirements":{"Amount":100,"Name":"Dratini candies"},"Next evolution(s)":[{"Number":149,"Name":"Dragonite"}],"MaxCP":1593,"MaxHP":1747},{"Number":"149","Name":"Dragonite","Generation":"Generation I","About":"Dragonite is capable of circling the globe in just 16 hours. It is a kindhearted Pokémon that leads lost and foundering ships in a storm to the safety of land.","Types":["Dragon","Flying"],"Resistant":["Fire","Water","Grass","Fighting","Ground","Bug"],"Weaknesses":["Ice","Rock","Dragon","Fairy"],"Fast Attack(s)":[{"Name":"Dragon Breath","Type":"Dragon","Damage":6},{"Name":"Steel Wing","Type":"Steel","Damage":15}],"Special Attack(s)":[{"Name":"Dragon Claw","Type":"Dragon","Damage":35},{"Name":"Dragon Pulse","Type":"Dragon","Damage":65},{"Name":"Hyper Beam","Type":"Normal","Damage":120}],"Weight":{"Minimum":"183.75kg","Maximum":"236.25kg"},"Height":{"Minimum":"1.93m","Maximum":"2.48m"},"Buddy Distance":"5km (Big)","Base Stamina":"182 stamina points.","Base Attack":"263 attack points.","Base Defense":"201 defense points.","Base Flee Rate":"5% chance to flee.","Previous evolution(s)":[{"Number":147,"Name":"Dratini"},{"Number":148,"Name":"Dragonair"}],"MaxCP":3280,"MaxHP":3500},{"Number":"150","Name":"Mewtwo","Generation":"Generation I","About":"Mewtwo is a Pokémon that was created by genetic manipulation. However, even though the scientific power of humans created this Pokémon's body, they failed to endow Mewtwo with a compassionate heart","Types":["Psychic"],"Resistant":["Fighting","Psychic"],"Weaknesses":["Bug","Ghost","Dark"],"Fast Attack(s)":[{"Name":"Confusion","Type":"Psychic","Damage":15},{"Name":"Psycho Cut","Type":"Psychic","Damage":7}],"Special Attack(s)":[{"Name":"Hyper Beam","Type":"Normal","Damage":120},{"Name":"Psychic","Type":"Psychic","Damage":55},{"Name":"Shadow Ball","Type":"Ghost","Damage":45}],"Weight":{"Minimum":"106.75kg","Maximum":"137.25kg"},"Height":{"Minimum":"1.75m","Maximum":"2.25m"},"Buddy Distance":"5km (Big)","Base Stamina":"212 stamina points.","Base Attack":"330 attack points.","Base Defense":"200 defense points.","Base Flee Rate":"10% chance to flee.","Pokèmon Class":"This is a LEGENDARY Pokèmon.","LEGENDARY":"Pokèmon Class","MaxCP":3904,"MaxHP":4144},{"Number":"151","Name":"Mew","Generation":"Generation I","About":"Mew is said to possess the genetic composition of all Pokémon. It is capable of making itself invisible at will, so it entirely avoids notice even if it approaches people.","Types":["Psychic"],"Resistant":["Fighting","Psychic"],"Weaknesses":["Bug","Ghost","Dark"],"Fast Attack(s)":[{"Name":"Pound","Type":"Normal","Damage":7}],"Special Attack(s)":[{"Name":"Blizzard","Type":"Ice","Damage":100},{"Name":"Dragon Pulse","Type":"Dragon","Damage":65},{"Name":"Earthquake","Type":"Ground","Damage":100},{"Name":"Fire Blast","Type":"Fire","Damage":100},{"Name":"Hyper Beam","Type":"Normal","Damage":120},{"Name":"Psychic","Type":"Psychic","Damage":55},{"Name":"Solar Beam","Type":"Grass","Damage":120},{"Name":"Thunder","Type":"Electric","Damage":100}],"Weight":{"Minimum":"3.5kg","Maximum":"4.5kg"},"Height":{"Minimum":"0.35m","Maximum":"0.45m"},"Buddy Distance":"5km (Medium)","Base Stamina":"200 stamina points.","Base Attack":"210 attack points.","Base Defense":"210 defense points.","Base Flee Rate":"10% chance to flee.","Pokèmon Class":"This is a MYTHIC Pokèmon.","MYTHIC":"Pokèmon Class","MaxCP":3087,"MaxHP":3299},{"Number":"152","Name":"Chikorita","Generation":"Generation II","About":"In battle, Chikorita waves its leaf around to keep the foe at bay. However, a sweet fragrance also wafts from the leaf, becalming the battling Pokémon and creating a cozy, friendly atmosphere all around.","Types":["Grass"],"Resistant":["Water","Electric","Grass","Ground"],"Weaknesses":["Fire","Ice","Poison","Flying","Bug"],"Fast Attack(s)":[{"Name":"Razor Leaf","Type":"Grass","Damage":15},{"Name":"Tackle","Type":"Normal","Damage":12}],"Special Attack(s)":[{"Name":"Struggle","Type":"Normal","Damage":15}],"Weight":{"Minimum":"5.6kg","Maximum":"7.2kg"},"Height":{"Minimum":"0.78m","Maximum":"1m"},"Buddy Distance":"1km (Medium)","Base Stamina":"90 stamina points.","Base Attack":"92 attack points.","Base Defense":"122 defense points.","Base Flee Rate":"5% chance to flee.","Next Evolution Requirements":{"Amount":25,"Name":"Chikorita candies"},"Next evolution(s)":[{"Number":153,"Name":"Bayleef"},{"Number":154,"Name":"Meganium"}]},{"Number":"153","Name":"Bayleef","Generation":"Generation II","About":"Bayleef's neck is ringed by curled-up leaves. Inside each tubular leaf is a small shoot of a tree. The fragrance of this shoot makes people peppy.","Types":["Grass"],"Resistant":["Water","Electric","Grass","Ground"],"Weaknesses":["Fire","Ice","Poison","Flying","Bug"],"Fast Attack(s)":[{"Name":"Razor Leaf","Type":"Grass","Damage":15},{"Name":"Tackle","Type":"Normal","Damage":12}],"Special Attack(s)":[{"Name":"Struggle","Type":"Normal","Damage":15}],"Weight":{"Minimum":"13.83kg","Maximum":"17.78kg"},"Height":{"Minimum":"1.04m","Maximum":"1.34m"},"Buddy Distance":"1km (Medium)","Base Stamina":"120 stamina points.","Base Attack":"122 attack points.","Base Defense":"155 defense points.","Base Flee Rate":"5% chance to flee.","Previous evolution(s)":[{"Number":152,"Name":"Chikorita"}],"Next Evolution Requirements":{"Amount":100,"Name":"Chikorita candies"},"Next evolution(s)":[{"Number":154,"Name":"Meganium"}]},{"Number":"154","Name":"Meganium","Generation":"Generation II","About":"The fragrance of Meganium's flower soothes and calms emotions. In battle, this Pokémon gives off more of its becalming scent to blunt the foe's fighting spirit.","Types":["Grass"],"Resistant":["Water","Electric","Grass","Ground"],"Weaknesses":["Fire","Ice","Poison","Flying","Bug"],"Fast Attack(s)":[{"Name":"Razor Leaf","Type":"Grass","Damage":15},{"Name":"Vine Whip","Type":"Grass","Damage":7}],"Special Attack(s)":[{"Name":"Struggle","Type":"Normal","Damage":15}],"Weight":{"Minimum":"87.94kg","Maximum":"113.06kg"},"Height":{"Minimum":"1.57m","Maximum":"2.02m"},"Buddy Distance":"1km (Medium)","Base Stamina":"160 stamina points.","Base Attack":"168 attack points.","Base Defense":"202 defense points.","Base Flee Rate":"5% chance to flee.","Previous evolution(s)":[{"Number":152,"Name":"Chikorita"},{"Number":153,"Name":"Bayleef"}]},{"Number":"155","Name":"Cyndaquil","Generation":"Generation II","About":"Cyndaquil protects itself by flaring up the flames on its back. The flames are vigorous if the Pokémon is angry. However, if it is tired, the flames splutter fitfully with incomplete combustion.","Types":["Fire"],"Resistant":["Fire","Grass","Ice","Bug","Steel","Fairy"],"Weaknesses":["Water","Ground","Rock"],"Fast Attack(s)":[{"Name":"Ember","Type":"Fire","Damage":10},{"Name":"Tackle","Type":"Normal","Damage":12}],"Special Attack(s)":[{"Name":"Struggle","Type":"Normal","Damage":15}],"Weight":{"Minimum":"6.91kg","Maximum":"8.89kg"},"Height":{"Minimum":"0.45m","Maximum":"0.57m"},"Buddy Distance":"1km (Medium)","Base Stamina":"78 stamina points.","Base Attack":"116 attack points.","Base Defense":"96 defense points.","Base Flee Rate":"5% chance to flee.","Next evolution(s)":[{"Number":156,"Name":"Quilava"},{"Number":157,"Name":"Typhlosion"}]},{"Number":"156","Name":"Quilava","Generation":"Generation II","About":"Quilava keeps its foes at bay with the intensity of its flames and gusts of superheated air. This Pokémon applies its outstanding nimbleness to dodge attacks even while scorching the foe with flames.","Types":["Fire"],"Resistant":["Fire","Grass","Ice","Bug","Steel","Fairy"],"Weaknesses":["Water","Ground","Rock"],"Fast Attack(s)":[{"Name":"Ember","Type":"Fire","Damage":10},{"Name":"Tackle","Type":"Normal","Damage":12}],"Special Attack(s)":[{"Name":"Struggle","Type":"Normal","Damage":15}],"Weight":{"Minimum":"16.63kg","Maximum":"21.38kg"},"Height":{"Minimum":"0.78m","Maximum":"1m"},"Buddy Distance":"1km (Medium)","Base Stamina":"116 stamina points.","Base Attack":"158 attack points.","Base Defense":"129 defense points.","Base Flee Rate":"5% chance to flee.","Previous evolution(s)":[{"Number":155,"Name":"Cyndaquil"}],"Next evolution(s)":[{"Number":157,"Name":"Typhlosion"}]},{"Number":"157","Name":"Typhlosion","Generation":"Generation II","About":"Typhlosion obscures itself behind a shimmering heat haze that it creates using its intensely hot flames. This Pokémon creates blazing explosive blasts that burn everything to cinders.","Types":["Fire"],"Resistant":["Fire","Grass","Ice","Bug","Steel","Fairy"],"Weaknesses":["Water","Ground","Rock"],"Fast Attack(s)":[{"Name":"Ember","Type":"Fire","Damage":10},{"Name":"Shadow Claw","Type":"Ghost","Damage":11}],"Special Attack(s)":[{"Name":"Struggle","Type":"Normal","Damage":15}],"Weight":{"Minimum":"69.56kg","Maximum":"89.44kg"},"Height":{"Minimum":"1.49m","Maximum":"1.91m"},"Buddy Distance":"1km (Medium)","Base Stamina":"156 stamina points.","Base Attack":"223 attack points.","Base Defense":"176 defense points.","Base Flee Rate":"5% chance to flee.","Previous evolution(s)":[{"Number":155,"Name":"Cyndaquil"},{"Number":156,"Name":"Quilava"}]},{"Number":"158","Name":"Totodile","Generation":"Generation II","About":"Despite the smallness of its body, Totodile's jaws are very powerful. While the Pokémon may think it is just playfully nipping, its bite has enough power to cause serious injury.","Types":["Water"],"Resistant":["Fire","Water","Ice","Steel"],"Weaknesses":["Electric","Grass"],"Fast Attack(s)":[{"Name":"Scratch","Type":"Normal","Damage":6},{"Name":"Water Gun","Type":"Water","Damage":6}],"Special Attack(s)":[{"Name":"Struggle","Type":"Normal","Damage":15}],"Weight":{"Minimum":"8.31kg","Maximum":"10.69kg"},"Height":{"Minimum":"0.53m","Maximum":"0.69m"},"Buddy Distance":"1km (Medium)","Base Stamina":"100 stamina points.","Base Attack":"117 attack points.","Base Defense":"116 defense points.","Base Flee Rate":"5% chance to flee.","Next evolution(s)":[{"Number":159,"Name":"Croconaw"},{"Number":160,"Name":"Feraligatr"}]},{"Number":"159","Name":"Croconaw","Generation":"Generation II","About":"Once Croconaw has clamped its jaws on its foe, it will absolutely not let go. Because the tips of its fangs are forked back like barbed fishhooks, they become impossible to remove when they have sunk in.","Types":["Water"],"Resistant":["Fire","Water","Ice","Steel"],"Weaknesses":["Electric","Grass"],"Fast Attack(s)":[{"Name":"Scratch","Type":"Normal","Damage":6},{"Name":"Water Gun","Type":"Water","Damage":6}],"Special Attack(s)":[{"Name":"Struggle","Type":"Normal","Damage":15}],"Weight":{"Minimum":"21.88kg","Maximum":"28.13kg"},"Height":{"Minimum":"0.95m","Maximum":"1.23m"},"Buddy Distance":"1km (Medium)","Base Stamina":"130 stamina points.","Base Attack":"150 attack points.","Base Defense":"151 defense points.","Base Flee Rate":"5% chance to flee.","Previous evolution(s)":[{"Number":158,"Name":"Totodile"}],"Next evolution(s)":[{"Number":160,"Name":"Feraligatr"}]},{"Number":"160","Name":"Feraligatr","Generation":"Generation II","About":"Feraligatr intimidates its foes by opening its huge mouth. In battle, it will kick the ground hard with its thick and powerful hind legs to charge at the foe at an incredible speed.","Types":["Water"],"Resistant":["Fire","Water","Ice","Steel"],"Weaknesses":["Electric","Grass"],"Fast Attack(s)":[{"Name":"Bite","Type":"Dark","Damage":6},{"Name":"Water Gun","Type":"Water","Damage":6}],"Special Attack(s)":[{"Name":"Struggle","Type":"Normal","Damage":15}],"Weight":{"Minimum":"77.7kg","Maximum":"99.9kg"},"Height":{"Minimum":"2.02m","Maximum":"2.6m"},"Buddy Distance":"1km (Medium)","Base Stamina":"170 stamina points.","Base Attack":"205 attack points.","Base Defense":"197 defense points.","Base Flee Rate":"5% chance to flee.","Previous evolution(s)":[{"Number":158,"Name":"Totodile"},{"Number":159,"Name":"Croconaw"}]},{"Number":"161","Name":"Sentret","Generation":"Generation II","About":"When Sentret sleeps, it does so while another stands guard. The sentry wakes the others at the first sign of danger. When this Pokémon becomes separated from its pack, it becomes incapable of sleep due to fear.","Types":["Normal"],"Resistant":["Ghost"],"Weaknesses":["Fighting"],"Fast Attack(s)":[{"Name":"Quick Attack","Type":"Normal","Damage":10},{"Name":"Scratch","Type":"Normal","Damage":6}],"Special Attack(s)":[{"Name":"Struggle","Type":"Normal","Damage":15}],"Weight":{"Minimum":"5.25kg","Maximum":"6.75kg"},"Height":{"Minimum":"0.69m","Maximum":"0.89m"},"Buddy Distance":"1km (Medium)","Base Stamina":"70 stamina points.","Base Attack":"79 attack points.","Base Defense":"77 defense points.","Base Flee Rate":"5% chance to flee.","Next evolution(s)":[{"Number":162,"Name":"Furret"}]},{"Number":"162","Name":"Furret","Generation":"Generation II","About":"Furret has a very slim build. When under attack, it can slickly squirm through narrow spaces and get away. In spite of its short limbs, this Pokémon is very nimble and fleet.","Types":["Normal"],"Resistant":["Ghost"],"Weaknesses":["Fighting"],"Fast Attack(s)":[{"Name":"Quick Attack","Type":"Normal","Damage":10},{"Name":"Sucker Punch","Type":"Dark","Damage":7}],"Special Attack(s)":[{"Name":"Struggle","Type":"Normal","Damage":15}],"Weight":{"Minimum":"28.44kg","Maximum":"36.56kg"},"Height":{"Minimum":"1.57m","Maximum":"2.02m"},"Buddy Distance":"1km (Medium)","Base Stamina":"170 stamina points.","Base Attack":"148 attack points.","Base Defense":"130 defense points.","Base Flee Rate":"5% chance to flee.","Previous evolution(s)":[{"Number":161,"Name":"Sentret"}]},{"Number":"163","Name":"Hoothoot","Generation":"Generation II","About":"Hoothoot has an internal organ that senses and tracks the earth's rotation. Using this special organ, this Pokémon begins hooting at precisely the same time every day.","Types":["Normal","Flying"],"Resistant":["Grass","Ground","Bug","Ghost"],"Weaknesses":["Electric","Ice","Rock"],"Fast Attack(s)":[{"Name":"Peck","Type":"Flying","Damage":10},{"Name":"Tackle","Type":"Normal","Damage":12}],"Special Attack(s)":[{"Name":"Struggle","Type":"Normal","Damage":15}],"Weight":{"Minimum":"18.55kg","Maximum":"23.85kg"},"Height":{"Minimum":"0.62m","Maximum":"0.8m"},"Buddy Distance":"1km (Medium)","Base Stamina":"120 stamina points.","Base Attack":"67 attack points.","Base Defense":"101 defense points.","Base Flee Rate":"5% chance to flee.","Next evolution(s)":[{"Number":164,"Name":"Noctowl"}]},{"Number":"164","Name":"Noctowl","Generation":"Generation II","About":"Noctowl never fails at catching prey in darkness. This Pokémon owes its success to its superior vision that allows it to see in minimal light, and to its soft, supple wings that make no sound in flight.","Types":["Normal","Flying"],"Resistant":["Grass","Ground","Bug","Ghost"],"Weaknesses":["Electric","Ice","Rock"],"Fast Attack(s)":[{"Name":"Peck","Type":"Flying","Damage":10},{"Name":"Tackle","Type":"Normal","Damage":12}],"Special Attack(s)":[{"Name":"Struggle","Type":"Normal","Damage":15}],"Weight":{"Minimum":"35.7kg","Maximum":"45.9kg"},"Height":{"Minimum":"1.4m","Maximum":"1.8m"},"Buddy Distance":"1km (Medium)","Base Stamina":"200 stamina points.","Base Attack":"145 attack points.","Base Defense":"179 defense points.","Base Flee Rate":"5% chance to flee.","Previous evolution(s)":[{"Number":163,"Name":"Hoothoot"}]},{"Number":"165","Name":"Ledyba","Generation":"Generation II","About":"Ledyba secretes an aromatic fluid from where its legs join its body. This fluid is used for communicating with others. This Pokémon conveys its feelings to others by altering the fluid's scent.","Types":["Bug","Flying"],"Resistant":["Grass","Fighting","Ground","Bug"],"Weaknesses":["Fire","Electric","Ice","Flying","Rock"],"Fast Attack(s)":[{"Name":"Bug Bite","Type":"Bug","Damage":5},{"Name":"Tackle","Type":"Normal","Damage":12}],"Special Attack(s)":[{"Name":"Struggle","Type":"Normal","Damage":15}],"Weight":{"Minimum":"9.45kg","Maximum":"12.15kg"},"Height":{"Minimum":"0.87m","Maximum":"1.11m"},"Buddy Distance":"1km (Medium)","Base Stamina":"80 stamina points.","Base Attack":"72 attack points.","Base Defense":"142 defense points.","Base Flee Rate":"5% chance to flee.","Next evolution(s)":[{"Number":166,"Name":"Ledian"}]},{"Number":"166","Name":"Ledian","Generation":"Generation II","About":"It is said that in lands with clean air, where the stars fill the sky, there live Ledian in countless numbers. There is a good reason for this—the Pokémon uses the light of the stars as its energy.","Types":["Bug","Flying"],"Resistant":["Grass","Fighting","Ground","Bug"],"Weaknesses":["Fire","Electric","Ice","Flying","Rock"],"Fast Attack(s)":[{"Name":"Bug Bite","Type":"Bug","Damage":5},{"Name":"Tackle","Type":"Normal","Damage":12}],"Special Attack(s)":[{"Name":"Struggle","Type":"Normal","Damage":15}],"Weight":{"Minimum":"31.15kg","Maximum":"40.05kg"},"Height":{"Minimum":"1.22m","Maximum":"1.57m"},"Buddy Distance":"1km (Medium)","Base Stamina":"110 stamina points.","Base Attack":"107 attack points.","Base Defense":"209 defense points.","Base Flee Rate":"5% chance to flee.","Previous evolution(s)":[{"Number":165,"Name":"Ledyba"}]},{"Number":"167","Name":"Spinarak","Generation":"Generation II","About":"The web spun by Spinarak can be considered its second nervous system. It is said that this Pokémon can determine what kind of prey is touching its web just by the tiny vibrations it feels through the web's strands.","Types":["Bug","Poison"],"Resistant":["Grass","Fighting","Poison","Bug","Fairy"],"Weaknesses":["Fire","Flying","Psychic","Rock"],"Fast Attack(s)":[{"Name":"Bug Bite","Type":"Bug","Damage":5},{"Name":"Poison Sting","Type":"Poison","Damage":6}],"Special Attack(s)":[{"Name":"Struggle","Type":"Normal","Damage":15}],"Weight":{"Minimum":"7.44kg","Maximum":"9.56kg"},"Height":{"Minimum":"0.45m","Maximum":"0.57m"},"Buddy Distance":"1km (Medium)","Base Stamina":"80 stamina points.","Base Attack":"105 attack points.","Base Defense":"73 defense points.","Base Flee Rate":"5% chance to flee.","Next evolution(s)":[{"Number":168,"Name":"Ariados"}]},{"Number":"168","Name":"Ariados","Generation":"Generation II","About":"Ariados's feet are tipped with tiny hooked claws that enable it to scuttle on ceilings and vertical walls. This Pokémon constricts the foe with thin and strong silk webbing.","Types":["Bug","Poison"],"Resistant":["Grass","Fighting","Poison","Bug","Fairy"],"Weaknesses":["Fire","Flying","Psychic","Rock"],"Fast Attack(s)":[{"Name":"Bug Bite","Type":"Bug","Damage":5},{"Name":"Poison Sting","Type":"Poison","Damage":6}],"Special Attack(s)":[{"Name":"Struggle","Type":"Normal","Damage":15}],"Weight":{"Minimum":"29.31kg","Maximum":"37.69kg"},"Height":{"Minimum":"0.95m","Maximum":"1.23m"},"Buddy Distance":"1km (Medium)","Base Stamina":"140 stamina points.","Base Attack":"161 attack points.","Base Defense":"128 defense points.","Base Flee Rate":"5% chance to flee.","Previous evolution(s)":[{"Number":167,"Name":"Spinarak"}]},{"Number":"169","Name":"Crobat","Generation":"Generation II","About":"If this Pokémon is flying by fluttering only a pair of wings on either the forelegs or hind legs, it's proof that Crobat has been flying a long distance. It switches the wings it uses if it is tired.","Types":["Poison","Flying"],"Resistant":["Grass","Fighting","Poison","Bug","Fairy"],"Weaknesses":["Electric","Ice","Psychic","Rock"],"Fast Attack(s)":[{"Name":"Bite","Type":"Dark","Damage":6},{"Name":"Wing Attack","Type":"Flying","Damage":9}],"Special Attack(s)":[{"Name":"Struggle","Type":"Normal","Damage":15}],"Weight":{"Minimum":"65.63kg","Maximum":"84.38kg"},"Height":{"Minimum":"1.57m","Maximum":"2.02m"},"Buddy Distance":"1km (Medium)","Base Stamina":"170 stamina points.","Base Attack":"194 attack points.","Base Defense":"178 defense points.","Base Flee Rate":"5% chance to flee.","Previous evolution(s)":[{"Number":41,"Name":"Zubat"},{"Number":42,"Name":"Golbat"}]},{"Number":"170","Name":"Chinchou","Generation":"Generation II","About":"Chinchou lets loose positive and negative electrical charges from its two antennas to make its prey faint. This Pokémon flashes its electric lights to exchange signals with others.","Types":["Water","Electric"],"Resistant":["Fire","Water","Ice","Flying","Steel"],"Weaknesses":["Grass","Ground"],"Fast Attack(s)":[{"Name":"Bubble","Type":"Water","Damage":25},{"Name":"Spark","Type":"Electric","Damage":7}],"Special Attack(s)":[{"Name":"Struggle","Type":"Normal","Damage":15}],"Weight":{"Minimum":"10.5kg","Maximum":"13.5kg"},"Height":{"Minimum":"0.45m","Maximum":"0.57m"},"Buddy Distance":"1km (Medium)","Base Stamina":"150 stamina points.","Base Attack":"106 attack points.","Base Defense":"106 defense points.","Base Flee Rate":"5% chance to flee.","Next evolution(s)":[{"Number":171,"Name":"Lanturn"}]},{"Number":"171","Name":"Lanturn","Generation":"Generation II","About":"Lanturn is nicknamed “the deep-sea star for its illuminated antenna. This Pokémon produces light by causing a chemical reaction between bacteria and its bodily fluids inside the antenna.\"","Types":["Water","Electric"],"Resistant":["Fire","Water","Ice","Flying","Steel"],"Weaknesses":["Grass","Ground"],"Fast Attack(s)":[{"Name":"Spark","Type":"Electric","Damage":7},{"Name":"Water Gun","Type":"Water","Damage":6}],"Special Attack(s)":[{"Name":"Struggle","Type":"Normal","Damage":15}],"Weight":{"Minimum":"19.69kg","Maximum":"25.31kg"},"Height":{"Minimum":"1.04m","Maximum":"1.34m"},"Buddy Distance":"1km (Medium)","Base Stamina":"250 stamina points.","Base Attack":"146 attack points.","Base Defense":"146 defense points.","Base Flee Rate":"5% chance to flee.","Previous evolution(s)":[{"Number":170,"Name":"Chinchou"}]},{"Number":"172","Name":"Pichu","Generation":"Generation II","About":"Pichu charges itself with electricity more easily on days with thunderclouds or when the air is very dry. You can hear the crackling of static electricity coming off this Pokémon.","Types":["Electric"],"Resistant":["Electric","Flying","Steel"],"Weaknesses":["Ground"],"Fast Attack(s)":[{"Name":"Quick Attack","Type":"Normal","Damage":10},{"Name":"Thunder Shock","Type":"Electric","Damage":5}],"Special Attack(s)":[{"Name":"Disarming Voice","Type":"Fairy","Damage":25},{"Name":"Thunder Punch","Type":"Electric","Damage":40},{"Name":"Thunderbolt","Type":"Electric","Damage":55}],"Weight":{"Minimum":"1.75kg","Maximum":"2.25kg"},"Height":{"Minimum":"0.26m","Maximum":"0.34m"},"Buddy Distance":"1km (Medium)","Base Stamina":"40 stamina points.","Base Attack":"77 attack points.","Base Defense":"63 defense points.","Base Flee Rate":"5% chance to flee.","Next Evolution Requirements":{"Amount":25,"Name":"Pikachu candies"},"Next evolution(s)":[{"Number":25,"Name":"Pikachu"},{"Number":26,"Name":"Raichu"}]},{"Number":"173","Name":"Cleffa","Generation":"Generation II","About":"On nights with many shooting stars, Cleffa can be seen dancing in a ring. They dance through the night and stop only at the break of day, when these Pokémon quench their thirst with the morning dew.","Types":["Fairy"],"Resistant":["Fighting","Bug","Dragon","Dark"],"Weaknesses":["Poison","Steel"],"Fast Attack(s)":[{"Name":"Pound","Type":"Normal","Damage":7},{"Name":"Zen Headbutt","Type":"Psychic","Damage":12}],"Special Attack(s)":[{"Name":"Body Slam","Type":"Normal","Damage":40},{"Name":"Psychic","Type":"Psychic","Damage":55},{"Name":"Signal Beam","Type":"Bug","Damage":45}],"Weight":{"Minimum":"2.63kg","Maximum":"3.38kg"},"Height":{"Minimum":"0.26m","Maximum":"0.34m"},"Buddy Distance":"1km (Medium)","Base Stamina":"100 stamina points.","Base Attack":"75 attack points.","Base Defense":"91 defense points.","Base Flee Rate":"5% chance to flee.","Next Evolution Requirements":{"Amount":25,"Name":"Clefairy candies"},"Next evolution(s)":[{"Number":35,"Name":"Clefairy"},{"Number":36,"Name":"Clefable"}]},{"Number":"174","Name":"Igglybuff","Generation":"Generation II","About":"Igglybuff's vocal cords are not sufficiently developed. It would hurt its throat if it were to sing too much. This Pokémon gargles with freshwater from a clean stream.","Types":["Normal","Fairy"],"Resistant":["Bug","Ghost","Dragon","Dark"],"Weaknesses":["Poison","Steel"],"Fast Attack(s)":[{"Name":"Feint Attack","Type":"Dark","Damage":12},{"Name":"Pound","Type":"Normal","Damage":7}],"Special Attack(s)":[{"Name":"Body Slam","Type":"Normal","Damage":40},{"Name":"Psychic","Type":"Psychic","Damage":55},{"Name":"Shadow Ball","Type":"Ghost","Damage":45}],"Weight":{"Minimum":"0.88kg","Maximum":"1.13kg"},"Height":{"Minimum":"0.26m","Maximum":"0.34m"},"Buddy Distance":"1km (Medium)","Base Stamina":"180 stamina points.","Base Attack":"69 attack points.","Base Defense":"34 defense points.","Base Flee Rate":"5% chance to flee.","Next Evolution Requirements":{"Amount":25,"Name":"Jigglypuff candies"},"Next evolution(s)":[{"Number":39,"Name":"Jigglypuff"},{"Number":40,"Name":"Wigglytuff"}]},{"Number":"175","Name":"Togepi","Generation":"Generation II","About":"As its energy, Togepi uses the positive emotions of compassion and pleasure exuded by people and Pokémon. This Pokémon stores up feelings of happiness inside its shell, then shares them with others.","Types":["Fairy"],"Resistant":["Fighting","Bug","Dragon","Dark"],"Weaknesses":["Poison","Steel"],"Fast Attack(s)":[{"Name":"Peck","Type":"Flying","Damage":10},{"Name":"Zen Headbutt","Type":"Psychic","Damage":12}],"Special Attack(s)":[{"Name":"Ancient Power","Type":"Rock","Damage":35},{"Name":"Dazzling Gleam","Type":"Fairy","Damage":55},{"Name":"Psyshock","Type":"Psychic","Damage":40}],"Weight":{"Minimum":"1.31kg","Maximum":"1.69kg"},"Height":{"Minimum":"0.26m","Maximum":"0.34m"},"Buddy Distance":"5km (Medium)","Base Stamina":"70 stamina points.","Base Attack":"67 attack points.","Base Defense":"116 defense points.","Base Flee Rate":"5% chance to flee.","Next Evolution Requirements":{"Amount":50,"Name":"Togepi candies"},"Next evolution(s)":[{"Number":176,"Name":"Togetic"}]},{"Number":"176","Name":"Togetic","Generation":"Generation II","About":"Togetic is said to be a Pokémon that brings good fortune. When the Pokémon spots someone who is pure of heart, it is said to appear and share its happiness with that person.","Types":["Fairy","Flying"],"Resistant":["Grass","Fighting","Ground","Bug","Dragon","Dark"],"Weaknesses":["Electric","Ice","Poison","Rock","Steel"],"Fast Attack(s)":[{"Name":"Steel Wing","Type":"Steel","Damage":15},{"Name":"Zen Headbutt","Type":"Psychic","Damage":12}],"Special Attack(s)":[{"Name":"Aerial Ace","Type":"Flying","Damage":30},{"Name":"Ancient Power","Type":"Rock","Damage":35},{"Name":"Dazzling Gleam","Type":"Fairy","Damage":55}],"Weight":{"Minimum":"2.8kg","Maximum":"3.6kg"},"Height":{"Minimum":"0.53m","Maximum":"0.69m"},"Buddy Distance":"5km (Medium)","Base Stamina":"110 stamina points.","Base Attack":"139 attack points.","Base Defense":"191 defense points.","Base Flee Rate":"5% chance to flee.","Previous evolution(s)":[{"Number":175,"Name":"Togepi"}]},{"Number":"177","Name":"Natu","Generation":"Generation II","About":"Natu cannot fly because its wings are not yet fully grown. If your eyes meet with this Pokémon's eyes, it will stare back intently at you. But if you move even slightly, it will hop away to safety.","Types":["Psychic","Flying"],"Resistant":["Grass","Fighting","Ground","Psychic"],"Weaknesses":["Electric","Ice","Rock","Ghost","Dark"],"Fast Attack(s)":[{"Name":"Peck","Type":"Flying","Damage":10}],"Special Attack(s)":[{"Name":"Struggle","Type":"Normal","Damage":15}],"Weight":{"Minimum":"1.75kg","Maximum":"2.25kg"},"Height":{"Minimum":"0.18m","Maximum":"0.23m"},"Buddy Distance":"1km (Medium)","Base Stamina":"80 stamina points.","Base Attack":"134 attack points.","Base Defense":"89 defense points.","Base Flee Rate":"5% chance to flee.","Next evolution(s)":[{"Number":178,"Name":"Xatu"}]},{"Number":"178","Name":"Xatu","Generation":"Generation II","About":"Xatu stands rooted and still in one spot all day long. People believe that this Pokémon does so out of fear of the terrible things it has foreseen in the future.","Types":["Psychic","Flying"],"Resistant":["Grass","Fighting","Ground","Psychic"],"Weaknesses":["Electric","Ice","Rock","Ghost","Dark"],"Fast Attack(s)":[{"Name":"Tackle","Type":"Normal","Damage":12}],"Special Attack(s)":[{"Name":"Struggle","Type":"Normal","Damage":15}],"Weight":{"Minimum":"13.13kg","Maximum":"16.88kg"},"Height":{"Minimum":"1.31m","Maximum":"1.69m"},"Buddy Distance":"1km (Medium)","Base Stamina":"130 stamina points.","Base Attack":"192 attack points.","Base Defense":"146 defense points.","Base Flee Rate":"5% chance to flee.","Previous evolution(s)":[{"Number":177,"Name":"Natu"}]},{"Number":"179","Name":"Mareep","Generation":"Generation II","About":"Mareep's fluffy coat of wool rubs together and builds a static charge. The more static electricity is charged, the more brightly the lightbulb at the tip of its tail glows.","Types":["Electric"],"Resistant":["Electric","Flying","Steel"],"Weaknesses":["Ground"],"Fast Attack(s)":[{"Name":"Tackle","Type":"Normal","Damage":12}],"Special Attack(s)":[{"Name":"Struggle","Type":"Normal","Damage":15}],"Weight":{"Minimum":"6.83kg","Maximum":"8.78kg"},"Height":{"Minimum":"0.53m","Maximum":"0.69m"},"Buddy Distance":"1km (Medium)","Base Stamina":"110 stamina points.","Base Attack":"114 attack points.","Base Defense":"82 defense points.","Base Flee Rate":"5% chance to flee.","Next evolution(s)":[{"Number":180,"Name":"Flaaffy"},{"Number":181,"Name":"Ampharos"}]},{"Number":"180","Name":"Flaaffy","Generation":"Generation II","About":"Flaaffy's wool quality changes so that it can generate a high amount of static electricity with a small amount of wool. The bare and slick parts of its hide are shielded against electricity.","Types":["Electric"],"Resistant":["Electric","Flying","Steel"],"Weaknesses":["Ground"],"Fast Attack(s)":[{"Name":"Tackle","Type":"Normal","Damage":12}],"Special Attack(s)":[{"Name":"Struggle","Type":"Normal","Damage":15}],"Weight":{"Minimum":"11.64kg","Maximum":"14.96kg"},"Height":{"Minimum":"0.69m","Maximum":"0.89m"},"Buddy Distance":"1km (Medium)","Base Stamina":"140 stamina points.","Base Attack":"145 attack points.","Base Defense":"112 defense points.","Base Flee Rate":"5% chance to flee.","Previous evolution(s)":[{"Number":179,"Name":"Mareep"}],"Next evolution(s)":[{"Number":181,"Name":"Ampharos"}]},{"Number":"181","Name":"Ampharos","Generation":"Generation II","About":"Ampharos gives off so much light that it can be seen even from space. People in the old days used the light of this Pokémon to send signals back and forth with others far away.","Types":["Electric"],"Resistant":["Electric","Flying","Steel"],"Weaknesses":["Ground"],"Fast Attack(s)":[{"Name":"Tackle","Type":"Normal","Damage":12}],"Special Attack(s)":[{"Name":"Struggle","Type":"Normal","Damage":15}],"Weight":{"Minimum":"53.81kg","Maximum":"69.19kg"},"Height":{"Minimum":"1.22m","Maximum":"1.57m"},"Buddy Distance":"1km (Medium)","Base Stamina":"180 stamina points.","Base Attack":"211 attack points.","Base Defense":"172 defense points.","Base Flee Rate":"5% chance to flee.","Previous evolution(s)":[{"Number":179,"Name":"Mareep"},{"Number":180,"Name":"Flaaffy"}]},{"Number":"182","Name":"Bellossom","Generation":"Generation II","About":"When Bellossom gets exposed to plenty of sunlight, the leaves ringing its body begin to spin around. This Pokémon's dancing is renowned in the southern lands.","Types":["Grass"],"Resistant":["Water","Electric","Grass","Ground"],"Weaknesses":["Fire","Ice","Poison","Flying","Bug"],"Fast Attack(s)":[{"Name":"Tackle","Type":"Normal","Damage":12}],"Special Attack(s)":[{"Name":"Struggle","Type":"Normal","Damage":15}],"Weight":{"Minimum":"5.08kg","Maximum":"6.53kg"},"Height":{"Minimum":"0.36m","Maximum":"0.46m"},"Buddy Distance":"1km (Medium)","Base Stamina":"150 stamina points.","Base Attack":"169 attack points.","Base Defense":"189 defense points.","Base Flee Rate":"5% chance to flee.","Previous evolution(s)":[{"Number":43,"Name":"Oddish"},{"Number":44,"Name":"Gloom"}]},{"Number":"183","Name":"Marill","Generation":"Generation II","About":"Marill's oil-filled tail acts much like a life preserver. If you see just its tail bobbing on the water's surface, it's a sure indication that this Pokémon is diving beneath the water to feed on aquatic plants.","Types":["Water","Fairy"],"Resistant":["Fire","Water","Ice","Fighting","Bug","Dragon","Dark"],"Weaknesses":["Electric","Grass","Poison"],"Fast Attack(s)":[{"Name":"Tackle","Type":"Normal","Damage":12}],"Special Attack(s)":[{"Name":"Struggle","Type":"Normal","Damage":15}],"Weight":{"Minimum":"7.44kg","Maximum":"9.56kg"},"Height":{"Minimum":"0.36m","Maximum":"0.46m"},"Buddy Distance":"1km (Medium)","Base Stamina":"140 stamina points.","Base Attack":"37 attack points.","Base Defense":"93 defense points.","Base Flee Rate":"5% chance to flee.","Next evolution(s)":[{"Number":184,"Name":"Azumarill"}]},{"Number":"184","Name":"Azumarill","Generation":"Generation II","About":"Azumarill's long ears are indispensable sensors. By focusing its hearing, this Pokémon can identify what kinds of prey are around, even in rough and fast-running rivers.","Types":["Water","Fairy"],"Resistant":["Fire","Water","Ice","Fighting","Bug","Dragon","Dark"],"Weaknesses":["Electric","Grass","Poison"],"Fast Attack(s)":[{"Name":"Tackle","Type":"Normal","Damage":12}],"Special Attack(s)":[{"Name":"Struggle","Type":"Normal","Damage":15}],"Weight":{"Minimum":"24.94kg","Maximum":"32.06kg"},"Height":{"Minimum":"0.69m","Maximum":"0.89m"},"Buddy Distance":"1km (Medium)","Base Stamina":"200 stamina points.","Base Attack":"112 attack points.","Base Defense":"152 defense points.","Base Flee Rate":"5% chance to flee.","Previous evolution(s)":[{"Number":183,"Name":"Marill"}]},{"Number":"185","Name":"Sudowoodo","Generation":"Generation II","About":"Sudowoodo camouflages itself as a tree to avoid being attacked by enemies. However, because its hands remain green throughout the year, the Pokémon is easily identified as a fake during the winter.","Types":["Rock"],"Resistant":["Normal","Fire","Poison","Flying"],"Weaknesses":["Water","Grass","Fighting","Ground","Steel"],"Fast Attack(s)":[{"Name":"Tackle","Type":"Normal","Damage":12}],"Special Attack(s)":[{"Name":"Struggle","Type":"Normal","Damage":15}],"Weight":{"Minimum":"33.25kg","Maximum":"42.75kg"},"Height":{"Minimum":"1.04m","Maximum":"1.34m"},"Buddy Distance":"1km (Medium)","Base Stamina":"140 stamina points.","Base Attack":"167 attack points.","Base Defense":"198 defense points.","Base Flee Rate":"5% chance to flee."},{"Number":"186","Name":"Politoed","Generation":"Generation II","About":"The curled hair on Politoed's head is proof of its status as a king. It is said that the longer and more curled the hair, the more respect this Pokémon earns from its peers.","Types":["Water"],"Resistant":["Fire","Water","Ice","Steel"],"Weaknesses":["Electric","Grass"],"Fast Attack(s)":[{"Name":"Tackle","Type":"Normal","Damage":12}],"Special Attack(s)":[{"Name":"Struggle","Type":"Normal","Damage":15}],"Weight":{"Minimum":"29.66kg","Maximum":"38.14kg"},"Height":{"Minimum":"9.54m","Maximum":"12.26m"},"Buddy Distance":"1km (Medium)","Base Stamina":"180 stamina points.","Base Attack":"174 attack points.","Base Defense":"192 defense points.","Base Flee Rate":"5% chance to flee.","Previous evolution(s)":[{"Number":60,"Name":"Poliwag"},{"Number":61,"Name":"Poliwhirl"}]},{"Number":"187","Name":"Hoppip","Generation":"Generation II","About":"This Pokémon drifts and floats with the wind. If it senses the approach of strong winds, Hoppip links its leaves with other Hoppip to prepare against being blown away.","Types":["Grass","Flying"],"Resistant":["Water","Grass","Fighting","Ground"],"Weaknesses":["Fire","Ice","Poison","Flying","Rock"],"Fast Attack(s)":[{"Name":"Tackle","Type":"Normal","Damage":12}],"Special Attack(s)":[{"Name":"Struggle","Type":"Normal","Damage":15}],"Weight":{"Minimum":"0.44kg","Maximum":"0.56kg"},"Height":{"Minimum":"0.36m","Maximum":"0.46m"},"Buddy Distance":"1km (Medium)","Base Stamina":"70 stamina points.","Base Attack":"67 attack points.","Base Defense":"101 defense points.","Base Flee Rate":"5% chance to flee.","Next evolution(s)":[{"Number":188,"Name":"Skiploom"},{"Number":189,"Name":"Jumpluff"}]},{"Number":"188","Name":"Skiploom","Generation":"Generation II","About":"Skiploom's flower blossoms when the temperature rises above 64 degrees Fahrenheit. How much the flower opens depends on the temperature. For that reason, this Pokémon is sometimes used as a thermometer.","Types":["Grass","Flying"],"Resistant":["Water","Grass","Fighting","Ground"],"Weaknesses":["Fire","Ice","Poison","Flying","Rock"],"Fast Attack(s)":[{"Name":"Tackle","Type":"Normal","Damage":12}],"Special Attack(s)":[{"Name":"Struggle","Type":"Normal","Damage":15}],"Weight":{"Minimum":"0.88kg","Maximum":"1.13kg"},"Height":{"Minimum":"0.53m","Maximum":"0.69m"},"Buddy Distance":"1km (Medium)","Base Stamina":"110 stamina points.","Base Attack":"91 attack points.","Base Defense":"127 defense points.","Base Flee Rate":"5% chance to flee.","Previous evolution(s)":[{"Number":187,"Name":"Hoppip"}],"Next evolution(s)":[{"Number":189,"Name":"Jumpluff"}]},{"Number":"189","Name":"Jumpluff","Generation":"Generation II","About":"Jumpluff rides warm southern winds to cross the sea and fly to foreign lands. The Pokémon descends to the ground when it encounters cold air while it is floating.","Types":["Grass","Flying"],"Resistant":["Water","Grass","Fighting","Ground"],"Weaknesses":["Fire","Ice","Poison","Flying","Rock"],"Fast Attack(s)":[{"Name":"Tackle","Type":"Normal","Damage":12}],"Special Attack(s)":[{"Name":"Struggle","Type":"Normal","Damage":15}],"Weight":{"Minimum":"2.63kg","Maximum":"3.38kg"},"Height":{"Minimum":"0.69m","Maximum":"0.89m"},"Buddy Distance":"1km (Medium)","Base Stamina":"150 stamina points.","Base Attack":"118 attack points.","Base Defense":"197 defense points.","Base Flee Rate":"5% chance to flee.","Previous evolution(s)":[{"Number":187,"Name":"Hoppip"},{"Number":188,"Name":"Skiploom"}]},{"Number":"190","Name":"Aipom","Generation":"Generation II","About":"Aipom's tail ends in a hand-like appendage that can be cleverly manipulated. However, because the Pokémon uses its tail so much, its real hands have become rather clumsy.","Types":["Normal"],"Resistant":["Ghost"],"Weaknesses":["Fighting"],"Fast Attack(s)":[{"Name":"Tackle","Type":"Normal","Damage":12}],"Special Attack(s)":[{"Name":"Struggle","Type":"Normal","Damage":15}],"Weight":{"Minimum":"10.06kg","Maximum":"12.94kg"},"Height":{"Minimum":"0.69m","Maximum":"0.89m"},"Buddy Distance":"1km (Medium)","Base Stamina":"110 stamina points.","Base Attack":"136 attack points.","Base Defense":"112 defense points.","Base Flee Rate":"5% chance to flee."},{"Number":"191","Name":"Sunkern","Generation":"Generation II","About":"Sunkern tries to move as little as it possibly can. It does so because it tries to conserve all the nutrients it has stored in its body for its evolution. It will not eat a thing, subsisting only on morning dew.","Types":["Grass"],"Resistant":["Water","Electric","Grass","Ground"],"Weaknesses":["Fire","Ice","Poison","Flying","Bug"],"Fast Attack(s)":[{"Name":"Tackle","Type":"Normal","Damage":12}],"Special Attack(s)":[{"Name":"Struggle","Type":"Normal","Damage":15}],"Weight":{"Minimum":"1.57kg","Maximum":"2.02kg"},"Height":{"Minimum":"0.26m","Maximum":"0.34m"},"Buddy Distance":"1km (Medium)","Base Stamina":"60 stamina points.","Base Attack":"55 attack points.","Base Defense":"55 defense points.","Base Flee Rate":"5% chance to flee.","Next evolution(s)":[{"Number":192,"Name":"Sunflora"}]},{"Number":"192","Name":"Sunflora","Generation":"Generation II","About":"Sunflora converts solar energy into nutrition. It moves around actively in the daytime when it is warm. It stops moving as soon as the sun goes down for the night.","Types":["Grass"],"Resistant":["Water","Electric","Grass","Ground"],"Weaknesses":["Fire","Ice","Poison","Flying","Bug"],"Fast Attack(s)":[{"Name":"Tackle","Type":"Normal","Damage":12}],"Special Attack(s)":[{"Name":"Struggle","Type":"Normal","Damage":15}],"Weight":{"Minimum":"7.44kg","Maximum":"9.56kg"},"Height":{"Minimum":"0.69m","Maximum":"0.89m"},"Buddy Distance":"1km (Medium)","Base Stamina":"150 stamina points.","Base Attack":"185 attack points.","Base Defense":"148 defense points.","Base Flee Rate":"5% chance to flee.","Previous evolution(s)":[{"Number":191,"Name":"Sunkern"}]},{"Number":"193","Name":"Yanma","Generation":"Generation II","About":"Yanma is capable of seeing 360 degrees without having to move its eyes. It is a great flier that is adept at making sudden stops and turning midair. This Pokémon uses its flying ability to quickly chase down targeted prey.","Types":["Bug","Flying"],"Resistant":["Grass","Fighting","Ground","Bug"],"Weaknesses":["Fire","Electric","Ice","Flying","Rock"],"Fast Attack(s)":[{"Name":"Tackle","Type":"Normal","Damage":12}],"Special Attack(s)":[{"Name":"Struggle","Type":"Normal","Damage":15}],"Weight":{"Minimum":"33.25kg","Maximum":"42.75kg"},"Height":{"Minimum":"1.04m","Maximum":"1.34m"},"Buddy Distance":"1km (Medium)","Base Stamina":"130 stamina points.","Base Attack":"154 attack points.","Base Defense":"94 defense points.","Base Flee Rate":"5% chance to flee."},{"Number":"194","Name":"Wooper","Generation":"Generation II","About":"Wooper usually lives in water. However, it occasionally comes out onto land in search of food. On land, it coats its body with a gooey, toxic film.","Types":["Water","Ground"],"Resistant":["Fire","Poison","Rock","Steel"],"Weaknesses":["Grass"],"Fast Attack(s)":[{"Name":"Tackle","Type":"Normal","Damage":12}],"Special Attack(s)":[{"Name":"Struggle","Type":"Normal","Damage":15}],"Weight":{"Minimum":"7.44kg","Maximum":"9.56kg"},"Height":{"Minimum":"0.36m","Maximum":"0.46m"},"Buddy Distance":"1km (Medium)","Base Stamina":"110 stamina points.","Base Attack":"75 attack points.","Base Defense":"75 defense points.","Base Flee Rate":"5% chance to flee.","Next evolution(s)":[{"Number":195,"Name":"Quagsire"}]},{"Number":"195","Name":"Quagsire","Generation":"Generation II","About":"Quagsire hunts for food by leaving its mouth wide open in water and waiting for its prey to blunder in unaware. Because the Pokémon does not move, it does not get very hungry.","Types":["Water","Ground"],"Resistant":["Fire","Poison","Rock","Steel"],"Weaknesses":["Grass"],"Fast Attack(s)":[{"Name":"Tackle","Type":"Normal","Damage":12}],"Special Attack(s)":[{"Name":"Struggle","Type":"Normal","Damage":15}],"Weight":{"Minimum":"65.63kg","Maximum":"84.38kg"},"Height":{"Minimum":"1.22m","Maximum":"1.57m"},"Buddy Distance":"1km (Medium)","Base Stamina":"190 stamina points.","Base Attack":"152 attack points.","Base Defense":"152 defense points.","Base Flee Rate":"5% chance to flee.","Previous evolution(s)":[{"Number":194,"Name":"Wooper"}]},{"Number":"196","Name":"Espeon","Generation":"Generation II","About":"Espeon is extremely loyal to any Trainer it considers to be worthy. It is said that this Pokémon developed its precognitive powers to protect its Trainer from harm.","Types":["Psychic"],"Resistant":["Fighting","Psychic"],"Weaknesses":["Bug","Ghost","Dark"],"Fast Attack(s)":[{"Name":"Confusion","Type":"Psychic","Damage":15},{"Name":"Zen Headbutt","Type":"Psychic","Damage":12}],"Special Attack(s)":[{"Name":"Struggle","Type":"Normal","Damage":15}],"Weight":{"Minimum":"23.19kg","Maximum":"29.81kg"},"Height":{"Minimum":"0.78m","Maximum":"1m"},"Buddy Distance":"5km (Medium)","Base Stamina":"130 stamina points.","Base Attack":"261 attack points.","Base Defense":"194 defense points.","Base Flee Rate":"5% chance to flee.","Previous evolution(s)":[{"Number":133,"Name":"Eevee"}]},{"Number":"197","Name":"Umbreon","Generation":"Generation II","About":"Umbreon evolved as a result of exposure to the moon's waves. It hides silently in darkness and waits for its foes to make a move. The rings on its body glow when it leaps to attack.","Types":["Dark"],"Resistant":["Psychic","Ghost","Dark"],"Weaknesses":["Fighting","Bug","Fairy"],"Fast Attack(s)":[{"Name":"Bite","Type":"Dark","Damage":6},{"Name":"Feint Attack","Type":"Dark","Damage":12}],"Special Attack(s)":[{"Name":"Struggle","Type":"Normal","Damage":15}],"Weight":{"Minimum":"23.63kg","Maximum":"30.38kg"},"Height":{"Minimum":"0.87m","Maximum":"1.11m"},"Buddy Distance":"5km (Medium)","Base Stamina":"190 stamina points.","Base Attack":"126 attack points.","Base Defense":"250 defense points.","Base Flee Rate":"5% chance to flee.","Previous evolution(s)":[{"Number":133,"Name":"Eevee"}]},{"Number":"198","Name":"Murkrow","Generation":"Generation II","About":"Murkrow was feared and loathed as the alleged bearer of ill fortune. This Pokémon shows strong interest in anything that sparkles or glitters. It will even try to steal rings from women.","Types":["Dark","Flying"],"Resistant":["Grass","Ground","Psychic","Ghost","Dark"],"Weaknesses":["Electric","Ice","Rock","Fairy"],"Fast Attack(s)":[{"Name":"Tackle","Type":"Normal","Damage":12}],"Special Attack(s)":[{"Name":"Struggle","Type":"Normal","Damage":15}],"Weight":{"Minimum":"1.84kg","Maximum":"2.36kg"},"Height":{"Minimum":"0.45m","Maximum":"0.57m"},"Buddy Distance":"1km (Medium)","Base Stamina":"120 stamina points.","Base Attack":"175 attack points.","Base Defense":"87 defense points.","Base Flee Rate":"5% chance to flee."},{"Number":"199","Name":"Slowking","Generation":"Generation II","About":"Slowking undertakes research every day in an effort to solve the mysteries of the world. However, this Pokémon apparently forgets everything it has learned if the Shellder on its head comes off.","Types":["Water","Psychic"],"Resistant":["Fire","Water","Ice","Fighting","Psychic","Steel"],"Weaknesses":["Electric","Grass","Bug","Ghost","Dark"],"Fast Attack(s)":[{"Name":"Tackle","Type":"Normal","Damage":12}],"Special Attack(s)":[{"Name":"Struggle","Type":"Normal","Damage":15}],"Weight":{"Minimum":"69.56kg","Maximum":"89.44kg"},"Height":{"Minimum":"1.76m","Maximum":"2.26m"},"Buddy Distance":"1km (Medium)","Base Stamina":"190 stamina points.","Base Attack":"177 attack points.","Base Defense":"194 defense points.","Base Flee Rate":"5% chance to flee.","Previous evolution(s)":[{"Number":79,"Name":"Slowpoke"}]},{"Number":"200","Name":"Misdreavus","Generation":"Generation II","About":"Misdreavus frightens people with a creepy, sobbing cry. The Pokémon apparently uses its red spheres to absorb the fearful feelings of foes and turn them into nutrition.","Types":["Ghost"],"Resistant":["Normal","Fighting","Poison","Bug"],"Weaknesses":["Ghost","Dark"],"Fast Attack(s)":[{"Name":"Tackle","Type":"Normal","Damage":12}],"Special Attack(s)":[{"Name":"Struggle","Type":"Normal","Damage":15}],"Weight":{"Minimum":"0.88kg","Maximum":"1.13kg"},"Height":{"Minimum":"0.62m","Maximum":"0.8m"},"Buddy Distance":"1km (Medium)","Base Stamina":"120 stamina points.","Base Attack":"167 attack points.","Base Defense":"167 defense points.","Base Flee Rate":"5% chance to flee."},{"Number":"201","Name":"Unown","Generation":"Generation II","About":"This Pokémon is shaped like ancient writing. It is a mystery as to which came first, the ancient writings or the various Unown. Research into this topic is ongoing but nothing is known.","Types":["Psychic"],"Resistant":["Fighting","Psychic"],"Weaknesses":["Bug","Ghost","Dark"],"Fast Attack(s)":[{"Name":"Tackle","Type":"Normal","Damage":12}],"Special Attack(s)":[{"Name":"Struggle","Type":"Normal","Damage":15}],"Weight":{"Minimum":"4.38kg","Maximum":"5.63kg"},"Height":{"Minimum":"0.45m","Maximum":"0.57m"},"Buddy Distance":"1km (Medium)","Base Stamina":"96 stamina points.","Base Attack":"136 attack points.","Base Defense":"91 defense points.","Base Flee Rate":"5% chance to flee."},{"Number":"202","Name":"Wobbuffet","Generation":"Generation II","About":"If two or more Wobbuffet meet, they will turn competitive and try to outdo each other's endurance. However, they may try to see which one can endure the longest without food. Trainers need to beware of this habit.","Types":["Psychic"],"Resistant":["Fighting","Psychic"],"Weaknesses":["Bug","Ghost","Dark"],"Fast Attack(s)":[{"Name":"Tackle","Type":"Normal","Damage":12}],"Special Attack(s)":[{"Name":"Struggle","Type":"Normal","Damage":15}],"Weight":{"Minimum":"24.94kg","Maximum":"32.06kg"},"Height":{"Minimum":"1.14m","Maximum":"1.46m"},"Buddy Distance":"1km (Medium)","Base Stamina":"380 stamina points.","Base Attack":"60 attack points.","Base Defense":"106 defense points.","Base Flee Rate":"5% chance to flee."},{"Number":"203","Name":"Girafarig","Generation":"Generation II","About":"Girafarig's rear head also has a brain, but it is small. The rear head attacks in response to smells and sounds. Approaching this Pokémon from behind can cause the rear head to suddenly lash out and bite.","Types":["Normal","Psychic"],"Resistant":["Psychic"],"Weaknesses":["Bug","Dark"],"Fast Attack(s)":[{"Name":"Tackle","Type":"Normal","Damage":12}],"Special Attack(s)":[{"Name":"Struggle","Type":"Normal","Damage":15}],"Weight":{"Minimum":"36.31kg","Maximum":"46.69kg"},"Height":{"Minimum":"1.31m","Maximum":"1.69m"},"Buddy Distance":"1km (Medium)","Base Stamina":"140 stamina points.","Base Attack":"182 attack points.","Base Defense":"133 defense points.","Base Flee Rate":"5% chance to flee."},{"Number":"204","Name":"Pineco","Generation":"Generation II","About":"Pineco hangs from a tree branch and patiently waits for prey to come along. If the Pokémon is disturbed while eating by someone shaking its tree, it drops down to the ground and explodes with no warning.","Types":["Bug"],"Resistant":["Grass","Fighting","Ground"],"Weaknesses":["Fire","Flying","Rock"],"Fast Attack(s)":[{"Name":"Tackle","Type":"Normal","Damage":12}],"Special Attack(s)":[{"Name":"Struggle","Type":"Normal","Damage":15}],"Weight":{"Minimum":"6.3kg","Maximum":"8.1kg"},"Height":{"Minimum":"0.53m","Maximum":"0.69m"},"Buddy Distance":"1km (Medium)","Base Stamina":"100 stamina points.","Base Attack":"108 attack points.","Base Defense":"146 defense points.","Base Flee Rate":"5% chance to flee.","Next evolution(s)":[{"Number":205,"Name":"Forretress"}]},{"Number":"205","Name":"Forretress","Generation":"Generation II","About":"Forretress conceals itself inside its hardened steel shell. The shell is opened when the Pokémon is catching prey, but it does so at such a quick pace that the shell's inside cannot be seen.","Types":["Bug","Steel"],"Resistant":["Normal","Grass","Ice","Poison","Psychic","Bug","Dragon","Steel","Fairy"],"Weaknesses":["Fire"],"Fast Attack(s)":[{"Name":"Tackle","Type":"Normal","Damage":12}],"Special Attack(s)":[{"Name":"Struggle","Type":"Normal","Damage":15}],"Weight":{"Minimum":"110.08kg","Maximum":"141.53kg"},"Height":{"Minimum":"1.04m","Maximum":"1.34m"},"Buddy Distance":"1km (Medium)","Base Stamina":"150 stamina points.","Base Attack":"161 attack points.","Base Defense":"242 defense points.","Base Flee Rate":"5% chance to flee.","Previous evolution(s)":[{"Number":204,"Name":"Pineco"}]},{"Number":"206","Name":"Dunsparce","Generation":"Generation II","About":"Dunsparce has a drill for its tail. It uses this tail to burrow into the ground backward. This Pokémon is known to make its nest in complex shapes deep under the ground.","Types":["Normal"],"Resistant":["Ghost"],"Weaknesses":["Fighting"],"Fast Attack(s)":[{"Name":"Tackle","Type":"Normal","Damage":12}],"Special Attack(s)":[{"Name":"Struggle","Type":"Normal","Damage":15}],"Weight":{"Minimum":"12.25kg","Maximum":"15.75kg"},"Height":{"Minimum":"1.31m","Maximum":"1.69m"},"Buddy Distance":"1km (Medium)","Base Stamina":"200 stamina points.","Base Attack":"131 attack points.","Base Defense":"131 defense points.","Base Flee Rate":"5% chance to flee."},{"Number":"207","Name":"Gligar","Generation":"Generation II","About":"Gligar glides through the air without a sound as if it were sliding. This Pokémon hangs on to the face of its foe using its clawed hind legs and the large pincers on its forelegs, then injects the prey with its poison barb.","Types":["Ground","Flying"],"Resistant":["Fighting","Poison","Ground","Bug"],"Weaknesses":["Water","Ice"],"Fast Attack(s)":[{"Name":"Tackle","Type":"Normal","Damage":12}],"Special Attack(s)":[{"Name":"Struggle","Type":"Normal","Damage":15}],"Weight":{"Minimum":"56.7kg","Maximum":"72.9kg"},"Height":{"Minimum":"0.95m","Maximum":"1.23m"},"Buddy Distance":"1km (Medium)","Base Stamina":"130 stamina points.","Base Attack":"143 attack points.","Base Defense":"204 defense points.","Base Flee Rate":"5% chance to flee."},{"Number":"208","Name":"Steelix","Generation":"Generation II","About":"Steelix lives even further underground than Onix. This Pokémon is known to dig toward the earth's core. There are records of this Pokémon reaching a depth of over six-tenths of a mile underground.","Types":["Steel","Ground"],"Resistant":["Normal","Electric","Poison","Flying","Psychic","Bug","Rock","Dragon","Steel","Fairy"],"Weaknesses":["Fire","Water","Fighting","Ground"],"Fast Attack(s)":[{"Name":"Tackle","Type":"Normal","Damage":12}],"Special Attack(s)":[{"Name":"Struggle","Type":"Normal","Damage":15}],"Weight":{"Minimum":"350kg","Maximum":"450kg"},"Height":{"Minimum":"8.04m","Maximum":"10.34m"},"Buddy Distance":"1km (Medium)","Base Stamina":"150 stamina points.","Base Attack":"148 attack points.","Base Defense":"333 defense points.","Base Flee Rate":"5% chance to flee.","Previous evolution(s)":[{"Number":95,"Name":"Onix"}]},{"Number":"209","Name":"Snubbull","Generation":"Generation II","About":"By baring its fangs and making a scary face, Snubbull sends smaller Pokémon scurrying away in terror. However, this Pokémon seems a little sad at making its foes flee.","Types":["Fairy"],"Resistant":["Fighting","Bug","Dragon","Dark"],"Weaknesses":["Poison","Steel"],"Fast Attack(s)":[{"Name":"Tackle","Type":"Normal","Damage":12}],"Special Attack(s)":[{"Name":"Struggle","Type":"Normal","Damage":15}],"Weight":{"Minimum":"6.83kg","Maximum":"8.78kg"},"Height":{"Minimum":"0.53m","Maximum":"0.69m"},"Buddy Distance":"1km (Medium)","Base Stamina":"120 stamina points.","Base Attack":"137 attack points.","Base Defense":"89 defense points.","Base Flee Rate":"5% chance to flee.","Next evolution(s)":[{"Number":210,"Name":"Granbull"}]},{"Number":"210","Name":"Granbull","Generation":"Generation II","About":"Granbull has a particularly well-developed lower jaw. The enormous fangs are heavy, causing the Pokémon to tip its head back for balance. Unless it is startled, it will not try to bite indiscriminately.","Types":["Fairy"],"Resistant":["Fighting","Bug","Dragon","Dark"],"Weaknesses":["Poison","Steel"],"Fast Attack(s)":[{"Name":"Tackle","Type":"Normal","Damage":12}],"Special Attack(s)":[{"Name":"Struggle","Type":"Normal","Damage":15}],"Weight":{"Minimum":"42.61kg","Maximum":"54.79kg"},"Height":{"Minimum":"1.22m","Maximum":"1.57m"},"Buddy Distance":"1km (Medium)","Base Stamina":"180 stamina points.","Base Attack":"212 attack points.","Base Defense":"137 defense points.","Base Flee Rate":"5% chance to flee.","Previous evolution(s)":[{"Number":209,"Name":"Snubbull"}]},{"Number":"211","Name":"Qwilfish","Generation":"Generation II","About":"Qwilfish sucks in water, inflating itself. This Pokémon uses the pressure of the water it swallowed to shoot toxic quills all at once from all over its body. It finds swimming somewhat challenging.","Types":["Water","Poison"],"Resistant":["Fire","Water","Ice","Fighting","Poison","Bug","Steel","Fairy"],"Weaknesses":["Electric","Ground","Psychic"],"Fast Attack(s)":[{"Name":"Tackle","Type":"Normal","Damage":12}],"Special Attack(s)":[{"Name":"Struggle","Type":"Normal","Damage":15}],"Weight":{"Minimum":"3.41kg","Maximum":"4.39kg"},"Height":{"Minimum":"0.45m","Maximum":"0.57m"},"Buddy Distance":"1km (Medium)","Base Stamina":"130 stamina points.","Base Attack":"184 attack points.","Base Defense":"148 defense points.","Base Flee Rate":"5% chance to flee."},{"Number":"212","Name":"Scizor","Generation":"Generation II","About":"Scizor has a body with the hardness of steel. It is not easily fazed by ordinary sorts of attacks. This Pokémon flaps its wings to regulate its body temperature.","Types":["Bug","Steel"],"Resistant":["Normal","Grass","Ice","Poison","Psychic","Bug","Dragon","Steel","Fairy"],"Weaknesses":["Fire"],"Fast Attack(s)":[{"Name":"Tackle","Type":"Normal","Damage":12}],"Special Attack(s)":[{"Name":"Struggle","Type":"Normal","Damage":15}],"Weight":{"Minimum":"109.38kg","Maximum":"140.63kg"},"Height":{"Minimum":"1.76m","Maximum":"2.26m"},"Buddy Distance":"1km (Medium)","Base Stamina":"140 stamina points.","Base Attack":"236 attack points.","Base Defense":"191 defense points.","Base Flee Rate":"5% chance to flee.","Previous evolution(s)":[{"Number":123,"Name":"Scyther"}]},{"Number":"213","Name":"Shuckle","Generation":"Generation II","About":"Shuckle quietly hides itself under rocks, keeping its body concealed inside its hard shell while eating berries it has stored away. The berries mix with its body fluids to become a juice.","Types":["Bug","Rock"],"Resistant":["Normal","Poison"],"Weaknesses":["Water","Rock","Steel"],"Fast Attack(s)":[{"Name":"Tackle","Type":"Normal","Damage":12}],"Special Attack(s)":[{"Name":"Struggle","Type":"Normal","Damage":15}],"Weight":{"Minimum":"17.94kg","Maximum":"23.06kg"},"Height":{"Minimum":"0.53m","Maximum":"0.69m"},"Buddy Distance":"1km (Medium)","Base Stamina":"40 stamina points.","Base Attack":"17 attack points.","Base Defense":"396 defense points.","Base Flee Rate":"5% chance to flee."},{"Number":"214","Name":"Heracross","Generation":"Generation II","About":"Heracross charges in a straight line at its foe, slips beneath the foe's grasp, and then scoops up and hurls the opponent with its mighty horn. This Pokémon even has enough power to topple a massive tree.","Types":["Bug","Fighting"],"Resistant":["Grass","Fighting","Ground","Bug","Dark"],"Weaknesses":["Fire","Flying","Psychic","Fairy"],"Fast Attack(s)":[{"Name":"Tackle","Type":"Normal","Damage":12}],"Special Attack(s)":[{"Name":"Struggle","Type":"Normal","Damage":15}],"Weight":{"Minimum":"47.25kg","Maximum":"60.75kg"},"Height":{"Minimum":"1.31m","Maximum":"1.69m"},"Buddy Distance":"1km (Medium)","Base Stamina":"160 stamina points.","Base Attack":"234 attack points.","Base Defense":"189 defense points.","Base Flee Rate":"5% chance to flee."},{"Number":"215","Name":"Sneasel","Generation":"Generation II","About":"Sneasel scales trees by punching its hooked claws into the bark. This Pokémon seeks out unguarded nests and steals eggs for food while the parents are away.","Types":["Dark","Ice"],"Resistant":["Ice","Psychic","Ghost","Dark"],"Weaknesses":["Fire","Fighting","Bug","Rock","Steel","Fairy"],"Fast Attack(s)":[{"Name":"Tackle","Type":"Normal","Damage":12}],"Special Attack(s)":[{"Name":"Struggle","Type":"Normal","Damage":15}],"Weight":{"Minimum":"24.5kg","Maximum":"31.5kg"},"Height":{"Minimum":"0.78m","Maximum":"1m"},"Buddy Distance":"1km (Medium)","Base Stamina":"110 stamina points.","Base Attack":"189 attack points.","Base Defense":"157 defense points.","Base Flee Rate":"5% chance to flee."},{"Number":"216","Name":"Teddiursa","Generation":"Generation II","About":"This Pokémon likes to lick its palms that are sweetened by being soaked in honey. Teddiursa concocts its own honey by blending fruits and pollen collected by Beedrill.","Types":["Normal"],"Resistant":["Ghost"],"Weaknesses":["Fighting"],"Fast Attack(s)":[{"Name":"Tackle","Type":"Normal","Damage":12}],"Special Attack(s)":[{"Name":"Struggle","Type":"Normal","Damage":15}],"Weight":{"Minimum":"7.7kg","Maximum":"9.9kg"},"Height":{"Minimum":"0.53m","Maximum":"0.69m"},"Buddy Distance":"1km (Medium)","Base Stamina":"120 stamina points.","Base Attack":"142 attack points.","Base Defense":"93 defense points.","Base Flee Rate":"5% chance to flee.","Next evolution(s)":[{"Number":217,"Name":"Ursaring"}]},{"Number":"217","Name":"Ursaring","Generation":"Generation II","About":"In the forests inhabited by Ursaring, it is said that there are many streams and towering trees where they gather food. This Pokémon walks through its forest gathering food every day.","Types":["Normal"],"Resistant":["Ghost"],"Weaknesses":["Fighting"],"Fast Attack(s)":[{"Name":"Tackle","Type":"Normal","Damage":12}],"Special Attack(s)":[{"Name":"Struggle","Type":"Normal","Damage":15}],"Weight":{"Minimum":"110.08kg","Maximum":"141.53kg"},"Height":{"Minimum":"1.57m","Maximum":"2.02m"},"Buddy Distance":"1km (Medium)","Base Stamina":"180 stamina points.","Base Attack":"236 attack points.","Base Defense":"144 defense points.","Base Flee Rate":"5% chance to flee.","Previous evolution(s)":[{"Number":216,"Name":"Teddiursa"}]},{"Number":"218","Name":"Slugma","Generation":"Generation II","About":"Molten magma courses throughout Slugma's circulatory system. If this Pokémon is chilled, the magma cools and hardens. Its body turns brittle and chunks fall off, reducing its size.","Types":["Fire"],"Resistant":["Fire","Grass","Ice","Bug","Steel","Fairy"],"Weaknesses":["Water","Ground","Rock"],"Fast Attack(s)":[{"Name":"Tackle","Type":"Normal","Damage":12}],"Special Attack(s)":[{"Name":"Struggle","Type":"Normal","Damage":15}],"Weight":{"Minimum":"30.63kg","Maximum":"39.38kg"},"Height":{"Minimum":"0.62m","Maximum":"0.8m"},"Buddy Distance":"1km (Medium)","Base Stamina":"80 stamina points.","Base Attack":"118 attack points.","Base Defense":"71 defense points.","Base Flee Rate":"5% chance to flee.","Next evolution(s)":[{"Number":219,"Name":"Magcargo"}]},{"Number":"219","Name":"Magcargo","Generation":"Generation II","About":"Magcargo's shell is actually its skin that hardened as a result of cooling. Its shell is very brittle and fragile—just touching it causes it to crumble apart. This Pokémon returns to its original size by dipping itself in magma.","Types":["Fire","Rock"],"Resistant":["Normal","Fire","Ice","Poison","Flying","Bug","Fairy"],"Weaknesses":["Water","Fighting","Ground","Rock"],"Fast Attack(s)":[{"Name":"Tackle","Type":"Normal","Damage":12}],"Special Attack(s)":[{"Name":"Struggle","Type":"Normal","Damage":15}],"Weight":{"Minimum":"48.13kg","Maximum":"61.88kg"},"Height":{"Minimum":"0.69m","Maximum":"0.89m"},"Buddy Distance":"1km (Medium)","Base Stamina":"100 stamina points.","Base Attack":"139 attack points.","Base Defense":"209 defense points.","Base Flee Rate":"5% chance to flee.","Previous evolution(s)":[{"Number":218,"Name":"Slugma"}]},{"Number":"220","Name":"Swinub","Generation":"Generation II","About":"Swinub roots for food by rubbing its snout against the ground. Its favorite food is a mushroom that grows under the cover of dead grass. This Pokémon occasionally roots out hot springs.","Types":["Ice","Ground"],"Resistant":["Electric","Poison"],"Weaknesses":["Fire","Water","Grass","Fighting","Steel"],"Fast Attack(s)":[{"Name":"Tackle","Type":"Normal","Damage":12}],"Special Attack(s)":[{"Name":"Struggle","Type":"Normal","Damage":15}],"Weight":{"Minimum":"5.69kg","Maximum":"7.31kg"},"Height":{"Minimum":"0.36m","Maximum":"0.46m"},"Buddy Distance":"1km (Medium)","Base Stamina":"100 stamina points.","Base Attack":"90 attack points.","Base Defense":"74 defense points.","Base Flee Rate":"5% chance to flee.","Next evolution(s)":[{"Number":221,"Name":"Piloswine"}]},{"Number":"221","Name":"Piloswine","Generation":"Generation II","About":"Piloswine is covered by a thick coat of long hair that enables it to endure the freezing cold. This Pokémon uses its tusks to dig up food that has been buried under ice.","Types":["Ice","Ground"],"Resistant":["Electric","Poison"],"Weaknesses":["Fire","Water","Grass","Fighting","Steel"],"Fast Attack(s)":[{"Name":"Tackle","Type":"Normal","Damage":12}],"Special Attack(s)":[{"Name":"Struggle","Type":"Normal","Damage":15}],"Weight":{"Minimum":"48.82kg","Maximum":"62.77kg"},"Height":{"Minimum":"0.95m","Maximum":"1.23m"},"Buddy Distance":"1km (Medium)","Base Stamina":"200 stamina points.","Base Attack":"181 attack points.","Base Defense":"147 defense points.","Base Flee Rate":"5% chance to flee.","Previous evolution(s)":[{"Number":220,"Name":"Swinub"}]},{"Number":"222","Name":"Corsola","Generation":"Generation II","About":"Corsola's branches glitter very beautifully in seven colors when they catch sunlight. If any branch breaks off, this Pokémon grows it back in just one night.","Types":["Water","Rock"],"Resistant":["Normal","Fire","Ice","Poison","Flying"],"Weaknesses":["Electric","Grass","Fighting","Ground"],"Fast Attack(s)":[{"Name":"Tackle","Type":"Normal","Damage":12}],"Special Attack(s)":[{"Name":"Struggle","Type":"Normal","Damage":15}],"Weight":{"Minimum":"4.38kg","Maximum":"5.63kg"},"Height":{"Minimum":"0.53m","Maximum":"0.69m"},"Buddy Distance":"1km (Medium)","Base Stamina":"110 stamina points.","Base Attack":"118 attack points.","Base Defense":"156 defense points.","Base Flee Rate":"5% chance to flee."},{"Number":"223","Name":"Remoraid","Generation":"Generation II","About":"Remoraid sucks in water, then expels it at high velocity using its abdominal muscles to shoot down flying prey. When evolution draws near, this Pokémon travels downstream from rivers.","Types":["Water"],"Resistant":["Fire","Water","Ice","Steel"],"Weaknesses":["Electric","Grass"],"Fast Attack(s)":[{"Name":"Tackle","Type":"Normal","Damage":12}],"Special Attack(s)":[{"Name":"Struggle","Type":"Normal","Damage":15}],"Weight":{"Minimum":"10.5kg","Maximum":"13.5kg"},"Height":{"Minimum":"0.53m","Maximum":"0.69m"},"Buddy Distance":"1km (Medium)","Base Stamina":"70 stamina points.","Base Attack":"127 attack points.","Base Defense":"69 defense points.","Base Flee Rate":"5% chance to flee.","Next evolution(s)":[{"Number":224,"Name":"Octillery"}]},{"Number":"224","Name":"Octillery","Generation":"Generation II","About":"Octillery grabs onto its foe using its tentacles. This Pokémon tries to immobilize it before delivering the finishing blow. If the foe turns out to be too strong, Octillery spews ink to escape.","Types":["Water"],"Resistant":["Fire","Water","Ice","Steel"],"Weaknesses":["Electric","Grass"],"Fast Attack(s)":[{"Name":"Tackle","Type":"Normal","Damage":12}],"Special Attack(s)":[{"Name":"Struggle","Type":"Normal","Damage":15}],"Weight":{"Minimum":"24.94kg","Maximum":"32.06kg"},"Height":{"Minimum":"0.78m","Maximum":"1m"},"Buddy Distance":"1km (Medium)","Base Stamina":"150 stamina points.","Base Attack":"197 attack points.","Base Defense":"141 defense points.","Base Flee Rate":"5% chance to flee.","Previous evolution(s)":[{"Number":223,"Name":"Remoraid"}]},{"Number":"225","Name":"Delibird","Generation":"Generation II","About":"Delibird carries its food bundled up in its tail. There once was a famous explorer who managed to reach the peak of the world's highest mountain, thanks to one of these Pokémon sharing its food.","Types":["Ice","Flying"],"Resistant":["Grass","Ground","Bug"],"Weaknesses":["Fire","Electric","Rock","Steel"],"Fast Attack(s)":[{"Name":"Tackle","Type":"Normal","Damage":12}],"Special Attack(s)":[{"Name":"Struggle","Type":"Normal","Damage":15}],"Weight":{"Minimum":"14kg","Maximum":"18kg"},"Height":{"Minimum":"0.78m","Maximum":"1m"},"Buddy Distance":"1km (Medium)","Base Stamina":"90 stamina points.","Base Attack":"128 attack points.","Base Defense":"90 defense points.","Base Flee Rate":"5% chance to flee."},{"Number":"226","Name":"Mantine","Generation":"Generation II","About":"On sunny days, schools of Mantine can be seen elegantly leaping over the sea's waves. This Pokémon is not bothered by the Remoraid that hitches rides.","Types":["Water","Flying"],"Resistant":["Fire","Water","Fighting","Ground","Bug","Steel"],"Weaknesses":["Electric","Rock"],"Fast Attack(s)":[{"Name":"Tackle","Type":"Normal","Damage":12}],"Special Attack(s)":[{"Name":"Struggle","Type":"Normal","Damage":15}],"Weight":{"Minimum":"192.5kg","Maximum":"247.5kg"},"Height":{"Minimum":"1.85m","Maximum":"2.37m"},"Buddy Distance":"1km (Medium)","Base Stamina":"130 stamina points.","Base Attack":"148 attack points.","Base Defense":"260 defense points.","Base Flee Rate":"5% chance to flee."},{"Number":"227","Name":"Skarmory","Generation":"Generation II","About":"Skarmory is entirely encased in hard, protective armor. This Pokémon flies at close to 190 mph. It slashes foes with its wings that possess swordlike cutting edges.","Types":["Steel","Flying"],"Resistant":["Normal","Grass","Poison","Flying","Psychic","Bug","Dragon","Steel","Fairy"],"Weaknesses":["Fire","Electric"],"Fast Attack(s)":[{"Name":"Tackle","Type":"Normal","Damage":12}],"Special Attack(s)":[{"Name":"Struggle","Type":"Normal","Damage":15}],"Weight":{"Minimum":"44.19kg","Maximum":"56.81kg"},"Height":{"Minimum":"1.49m","Maximum":"1.91m"},"Buddy Distance":"1km (Medium)","Base Stamina":"130 stamina points.","Base Attack":"148 attack points.","Base Defense":"260 defense points.","Base Flee Rate":"5% chance to flee."},{"Number":"228","Name":"Houndour","Generation":"Generation II","About":"Houndour hunt as a coordinated pack. They communicate with each other using a variety of cries to corner their prey. This Pokémon's remarkable teamwork is unparalleled.","Types":["Dark","Fire"],"Resistant":["Fire","Grass","Ice","Psychic","Ghost","Dark","Steel"],"Weaknesses":["Water","Fighting","Ground","Rock"],"Fast Attack(s)":[{"Name":"Tackle","Type":"Normal","Damage":12}],"Special Attack(s)":[{"Name":"Struggle","Type":"Normal","Damage":15}],"Weight":{"Minimum":"9.45kg","Maximum":"12.15kg"},"Height":{"Minimum":"0.53m","Maximum":"0.69m"},"Buddy Distance":"1km (Medium)","Base Stamina":"90 stamina points.","Base Attack":"152 attack points.","Base Defense":"93 defense points.","Base Flee Rate":"5% chance to flee.","Next evolution(s)":[{"Number":229,"Name":"Houndoom"}]},{"Number":"229","Name":"Houndoom","Generation":"Generation II","About":"In a Houndoom pack, the one with its horns raked sharply toward the back serves a leadership role. These Pokémon choose their leader by fighting among themselves.","Types":["Dark","Fire"],"Resistant":["Fire","Grass","Ice","Psychic","Ghost","Dark","Steel"],"Weaknesses":["Water","Fighting","Ground","Rock"],"Fast Attack(s)":[{"Name":"Tackle","Type":"Normal","Damage":12}],"Special Attack(s)":[{"Name":"Struggle","Type":"Normal","Damage":15}],"Weight":{"Minimum":"30.63kg","Maximum":"39.38kg"},"Height":{"Minimum":"1.22m","Maximum":"1.57m"},"Buddy Distance":"1km (Medium)","Base Stamina":"150 stamina points.","Base Attack":"224 attack points.","Base Defense":"159 defense points.","Base Flee Rate":"5% chance to flee.","Previous evolution(s)":[{"Number":228,"Name":"Houndour"}]},{"Number":"230","Name":"Kingdra","Generation":"Generation II","About":"Kingdra lives at extreme ocean depths that are otherwise uninhabited. It has long been believed that the yawning of this Pokémon creates spiraling ocean currents.","Types":["Water","Dragon"],"Resistant":["Fire","Water","Steel"],"Weaknesses":["Dragon","Fairy"],"Fast Attack(s)":[{"Name":"Tackle","Type":"Normal","Damage":12}],"Special Attack(s)":[{"Name":"Struggle","Type":"Normal","Damage":15}],"Weight":{"Minimum":"133kg","Maximum":"171kg"},"Height":{"Minimum":"1.57m","Maximum":"2.02m"},"Buddy Distance":"1km (Medium)","Base Stamina":"150 stamina points.","Base Attack":"194 attack points.","Base Defense":"194 defense points.","Base Flee Rate":"5% chance to flee.","Previous evolution(s)":[{"Number":116,"Name":"Horsea"},{"Number":117,"Name":"Seadra"}]},{"Number":"231","Name":"Phanpy","Generation":"Generation II","About":"For its nest, Phanpy digs a vertical pit in the ground at the edge of a river. It marks the area around its nest with its trunk to let the others know that the area has been claimed.","Types":["Ground"],"Resistant":["Electric","Poison","Rock"],"Weaknesses":["Water","Grass","Ice"],"Fast Attack(s)":[{"Name":"Tackle","Type":"Normal","Damage":12}],"Special Attack(s)":[{"Name":"Struggle","Type":"Normal","Damage":15}],"Weight":{"Minimum":"29.31kg","Maximum":"37.69kg"},"Height":{"Minimum":"0.45m","Maximum":"0.57m"},"Buddy Distance":"1km (Medium)","Base Stamina":"180 stamina points.","Base Attack":"107 attack points.","Base Defense":"107 defense points.","Base Flee Rate":"5% chance to flee.","Next evolution(s)":[{"Number":232,"Name":"Donphan"}]},{"Number":"232","Name":"Donphan","Generation":"Generation II","About":"Donphan's favorite attack is curling its body into a ball, then charging at its foe while rolling at high speed. Once it starts rolling, this Pokémon can't stop very easily.","Types":["Ground"],"Resistant":["Electric","Poison","Rock"],"Weaknesses":["Water","Grass","Ice"],"Fast Attack(s)":[{"Name":"Tackle","Type":"Normal","Damage":12}],"Special Attack(s)":[{"Name":"Struggle","Type":"Normal","Damage":15}],"Weight":{"Minimum":"105kg","Maximum":"135kg"},"Height":{"Minimum":"0.95m","Maximum":"1.23m"},"Buddy Distance":"1km (Medium)","Base Stamina":"180 stamina points.","Base Attack":"214 attack points.","Base Defense":"214 defense points.","Base Flee Rate":"5% chance to flee.","Previous evolution(s)":[{"Number":231,"Name":"Phanpy"}]},{"Number":"233","Name":"Porygon2","Generation":"Generation II","About":"Porygon2 was created by humans using the power of science. The man-made Pokémon has been endowed with artificial intelligence that enables it to learn new gestures and emotions on its own.","Types":["Normal"],"Resistant":["Ghost"],"Weaknesses":["Fighting"],"Fast Attack(s)":[{"Name":"Tackle","Type":"Normal","Damage":12}],"Special Attack(s)":[{"Name":"Struggle","Type":"Normal","Damage":15}],"Weight":{"Minimum":"28.44kg","Maximum":"36.56kg"},"Height":{"Minimum":"0.53m","Maximum":"0.69m"},"Buddy Distance":"1km (Medium)","Base Stamina":"170 stamina points.","Base Attack":"198 attack points.","Base Defense":"183 defense points.","Base Flee Rate":"5% chance to flee.","Previous evolution(s)":[{"Number":137,"Name":"Porygon"}]},{"Number":"234","Name":"Stantler","Generation":"Generation II","About":"Stantler's magnificent antlers were traded at high prices as works of art. As a result, this Pokémon was hunted close to extinction by those who were after the priceless antlers.","Types":["Normal"],"Resistant":["Ghost"],"Weaknesses":["Fighting"],"Fast Attack(s)":[{"Name":"Tackle","Type":"Normal","Damage":12}],"Special Attack(s)":[{"Name":"Struggle","Type":"Normal","Damage":15}],"Weight":{"Minimum":"62.3kg","Maximum":"80.1kg"},"Height":{"Minimum":"1.22m","Maximum":"1.57m"},"Buddy Distance":"1km (Medium)","Base Stamina":"146 stamina points.","Base Attack":"192 attack points.","Base Defense":"132 defense points.","Base Flee Rate":"5% chance to flee."},{"Number":"235","Name":"Smeargle","Generation":"Generation II","About":"Smeargle marks the boundaries of its territory using a body fluid that leaks out from the tip of its tail. Over 5,000 different marks left by this Pokémon have been found.","Types":["Normal"],"Resistant":["Ghost"],"Weaknesses":["Fighting"],"Fast Attack(s)":[{"Name":"Tackle","Type":"Normal","Damage":12}],"Special Attack(s)":[{"Name":"Struggle","Type":"Normal","Damage":15}],"Weight":{"Minimum":"50.75kg","Maximum":"65.25kg"},"Height":{"Minimum":"1.04m","Maximum":"1.34m"},"Buddy Distance":"1km (Medium)","Base Stamina":"110 stamina points.","Base Attack":"40 attack points.","Base Defense":"88 defense points.","Base Flee Rate":"5% chance to flee."},{"Number":"236","Name":"Tyrogue","Generation":"Generation II","About":"Tyrogue becomes stressed out if it does not get to train every day. When raising this Pokémon, the Trainer must establish and uphold various training methods.","Types":["Fighting"],"Resistant":["Bug","Rock","Dark"],"Weaknesses":["Flying","Psychic","Fairy"],"Fast Attack(s)":[{"Name":"Low Kick","Type":"Fighting","Damage":5},{"Name":"Rock Smash","Type":"Fighting","Damage":15}],"Special Attack(s)":[{"Name":"Body Slam","Type":"Normal","Damage":40},{"Name":"Brick Break","Type":"Fighting","Damage":30},{"Name":"Low Sweep","Type":"Fighting","Damage":30}],"Weight":{"Minimum":"18.38kg","Maximum":"23.63kg"},"Height":{"Minimum":"0.62m","Maximum":"0.8m"},"Buddy Distance":"5km (Medium)","Base Stamina":"70 stamina points.","Base Attack":"64 attack points.","Base Defense":"64 defense points.","Base Flee Rate":"5% chance to flee.","Next Evolution Requirements":{"Amount":25,"Name":"Tyrogue candies"},"Next evolution(s)":[{"Number":106,"Name":"Hitmonlee"},{"Number":107,"Name":"Hitmonchan"},{"Number":237,"Name":"Hitmontop"}]},{"Number":"237","Name":"Hitmontop","Generation":"Generation II","About":"Hitmontop spins on its head at high speed, all the while delivering kicks. This technique is a remarkable mix of both offense and defense at the same time. The Pokémon travels faster spinning than it does walking.","Types":["Fighting"],"Resistant":["Bug","Rock","Dark"],"Weaknesses":["Flying","Psychic","Fairy"],"Fast Attack(s)":[{"Name":"Tackle","Type":"Normal","Damage":12}],"Special Attack(s)":[{"Name":"Struggle","Type":"Normal","Damage":15}],"Weight":{"Minimum":"42kg","Maximum":"54kg"},"Height":{"Minimum":"1.22m","Maximum":"1.57m"},"Buddy Distance":"5km (Medium)","Base Stamina":"100 stamina points.","Base Attack":"173 attack points.","Base Defense":"214 defense points.","Base Flee Rate":"5% chance to flee.","Previous evolution(s)":[{"Number":236,"Name":"Tyrogue"}]},{"Number":"238","Name":"Smoochum","Generation":"Generation II","About":"Smoochum actively runs about, but also falls quite often. Whenever the chance arrives, it will look for its reflection to make sure its face hasn't become dirty.","Types":["Ice","Psychic"],"Resistant":["Ice","Psychic"],"Weaknesses":["Fire","Bug","Rock","Ghost","Dark","Steel"],"Fast Attack(s)":[{"Name":"Frost Breath","Type":"Ice","Damage":9},{"Name":"Pound","Type":"Normal","Damage":7}],"Special Attack(s)":[{"Name":"Ice Beam","Type":"Ice","Damage":65},{"Name":"Ice Punch","Type":"Ice","Damage":45},{"Name":"Psyshock","Type":"Psychic","Damage":40}],"Weight":{"Minimum":"5.25kg","Maximum":"6.75kg"},"Height":{"Minimum":"0.36m","Maximum":"0.46m"},"Buddy Distance":"5km (Medium)","Base Stamina":"90 stamina points.","Base Attack":"153 attack points.","Base Defense":"116 defense points.","Base Flee Rate":"5% chance to flee.","Next Evolution Requirements":{"Amount":25,"Name":"Jyn"},"Next evolution(s)":[{"Number":124,"Name":"Jynx"}]},{"Number":"239","Name":"Elekid","Generation":"Generation II","About":"Elekid stores electricity in its body. If it touches metal and accidentally discharges all its built-up electricity, this Pokémon begins swinging its arms in circles to recharge itself.","Types":["Electric"],"Resistant":["Electric","Flying","Steel"],"Weaknesses":["Ground"],"Fast Attack(s)":[{"Name":"Low Kick","Type":"Fighting","Damage":5},{"Name":"Thunder Shock","Type":"Electric","Damage":5}],"Special Attack(s)":[{"Name":"Discharge","Type":"Electric","Damage":35},{"Name":"Thunder Punch","Type":"Electric","Damage":40},{"Name":"Thunderbolt","Type":"Electric","Damage":55}],"Weight":{"Minimum":"20.56kg","Maximum":"26.44kg"},"Height":{"Minimum":"0.53m","Maximum":"0.69m"},"Buddy Distance":"5km (Medium)","Base Stamina":"90 stamina points.","Base Attack":"135 attack points.","Base Defense":"110 defense points.","Base Flee Rate":"5% chance to flee.","Next Evolution Requirements":{"Amount":25,"Name":"Electabuzz candies"},"Next evolution(s)":[{"Number":125,"Name":"Electabuzz"}]},{"Number":"240","Name":"Magby","Generation":"Generation II","About":"Magby's state of health is determined by observing the fire it breathes. If the Pokémon is spouting yellow flames from its mouth, it is in good health. When it is fatigued, black smoke will be mixed in with the flames.","Types":["Fire"],"Resistant":["Fire","Grass","Ice","Bug","Steel","Fairy"],"Weaknesses":["Water","Ground","Rock"],"Fast Attack(s)":[{"Name":"Ember","Type":"Fire","Damage":10},{"Name":"Karate Chop","Type":"Fighting","Damage":6}],"Special Attack(s)":[{"Name":"Brick Break","Type":"Fighting","Damage":30},{"Name":"Fire Punch","Type":"Fire","Damage":40},{"Name":"Flamethrower","Type":"Fire","Damage":55}],"Weight":{"Minimum":"18.72kg","Maximum":"24.07kg"},"Height":{"Minimum":"0.62m","Maximum":"0.8m"},"Buddy Distance":"5km (Medium)","Base Stamina":"90 stamina points.","Base Attack":"151 attack points.","Base Defense":"108 defense points.","Base Flee Rate":"5% chance to flee.","Next Evolution Requirements":{"Amount":25,"Name":"Magmar candies"},"Next evolution(s)":[{"Number":126,"Name":"Magmar"}]},{"Number":"241","Name":"Miltank","Generation":"Generation II","About":"Miltank gives over five gallons of milk on a daily basis. Its sweet milk is enjoyed by children and grown-ups alike. People who can't drink milk turn it into yogurt and eat it instead.","Types":["Normal"],"Resistant":["Ghost"],"Weaknesses":["Fighting"],"Fast Attack(s)":[{"Name":"Tackle","Type":"Normal","Damage":12}],"Special Attack(s)":[{"Name":"Struggle","Type":"Normal","Damage":15}],"Weight":{"Minimum":"66.06kg","Maximum":"84.94kg"},"Height":{"Minimum":"1.04m","Maximum":"1.34m"},"Buddy Distance":"1km (Medium)","Base Stamina":"190 stamina points.","Base Attack":"157 attack points.","Base Defense":"211 defense points.","Base Flee Rate":"5% chance to flee."},{"Number":"242","Name":"Blissey","Generation":"Generation II","About":"Blissey senses sadness with its fluffy coat of fur. If it does so, this Pokémon will rush over to a sad person, no matter how far away, to share a Lucky Egg that brings a smile to any face.","Types":["Normal"],"Resistant":["Ghost"],"Weaknesses":["Fighting"],"Fast Attack(s)":[{"Name":"Tackle","Type":"Normal","Damage":12}],"Special Attack(s)":[{"Name":"Struggle","Type":"Normal","Damage":15}],"Weight":{"Minimum":"40.95kg","Maximum":"52.65kg"},"Height":{"Minimum":"1.31m","Maximum":"1.69m"},"Buddy Distance":"1km (Medium)","Base Stamina":"510 stamina points.","Base Attack":"129 attack points.","Base Defense":"229 defense points.","Base Flee Rate":"5% chance to flee.","Previous evolution(s)":[{"Number":113,"Name":"Chansey"}]},{"Number":"243","Name":"Raikou","Generation":"Generation II","About":"Raikou embodies the speed of lightning. The roars of this Pokémon send shock waves shuddering through the air and shake the ground as if lightning bolts had come crashing down.","Types":["Electric"],"Resistant":["Electric","Flying","Steel"],"Weaknesses":["Ground"],"Fast Attack(s)":[{"Name":"Tackle","Type":"Normal","Damage":12}],"Special Attack(s)":[{"Name":"Struggle","Type":"Normal","Damage":15}],"Weight":{"Minimum":"155.75kg","Maximum":"200.25kg"},"Height":{"Minimum":"1.67m","Maximum":"2.15m"},"Buddy Distance":"1km (Medium)","Base Stamina":"180 stamina points.","Base Attack":"241 attack points.","Base Defense":"210 defense points.","Base Flee Rate":"5% chance to flee.","Pokèmon Class":"This is a LEGENDARY Pokèmon.","LEGENDARY":"Pokèmon Class"},{"Number":"244","Name":"Entei","Generation":"Generation II","About":"Entei embodies the passion of magma. This Pokémon is thought to have been born in the eruption of a volcano. It sends up massive bursts of fire that utterly consume all that they touch.","Types":["Fire"],"Resistant":["Fire","Grass","Ice","Bug","Steel","Fairy"],"Weaknesses":["Water","Ground","Rock"],"Fast Attack(s)":[{"Name":"Tackle","Type":"Normal","Damage":12}],"Special Attack(s)":[{"Name":"Struggle","Type":"Normal","Damage":15}],"Weight":{"Minimum":"173.25kg","Maximum":"222.75kg"},"Height":{"Minimum":"1.85m","Maximum":"2.37m"},"Buddy Distance":"1km (Medium)","Base Stamina":"230 stamina points.","Base Attack":"235 attack points.","Base Defense":"176 defense points.","Base Flee Rate":"5% chance to flee.","Pokèmon Class":"This is a LEGENDARY Pokèmon.","LEGENDARY":"Pokèmon Class"},{"Number":"245","Name":"Suicune","Generation":"Generation II","About":"Suicune embodies the compassion of a pure spring of water. It runs across the land with gracefulness. This Pokémon has the power to purify dirty water.","Types":["Water"],"Resistant":["Fire","Water","Ice","Steel"],"Weaknesses":["Electric","Grass"],"Fast Attack(s)":[{"Name":"Tackle","Type":"Normal","Damage":12}],"Special Attack(s)":[{"Name":"Struggle","Type":"Normal","Damage":15}],"Weight":{"Minimum":"163.63kg","Maximum":"210.38kg"},"Height":{"Minimum":"1.76m","Maximum":"2.26m"},"Buddy Distance":"1km (Medium)","Base Stamina":"200 stamina points.","Base Attack":"180 attack points.","Base Defense":"235 defense points.","Base Flee Rate":"5% chance to flee.","Pokèmon Class":"This is a LEGENDARY Pokèmon.","LEGENDARY":"Pokèmon Class"},{},{},{},{"Number":"249","Name":"Lugia","Generation":"Generation II","About":"Lugia's wings pack devastating power—a light fluttering of its wings can blow apart regular houses. As a result, this Pokémon chooses to live out of sight deep under the sea.","Types":["Psychic","Flying"],"Resistant":["Grass","Fighting","Ground","Psychic"],"Weaknesses":["Electric","Ice","Rock","Ghost","Dark"],"Fast Attack(s)":[{"Name":"Tackle","Type":"Normal","Damage":12}],"Special Attack(s)":[{"Name":"Struggle","Type":"Normal","Damage":15}],"Weight":{"Minimum":"189kg","Maximum":"243kg"},"Height":{"Minimum":"4.56m","Maximum":"5.86m"},"Buddy Distance":"1km (Medium)","Base Stamina":"212 stamina points.","Base Attack":"193 attack points.","Base Defense":"323 defense points.","Base Flee Rate":"5% chance to flee.","Pokèmon Class":"This is a LEGENDARY Pokèmon.","LEGENDARY":"Pokèmon Class"},{},{"Number":"251","Name":"Celebi","Generation":"Generation II","About":"This Pokémon came from the future by crossing over time. It is thought that so long as Celebi appears, a bright and shining future awaits us.","Types":["Psychic","Grass"],"Resistant":["Water","Electric","Grass","Fighting","Ground","Psychic"],"Weaknesses":["Fire","Ice","Poison","Flying","Bug","Ghost","Dark"],"Fast Attack(s)":[{"Name":"Tackle","Type":"Normal","Damage":12}],"Special Attack(s)":[{"Name":"Struggle","Type":"Normal","Damage":15}],"Weight":{"Minimum":"4.38kg","Maximum":"5.63kg"},"Height":{"Minimum":"0.53m","Maximum":"0.69m"},"Buddy Distance":"1km (Medium)","Base Stamina":"200 stamina points.","Base Attack":"210 attack points.","Base Defense":"210 defense points.","Base Flee Rate":"5% chance to flee.","Pokèmon Class":"This is a MYTHIC Pokèmon.","MYTHIC":"Pokèmon Class"}] diff --git a/msg/search.md b/texts/search.md similarity index 53% rename from msg/search.md rename to texts/search.md index 2805e85..abf0759 100644 --- a/msg/search.md +++ b/texts/search.md @@ -1,6 +1,6 @@ _Attention ! : entrez vos termes de recherche sans espaces !_ -Pour effectuer une recherche utilisez la commande ``{0}search site de recherche terme de la recherche`` --> [**wikileaks**](https://wikileaks.org) : Effectuer une recherche sur WikiLeaks, une organisation non gouvernemantale dont l'objectif premier est de publier des documents. +Pour effectuer une recherche utilisez la commande ``.search {site_de_recherche} {termes_recherche}`` -> [**docubuntu**](https://doc.ubuntu-fr.org) : Effectuer une recherche sur un paquet dans la Documentation du site ubuntu-fr.org. -> [**wikipedia**](https://fr.wikipedia.org) : Effectuer une recherche sur l'encyclopédie libre Wikipedia en Français ! +-> [**aur.archlinux**](https://aur.archlinux.org) : Effectuer une recherche sur Archlinux Aur ! diff --git a/texts/ytb.json b/texts/ytb.json new file mode 100644 index 0000000..4e451aa --- /dev/null +++ b/texts/ytb.json @@ -0,0 +1,15 @@ +{ + "1": {"name": "KickSama", "desc": "Des dessins annimés sympatiques par un jeune !", "url": "https://www.youtube.com/user/TheKickGuy"}, + "2": {"name": "U=RI", "desc": "Des vidéos interessantes sur l'électricité dont des tutoriels !", "url": "https://www.youtube.com/channel/UCVqx3vXNghSqUcVg2nmegYA"}, + "3": {"name": "Outout", "desc": "Outout, chaine vraiment nul et peu alimenté par mon créateur...", "url": "https://www.youtube.com/channel/UC2XpYyT5X5tq9UQpXdc1JaQ"}, + "4": {"name": "SuperJDay64", "desc": "Des LetsPlay sur Nintendo64 avec beaucoup de plombiers moustachus !", "url": "https://www.youtube.com/channel/UCjkQgODdmhR9I2TatJZtGSQ/"}, + "5": {"name": "Monsieur Plouf", "desc": "Vidéos comiques de critiques de jeux AAA avec un décors assez spécial !", "url": "https://www.youtube.com/channel/UCrt_PUTF9LdJyuDfXweHwuQ"}, + "6": {"name": "MaxEstLa", "desc": "Petite chaîne bien _sympatique_ sur la réaction de vidéos malsaine ! Très éducative x)", "url": "https://www.youtube.com/channel/UCsk9XguwTfgbenCZ4AlIcYQ"}, + "7": {"name": "Met-Hardware", "desc": "Chaine youtube sur l'hardware et des let's play bien sypatique !", "url": "https://www.youtube.com/channel/UC7rse81OttysA1m1yn_f-OA"}, + "8": {"name": "ElectronikHeart", "desc": "~~Test de produits de merde ~~ L'informatique sous un angle différent et agréable", "url": "https://www.youtube.com/user/ElectronikHeart"}, + "9": {"name": "Caljbeut", "desc": "Cartoon Trash ! Dessins annimés par un ancien de l'armée sur la politique et d'autre sujets ! **On est pas la pour rigoler**", "url": "https://www.youtube.com/channel/UCNM-UkIP1BL5jv9ZrN5JMCA"}, + "10": {"name": "Autodisciple", "desc": "Defis, Bitcoins, Geek, la vie quoi ! Sans oublier des défis de 30 Jours !", "url": "https://www.youtube.com/channel/UCDMxcev7u9Nf7KMJuyIm-BA"}, + "11": {"name": "CineAstuces", "desc": "Techniques, metiers du cinema, reportages et autres en rapport avec la cinématographie !", "url": "https://www.youtube.com/channel/UC--84qgkrqqqYivuuXuQIQg"}, + "12": {"name": "Epic Teaching of the History", "desc": "L'Histoire c'est hyper méga giga ultra _(j'ai pas été payé)_ drôle avec RaAak le renard ! ", "url": "https://www.youtube.com/channel/UCHwd4qMCzN4A2r6piZxTl4A"} +} +