Last active
July 15, 2016 13:50
-
-
Save freundTech/720eaf35a30db3244d29e09bb6fd37bf to your computer and use it in GitHub Desktop.
German pokedex hangoutsbot
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
''' | |
pokemon.py -- a hangoutsbot plugin for retrieving information about pokemon, given a name | |
This uses the pokeapi.co API to retrieve the information. | |
Because Pokéapi limits requests to 300 requests per method, we store cached data for each Pokémon for 5 days - this should be sufficient for up to 1500 Pokémon overall. Currently there are approximately 811 Pokémon accessible through the Pokéapi so this should be more than enough. | |
''' | |
import hangups, plugins, asyncio, logging, datetime | |
import urllib.request | |
import json | |
import aiohttp, os, io | |
translations = { | |
'aalabyss': 'huntail', | |
'abra': 'abra', | |
'absol': 'absol', | |
'admurai': 'samurott', | |
'aerodactyl': 'aerodactyl', | |
'aeropteryx': 'archeops', | |
'akkup': 'charjabug', | |
'algitt': 'skrelp', | |
'alpollo': 'haunter', | |
'altaria': 'altaria', | |
'amagarga': 'aurorus', | |
'amarino': 'amaura', | |
'ambidiffel': 'ambipom', | |
'amonitas': 'omanyte', | |
'amoroso': 'omastar', | |
'ampharos': 'ampharos', | |
'amphizel': 'frogadier', | |
'anorith': 'anorith', | |
'apoquallyp': 'jellicent', | |
'aquana': 'vaporeon', | |
'arbok': 'arbok', | |
'arceus': 'arceus', | |
'ariados': 'ariados', | |
'arkani': 'arcanine', | |
'arktilas': 'avalugg', | |
'arktip': 'bergmite', | |
'arktos': 'articuno', | |
'armaldo': 'armaldo', | |
'austos': 'cloyster', | |
'azumarill': 'azumarill', | |
'azurill': 'azurill', | |
'baldorfish': 'qwilfish', | |
'balgoras': 'tyrunt', | |
'bamelin': 'buizel', | |
'banette': 'banette', | |
'barschuft': 'basculin', | |
'barschwa': 'feebas', | |
'bauz': 'rowlet', | |
'bibor': 'beedrill', | |
'bidifas': 'bibarel', | |
'bidiza': 'bidoof', | |
'bisaflor': 'venusaur', | |
'bisaknosp': 'ivysaur', | |
'bisasam': 'bulbasaur', | |
'bisofank': 'bouffalant', | |
'bissbark': 'stoutland', | |
'bithora': 'binacle', | |
'blanas': 'nuzleaf', | |
'blitza': 'jolteon', | |
'blubella': 'bellossom', | |
'bluzuk': 'venonat', | |
'bojelin': 'floatzel', | |
'bollterus': 'bastiodon', | |
'boreos': 'tornadus', | |
'botogel': 'delibird', | |
'branawarz': 'seismitoad', | |
'brigaron': 'chesnaught', | |
'brockoloss': 'gigalith', | |
'bronzel': 'bronzor', | |
'bronzong': 'bronzong', | |
'brutalanda': 'salamence', | |
'bummelz': 'slakoth', | |
'burmadame': 'wormadam', | |
'burmy': 'burmy', | |
'caesurio': 'bisharp', | |
'calamanero': 'malamar', | |
'camaub': 'numel', | |
'camerupt': 'camerupt', | |
'castellith': 'crustle', | |
'cavalanzas': 'escavalier', | |
'celebi': 'celebi', | |
'cerapendra': 'scolipede', | |
'chaneira': 'chansey', | |
'charmian': 'glameow', | |
'chelast': 'turtwig', | |
'chelcarain': 'grotle', | |
'chelterrar': 'torterra', | |
'chevrumm': 'gogoat', | |
'chillabell': 'cinccino', | |
'clavion': 'klefki', | |
'coiffwaff': 'furfrou', | |
'corasonn': 'corsola', | |
'cresselia': 'cresselia', | |
'damhirplex': 'stantler', | |
'darkrai': 'darkrai', | |
'dartignis': 'fletchinder', | |
'dartiri': 'fletchling', | |
'dedenne': 'dedenne', | |
'demeteros': 'landorus', | |
'deoxys': 'deoxys', | |
'deponitox': 'garbodor', | |
'despotar': 'tyranitar', | |
'dialga': 'dialga', | |
'diancie': 'diancie', | |
'digda': 'diglett', | |
'digdri': 'dugtrio', | |
'ditto': 'ditto', | |
'dodri': 'dodrio', | |
'dodu': 'doduo', | |
'donarion': 'vikavolt', | |
'donphan': 'donphan', | |
'dragonir': 'dragonair', | |
'dragoran': 'dragonite', | |
'draschel': 'shelgon', | |
'dratini': 'dratini', | |
'dressella': 'lilligant', | |
'driftlon': 'drifloon', | |
'drifzepeli': 'drifblim', | |
'duflor': 'gloom', | |
'dummisel': 'dunsparce', | |
'duodino': 'zweilous', | |
'duokles': 'doublade', | |
'durengard': 'aegislash', | |
'dusselgurr': 'pidove', | |
'echnatoll': 'cofagrigus', | |
'efem': 'noibat', | |
'efoserp': 'servine', | |
'eguana': 'helioptile', | |
'elekid': 'elekid', | |
'elektek': 'electabuzz', | |
'elevoltek': 'electivire', | |
'elezard': 'heliolisk', | |
'elezeba': 'blitzle', | |
'elfun': 'whimsicott', | |
'emolga': 'emolga', | |
'endivie': 'chikorita', | |
'eneco': 'skitty', | |
'enekoro': 'delcatty', | |
'entei': 'entei', | |
'enton': 'psyduck', | |
'entoron': 'golduck', | |
'evoli': 'eevee', | |
'farbeagle': 'smeargle', | |
'fasasnob': 'unfezant', | |
'feelinara': 'sylveon', | |
'felilou': 'purrloin', | |
'felino': 'wooper', | |
'fennexis': 'delphox', | |
'ferkokel': 'pignite', | |
'fermicula': 'durant', | |
'feurigel': 'cyndaquil', | |
'fiaro': 'talonflame', | |
'fiffyen': 'poochyena', | |
'finneon': 'finneon', | |
'firnontor': 'glalie', | |
'flabébé': 'flabébé', | |
'flamara': 'flareon', | |
'flambirex': 'emboar', | |
'flamiau': 'litten', | |
'flampion': 'darumaka', | |
'flampivian': 'darmanitan', | |
'flapteryx': 'archen', | |
'flauschling': 'swirlix', | |
'flegmon': 'slowpoke', | |
'fleknoil': 'woobat', | |
'flemmli': 'torchic', | |
'fletiamo': 'swoobat', | |
'floette': 'floette', | |
'floink': 'tepig', | |
'florges': 'florges', | |
'fluffeluff': 'igglybuff', | |
'flunkifer': 'mawile', | |
'flunschlik': 'stunfisk', | |
'flurmel': 'whismur', | |
'folikon': 'swadloon', | |
'folipurba': 'leafeon', | |
'formeo': 'castform', | |
'forstellka': 'forretress', | |
'frigometri': 'cryogonal', | |
'frizelbliz': 'electrike', | |
'frosdedje': 'froslass', | |
'froxy': 'froakie', | |
'fukano': 'growlithe', | |
'furnifraß': 'heatmor', | |
'fynx': 'fennekin', | |
'galagladi': 'gallade', | |
'galapaflos': 'tirtouga', | |
'gallopa': 'rapidash', | |
'ganovil': 'sandile', | |
'garados': 'gyarados', | |
'gastrodon': 'gastrodon', | |
'geckarbor': 'treecko', | |
'gehweiher': 'surskit', | |
'gelatini': 'vanillite', | |
'gelatroppo': 'vanillish', | |
'gelatwino': 'vanilluxe', | |
'genesect': 'genesect', | |
'gengar': 'gengar', | |
'georok': 'graveler', | |
'geowaz': 'golem', | |
'geradaks': 'linoone', | |
'geronimatz': 'rufflet', | |
'gewaldro': 'sceptile', | |
'giflor': 'vileplume', | |
'girafarig': 'girafarig', | |
'giratina': 'giratina', | |
'gladiantri': 'pawniard', | |
'glaziola': 'glaceon', | |
'glibunkel': 'croagunk', | |
'glumanda': 'charmander', | |
'glurak': 'charizard', | |
'glutexo': 'charmeleon', | |
'golbat': 'golbat', | |
'golbit': 'golett', | |
'goldini': 'goldeen', | |
'golgantes': 'golurk', | |
'golking': 'seaking', | |
'gramokles': 'honedge', | |
'granbull': 'granbull', | |
'grebbit': 'diggersby', | |
'griffel': 'aipom', | |
'grillchita': 'simisear', | |
'grillmak': 'pansear', | |
'groink': 'grumpig', | |
'groudon': 'groudon', | |
'grypheldis': 'mandibuzz', | |
'guardevoir': 'gardevoir', | |
'habitak': 'spearow', | |
'hariyama': 'hariyama', | |
'haspiror': 'buneary', | |
'heatran': 'heatran', | |
'heiteira': 'blissey', | |
'hippopotas': 'hippopotas', | |
'hippoterus': 'hippowdon', | |
'honweisel': 'vespiquen', | |
'hooh': 'hooh', | |
'hoopa': 'hoopa', | |
'hoothoot': 'hoothoot', | |
'hoppspross': 'hoppip', | |
'hornliu': 'weedle', | |
'hubelupf': 'skiploom', | |
'hundemon': 'houndoom', | |
'hunduster': 'houndour', | |
'hutsassa': 'amoonguss', | |
'hydragil': 'accelgor', | |
'hydropi': 'mudkip', | |
'hypno': 'hypno', | |
'hypnomorba': 'gothorita', | |
'ibitak': 'fearow', | |
'icognito': 'unown', | |
'igamaro': 'chespin', | |
'igastarnish': 'quilladin', | |
'igelavar': 'quilava', | |
'ignivor': 'larvesta', | |
'iksbat': 'crobat', | |
'illumise': 'illumise', | |
'impergator': 'feraligatr', | |
'impoleon': 'empoleon', | |
'irokex': 'scrafty', | |
'irrbis': 'pumpkaboo', | |
'iscalar': 'inkay', | |
'isso': 'wynaut', | |
'jirachi': 'jirachi', | |
'jiutesto': 'throh', | |
'jugong': 'dewgong', | |
'jungglut': 'combusken', | |
'jurob': 'seel', | |
'kabuto': 'kabuto', | |
'kabutops': 'kabutops', | |
'kadabra': 'kadabra', | |
'kangama': 'kangaskhan', | |
'kanivanha': 'carvanha', | |
'kapilz': 'breloom', | |
'kapoera': 'hitmontop', | |
'kappalores': 'ludicolo', | |
'kapuno': 'deino', | |
'kapuriki': 'tapukoko', | |
'karadonis': 'sawk', | |
'karippas': 'carracosta', | |
'karnimani': 'totodile', | |
'karpador': 'magikarp', | |
'kastadur': 'ferroseed', | |
'kaumalat': 'gible', | |
'kecleon': 'kecleon', | |
'keifel': 'piloswine', | |
'keldeo': 'keldeo', | |
'kicklee': 'hitmonlee', | |
'kiesling': 'roggenrola', | |
'kikugi': 'cherubi', | |
'kindwurm': 'bagon', | |
'kingler': 'kingler', | |
'kinoso': 'cherrim', | |
'kirlia': 'kirlia', | |
'kleinstein': 'geodude', | |
'kleoparda': 'liepard', | |
'klikdiklak': 'klinklang', | |
'klikk': 'klink', | |
'kliklak': 'klang', | |
'klingplim': 'chingling', | |
'knacklion': 'trapinch', | |
'knakrack': 'garchomp', | |
'knarksel': 'gabite', | |
'knilz': 'shroomish', | |
'knirfish': 'bruxish', | |
'knofensa': 'bellsprout', | |
'knogga': 'marowak', | |
'knospi': 'budew', | |
'knuddeluff': 'wigglytuff', | |
'koalelu': 'komala', | |
'kobalium': 'cobalion', | |
'koknodon': 'cranidos', | |
'kokowei': 'exeggutor', | |
'kokuna': 'kakuna', | |
'krabby': 'krabby', | |
'krakeelo': 'loudred', | |
'kramshef': 'honchkrow', | |
'kramurx': 'murkrow', | |
'krawumms': 'exploud', | |
'krebscorps': 'corphish', | |
'krebutack': 'crawdaunt', | |
'kronjuwild': 'sawsbuck', | |
'kryppuk': 'spiritomb', | |
'kukmarda': 'watchog', | |
'kussilla': 'smoochum', | |
'kyogre': 'kyogre', | |
'kyurem': 'kyurem', | |
'lahmus': 'slowbro', | |
'lampi': 'chinchou', | |
'lanturn': 'lanturn', | |
'lapras': 'lapras', | |
'larvitar': 'larvitar', | |
'laschoking': 'slowking', | |
'laternecto': 'lampent', | |
'latias': 'latias', | |
'latios': 'latios', | |
'laukaps': 'karrablast', | |
'lavados': 'moltres', | |
'ledian': 'ledian', | |
'ledyba': 'ledyba', | |
'lektrobal': 'electrode', | |
'lepumentas': 'claydol', | |
'letarking': 'slaking', | |
'leufeo': 'litleo', | |
'libelldra': 'flygon', | |
'lichtel': 'litwick', | |
'liebiskus': 'luvdisc', | |
'liliep': 'lileep', | |
'lilminip': 'petilil', | |
'linfu': 'mienfoo', | |
'lithomith': 'dwebble', | |
'lohgock': 'blaziken', | |
'lombrero': 'lombre', | |
'lorblatt': 'bayleef', | |
'loturzel': 'lotad', | |
'lucario': 'lucario', | |
'lugia': 'lugia', | |
'lumineon': 'lumineon', | |
'lunala': 'lunala', | |
'lunastein': 'lunatone', | |
'luxio': 'luxio', | |
'luxtra': 'luxray', | |
'mabula': 'grubbin', | |
'machollo': 'machop', | |
'machomei': 'machamp', | |
'magbrant': 'magmortar', | |
'magby': 'magby', | |
'magcargo': 'magcargo', | |
'magearna': 'magearna', | |
'magmar': 'magmar', | |
'magnayen': 'mightyena', | |
'magnetilo': 'magnemite', | |
'magneton': 'magneton', | |
'magnezone': 'magnezone', | |
'makabaja': 'yamask', | |
'makuhita': 'makuhita', | |
'mamolida': 'alomomola', | |
'mampfaxo': 'munchlax', | |
'mamutel': 'mamoswine', | |
'manaphy': 'manaphy', | |
'mangunior': 'yungoos', | |
'mantax': 'mantine', | |
'mantirps': 'mantyke', | |
'maracamba': 'maractus', | |
'marill': 'marill', | |
'maschock': 'machoke', | |
'maskeregen': 'masquerain', | |
'matrifol': 'leavanny', | |
'mauzi': 'meowth', | |
'maxax': 'haxorus', | |
'mebrana': 'palpitoad', | |
'meditalis': 'medicham', | |
'meditie': 'meditite', | |
'megalon': 'beheeyem', | |
'meganie': 'meganium', | |
'meistagrif': 'conkeldurr', | |
'meloetta': 'meloetta', | |
'menki': 'mankey', | |
'metagross': 'metagross', | |
'metang': 'metang', | |
'mew': 'mew', | |
'mewtu': 'mewtwo', | |
'milotic': 'milotic', | |
'miltank': 'miltank', | |
'milza': 'axew', | |
'minun': 'minun', | |
'mitodos': 'duosion', | |
'mobai': 'bonsly', | |
'mogelbaum': 'sudowoodo', | |
'mollimorba': 'gothita', | |
'molunk': 'salandit', | |
'monargoras': 'tyrantrum', | |
'monozyto': 'solosis', | |
'moorabbel': 'marshtomp', | |
'morbitesse': 'gothitelle', | |
'morlord': 'quagsire', | |
'moterpel': 'mothim', | |
'muntier': 'vigoroth', | |
'muschas': 'shellder', | |
'myrapla': 'oddish', | |
'mähikel': 'skiddo', | |
'nachtara': 'umbreon', | |
'nagelotz': 'patrat', | |
'nasgnet': 'nosepass', | |
'natu': 'natu', | |
'navitaub': 'tranquill', | |
'nebulak': 'gastly', | |
'nidoking': 'nidoking', | |
'nidoqueen': 'nidoqueen', | |
'nidoran': 'nidoran', | |
'nidorina': 'nidorina', | |
'nidorino': 'nidorino', | |
'nincada': 'nincada', | |
'ninjask': 'ninjask', | |
'ninjatom': 'shedinja', | |
'nockchan': 'hitmonchan', | |
'noctuh': 'noctowl', | |
'noktuska': 'cacturne', | |
'octillery': 'octillery', | |
'ohrdoch': 'audino', | |
'omot': 'venomoth', | |
'onix': 'onix', | |
'ottaro': 'oshawott', | |
'owei': 'exeggcute', | |
'pachirisu': 'pachirisu', | |
'palimpalim': 'chimecho', | |
'palkia': 'palkia', | |
'pampam': 'pancham', | |
'pandagro': 'pangoro', | |
'pandir': 'spinda', | |
'panekon': 'cascoon', | |
'panferno': 'infernape', | |
'panflam': 'chimchar', | |
'panpyro': 'monferno', | |
'pantimimi': 'mimejr', | |
'pantimos': 'mrmime', | |
'panzaeron': 'skarmory', | |
'papinella': 'beautifly', | |
'papungha': 'jumpluff', | |
'paragoni': 'phantump', | |
'paras': 'paras', | |
'parasek': 'parasect', | |
'parfi': 'spritzee', | |
'parfinesse': 'aromatisse', | |
'pelipper': 'pelipper', | |
'peppeck': 'pikipek', | |
'perlu': 'clamperl', | |
'petznief': 'cubchoo', | |
'phanpy': 'phanpy', | |
'phione': 'phione', | |
'piccolente': 'ducklett', | |
'pichu': 'pichu', | |
'picochilla': 'minccino', | |
'piepi': 'clefairy', | |
'pii': 'cleffa', | |
'pikachu': 'pikachu', | |
'pinsir': 'pinsir', | |
'piondragi': 'drapion', | |
'pionskora': 'skorupi', | |
'pixi': 'clefable', | |
'plaudagei': 'chatot', | |
'plinfa': 'piplup', | |
'pliprin': 'prinplup', | |
'plusle': 'plusle', | |
'ponita': 'ponyta', | |
'porenta': 'farfetchd', | |
'porygon': 'porygon', | |
'porygon2': 'porygon2', | |
'porygonz': 'porygonz', | |
'pottrott': 'shuckle', | |
'praktibalk': 'timburr', | |
'psiana': 'espeon', | |
'psiau': 'espurr', | |
'psiaugon': 'meowstic', | |
'pudox': 'dustox', | |
'pummeluff': 'jigglypuff', | |
'pumpdjinn': 'gourgeist', | |
'pupitar': 'pupitar', | |
'puponcho': 'spewpa', | |
'puppance': 'baltoy', | |
'purmel': 'scatterbug', | |
'pygraulon': 'elgyem', | |
'pyroleo': 'pyroar', | |
'quabbel': 'frillish', | |
'quajutsu': 'greninja', | |
'quappo': 'poliwrath', | |
'quapsel': 'poliwag', | |
'quaputzi': 'poliwhirl', | |
'quaxo': 'politoed', | |
'quiekel': 'swinub', | |
'qurtel': 'torkoal', | |
'rabauz': 'tyrogue', | |
'rabigator': 'krookodile', | |
'raichu': 'raichu', | |
'raikou': 'raikou', | |
'rameidon': 'rampardos', | |
'ramoth': 'volcarona', | |
'rasaff': 'primeape', | |
'rattfratz': 'rattata', | |
'rattikarl': 'raticate', | |
'raupy': 'caterpie', | |
'rayquaza': 'rayquaza', | |
'regice': 'regice', | |
'regigigas': 'regigigas', | |
'regirock': 'regirock', | |
'registeel': 'registeel', | |
'relaxo': 'snorlax', | |
'relicanth': 'relicanth', | |
'remoraid': 'remoraid', | |
'reptain': 'grovyle', | |
'reshiram': 'reshiram', | |
'resladero': 'hawlucha', | |
'rettan': 'ekans', | |
'rexblisar': 'abomasnow', | |
'rihorn': 'rhyhorn', | |
'rihornior': 'rhyperior', | |
'riolu': 'riolu', | |
'rizeros': 'rhydon', | |
'robball': 'popplio', | |
'rocara': 'carbink', | |
'rokkaiman': 'krokorok', | |
'rollum': 'whirlipede', | |
'roselia': 'roselia', | |
'roserade': 'roserade', | |
'rossana': 'jynx', | |
'rotom': 'rotom', | |
'rotomurf': 'drilbur', | |
'rutena': 'braixen', | |
'sabbaione': 'slurpuff', | |
'safcon': 'metapod', | |
'saganabyss': 'gorebyss', | |
'samurzel': 'seedot', | |
'sandamer': 'sandslash', | |
'sandan': 'sandshrew', | |
'sarzenia': 'victreebel', | |
'scampisto': 'clauncher', | |
'schalellos': 'shellos', | |
'schallquap': 'tympole', | |
'schaloko': 'silcoon', | |
'scherox': 'scizor', | |
'schiggy': 'squirtle', | |
'schillok': 'wartortle', | |
'schilterus': 'shieldon', | |
'schlapor': 'lopunny', | |
'schlukwech': 'swalot', | |
'schluppuck': 'gulpin', | |
'schlurp': 'lickitung', | |
'schlurplek': 'lickilicky', | |
'schmerbe': 'barboach', | |
'schneckmag': 'slugma', | |
'schneppke': 'snorunt', | |
'schnuthelm': 'shelmet', | |
'schwalbini': 'taillow', | |
'schwalboss': 'swellow', | |
'scoppel': 'bunnelby', | |
'sedimantur': 'boldore', | |
'seedraking': 'kingdra', | |
'seejong': 'sealeo', | |
'seemon': 'seadra', | |
'seemops': 'spheal', | |
'seeper': 'horsea', | |
'selfe': 'uxie', | |
'sengo': 'zangoose', | |
'senlong': 'drampa', | |
'serpifeu': 'snivy', | |
'serpiroyal': 'serperior', | |
'sesokitz': 'deerling', | |
'shardrago': 'druddigon', | |
'sharfax': 'fraxure', | |
'shaymin': 'shaymin', | |
'sheinux': 'shinx', | |
'shnebedeck': 'snover', | |
'shnurgarst': 'purugly', | |
'shuppet': 'shuppet', | |
'siberio': 'beartic', | |
'sichlor': 'scyther', | |
'simsala': 'alakazam', | |
'skallyk': 'vullaby', | |
'skaraborn': 'heracross', | |
'skelabra': 'chandelure', | |
'skorgla': 'gligar', | |
'skorgro': 'gliscor', | |
'skunkapuh': 'stunky', | |
'skunktank': 'skuntank', | |
'sleima': 'grimer', | |
'sleimok': 'muk', | |
'smettbo': 'butterfree', | |
'smogmog': 'weezing', | |
'smogon': 'koffing', | |
'snibunna': 'weavile', | |
'sniebel': 'sneasel', | |
'snobilikat': 'persian', | |
'snubbull': 'snubbull', | |
'sodachita': 'simipour', | |
'sodamak': 'panpour', | |
'solgaleo': 'solgaleo', | |
'somniam': 'munna', | |
'somnivora': 'musharna', | |
'sonnfel': 'solrock', | |
'sonnflora': 'sunflora', | |
'sonnkern': 'sunkern', | |
'spoink': 'spoink', | |
'stahlos': 'steelix', | |
'stalobor': 'excadrill', | |
'staralili': 'starly', | |
'staraptor': 'staraptor', | |
'staravia': 'staravia', | |
'starmie': 'starmie', | |
'sterndu': 'staryu', | |
'stolloss': 'aggron', | |
'stollrak': 'lairon', | |
'stollunior': 'aron', | |
'strawickl': 'sewaddle', | |
'strepoli': 'gurdurr', | |
'suicune': 'suicune', | |
'sumpex': 'swampert', | |
'swaroness': 'swanna', | |
'symvolara': 'sigilyph', | |
'tandrak': 'dragalge', | |
'tangela': 'tangela', | |
'tangoloss': 'tangrowth', | |
'tanhel': 'beldum', | |
'tannza': 'pineco', | |
'tarnpignon': 'foongus', | |
'tauboga': 'pidgeotto', | |
'tauboss': 'pidgeot', | |
'taubsi': 'pidgey', | |
'tauros': 'tauros', | |
'teddiursa': 'teddiursa', | |
'tengulist': 'shiftry', | |
'tentacha': 'tentacool', | |
'tentantel': 'ferrothorn', | |
'tentoxa': 'tentacruel', | |
'terrakium': 'terrakion', | |
'terribark': 'herdier', | |
'thanathora': 'barbaracle', | |
'tobutz': 'azelf', | |
'togedemaru': 'togedemaru', | |
'togekiss': 'togekiss', | |
'togepi': 'togepi', | |
'togetic': 'togetic', | |
'tohaido': 'sharpedo', | |
'tornupto': 'typhlosion', | |
'toxiped': 'venipede', | |
'toxiquak': 'toxicroak', | |
'tragosso': 'cubone', | |
'trasla': 'ralts', | |
'traumato': 'drowzee', | |
'traunfugil': 'misdreavus', | |
'traunmagil': 'mismagius', | |
'trikephalo': 'hydreigon', | |
'trombork': 'trevenant', | |
'tropius': 'tropius', | |
'turtok': 'blastoise', | |
'tuska': 'cacnea', | |
'tyracroc': 'croconaw', | |
'uhafnir': 'noivern', | |
'ultrigaria': 'weepinbell', | |
'unratütox': 'trubbish', | |
'ursaring': 'ursaring', | |
'vegichita': 'simisage', | |
'vegimak': 'pansage', | |
'venuflibis': 'carnivine', | |
'vesprit': 'mesprit', | |
'vibrava': 'vibrava', | |
'victini': 'victini', | |
'vipitis': 'seviper', | |
'viridium': 'virizion', | |
'viscargot': 'sliggoo', | |
'viscogon': 'goodra', | |
'viscora': 'goomy', | |
'vivillon': 'vivillon', | |
'volbeat': 'volbeat', | |
'volcanion': 'volcanion', | |
'voltenso': 'manectric', | |
'voltilamm': 'mareep', | |
'voltobal': 'voltorb', | |
'voltolos': 'thundurus', | |
'voltula': 'galvantula', | |
'voluminas': 'probopass', | |
'vulnona': 'ninetales', | |
'vulpix': 'vulpix', | |
'waaty': 'flaaffy', | |
'wablu': 'swablu', | |
'wadribie': 'combee', | |
'wailmer': 'wailmer', | |
'wailord': 'wailord', | |
'walraisa': 'walrein', | |
'washakwil': 'braviary', | |
'wattzapf': 'joltik', | |
'waumboll': 'cottonee', | |
'waumpel': 'wurmple', | |
'webarak': 'spinarak', | |
'welsar': 'whiscash', | |
'wielie': 'cradily', | |
'wiesenior': 'furret', | |
'wieshu': 'mienshao', | |
'wiesor': 'sentret', | |
'wingull': 'wingull', | |
'woingenau': 'wobbuffet', | |
'wommel': 'cutiefly', | |
'wonneira': 'happiny', | |
'wuffels': 'rockruff', | |
'wummer': 'clawitzer', | |
'xatu': 'xatu', | |
'xerneas': 'xerneas', | |
'yanma': 'yanma', | |
'yanmega': 'yanmega', | |
'yorkleff': 'lillipup', | |
'yveltal': 'yveltal', | |
'zapdos': 'zapdos', | |
'zapplalek': 'eelektrik', | |
'zapplarang': 'eelektross', | |
'zapplardin': 'tynamo', | |
'zebritz': 'zebstrika', | |
'zekrom': 'zekrom', | |
'zigzachs': 'zigzagoon', | |
'zirpeise': 'kricketune', | |
'zirpurze': 'kricketot', | |
'zobiris': 'sableye', | |
'zoroark': 'zoroark', | |
'zorua': 'zorua', | |
'zubat': 'zubat', | |
'zurrokex': 'scraggy', | |
'zwirrfinst': 'dusknoir', | |
'zwirrklop': 'dusclops', | |
'zwirrlicht': 'duskull', | |
'zwottronin': 'dewott', | |
'zygarde': 'zygarde', | |
'zytomega': 'reuniclus' | |
} | |
logger = logging.getLogger(__name__) | |
def _initialise(bot): | |
plugins.register_admin_command(["clearpokedex"]) | |
plugins.register_user_command(["pokedex"]) | |
def comparetypes(data1, data2): | |
weak1 = [x['name'] for x in data1['damage_relations']['double_damage_from']] | |
weak2 = [x['name'] for x in data2['damage_relations']['double_damage_from']] | |
resist1 = [x['name'] for x in data1['damage_relations']['half_damage_from']] | |
resist2 = [x['name'] for x in data2['damage_relations']['half_damage_from']] | |
immune1 = [x['name'] for x in data1['damage_relations']['no_damage_from']] | |
immune2 = [x['name'] for x in data2['damage_relations']['no_damage_from']] | |
immune = set(immune1).union(immune2) | |
four = set(weak1).intersection(weak2).difference(immune) | |
quarter = set(resist1).intersection(resist2).difference(immune) | |
two = set(weak1).symmetric_difference(weak2).difference(set(resist1).symmetric_difference(resist2)).difference(immune) | |
half = ((set(resist1).symmetric_difference(resist2)).difference(set(weak1).symmetric_difference(weak2))).difference(immune) | |
matchup = {'4x':four,'2x':two,'1/2':half,'1/4':quarter,'immune':immune} | |
return matchup | |
@asyncio.coroutine | |
def clearpokedex(bot, event): | |
'''Clear the cached pokedex - useful when the data seems outdated.''' | |
bot.memory.set_by_path(["pokedex"], {}) | |
yield from bot.coro_send_message(event.conv, "Pokedex cache cleared") | |
def gettypefromcache(bot, pkmntype): | |
if not bot.memory.exists(["pokedex", "pokemontypes"]): | |
bot.memory.set_by_path(["pokedex", "pokemontypes"], {}) | |
return None | |
else: | |
if not bot.memory.exists(["pokedex", "pokemontypes", pkmntype]): | |
return None | |
elif bot.get_by_path(["pokedex", "pokemontypes", pkmntype, "expires"]) < str(datetime.datetime.now()): | |
logger.info("Cached data for {} type expired.".format(pkmntype)) | |
return None | |
else: | |
return bot.get_by_path(["pokedex","pokemontypes",pkmntype]) | |
@asyncio.coroutine | |
def cachepkmntype(bot, pkmntypedata): | |
if not bot.memory.exists(["pokedex", "pokemontypes"]): | |
bot.memory.set_by_path(["pokedex", "pokemontypes"], {}) | |
bot.memory.set_by_path(["pokedex", "pokemontypes", pkmntypedata["name"]], {"name":pkmntypedata["name"],"damage_relations":pkmntypedata['damage_relations'],'expires':str(datetime.datetime.now() + datetime.timedelta(days=5))}) | |
logger.info("Writing {} type data into cache".format(pkmntypedata['name'])) | |
def getpkmntype(bot, pkmntype): | |
url = "http://pokeapi.co/api/v2/type/{}".format(pkmntype.lower()) | |
request = urllib.request.Request(url, headers = {"User-agent":"Mozilla/5.0"}) | |
try: | |
data = json.loads(urllib.request.urlopen(request).read().decode("utf-8")) | |
except: | |
return None | |
return data | |
def getfromcache(bot, pokemonname): | |
if not bot.memory.exists(["pokedex"]): | |
bot.memory.set_by_path(["pokedex"], {}) | |
if not bot.memory.exists(["pokedex", pokemonname]): | |
logger.info("{} not in cache.".format(pokemonname)) | |
return None | |
else: | |
try: | |
if bot.memory.get_by_path(["pokedex", pokemonname, "expires"]) < str(datetime.datetime.now()): | |
logger.info("Cached data for {} expired.".format(pokemonname)) | |
return None | |
except: | |
logger.info("No cache timestamp for {} available.".format(pokemonname)) | |
return None | |
return bot.memory.get_by_path(["pokedex", pokemonname]) | |
return | |
def cachepkmn(bot, pkmndata, name): | |
if not bot.memory.exists(["pokedex"]): | |
bot.memory.set_by_path(["pokedex"], {}) | |
bot.memory.set_by_path(["pokedex", name], {"id":pkmndata["id"],"types":pkmndata["types"],"expires": str(datetime.datetime.now() + datetime.timedelta(days=5))}) | |
logger.info("Writing {} into cache".format(name)) | |
return | |
def gettype(bot, pkmntype, logger): | |
cache = gettypefromcache(bot, pkmntype) | |
if cache: | |
return cache | |
else: | |
typedata = getpkmntype(bot, pkmntype) | |
if typedata: | |
cachepkmntype(bot, typedata) | |
return typedata | |
return | |
@asyncio.coroutine | |
def pokedex(bot, event, pokemon): | |
'''Returns the number, types, weaknesses and image of a pokemon''' | |
if pokemon.isdigit(): return | |
if pokemon.lower() in translations: | |
pokemon = translations[pokemon.lower()] | |
url = "http://pokeapi.co/api/v2/pokemon/{}/".format(pokemon.lower()) | |
request = urllib.request.Request(url, headers = {"User-agent":"Mozilla/5.0"}) | |
cache = getfromcache(bot, pokemon.lower()) | |
if cache: | |
logger.info("Found {} in cache".format(pokemon.lower())) | |
data = cache | |
pkmn = "<b><a href='http://pokemondb.net/pokedex/{}'>{}</a></b> [#{}]".format(pokemon.lower(),pokemon.capitalize(),data["id"]) | |
else: | |
logger.info("{} not found in cache OR cache expired, getting from pokeapi".format(pokemon.capitalize())) | |
try: | |
data = json.loads(urllib.request.urlopen(request).read().decode("utf-8")) | |
except urllib.error.URLError as e: | |
yield from bot.coro_send_message(event.conv, "{}: Error: {}".format(event.user.full_name, json.loads(e.read().decode("utf8","ignore"))['detail'])) | |
return | |
cachepkmn(bot, data, pokemon.lower()) | |
pkmn = "<b><a href='http://pokemondb.net/pokedex/{}'>{}</a></b> (#{})".format(pokemon.lower(),pokemon.capitalize(),data["id"]) | |
type1 = gettype(bot, data['types'][0]['type']['name'], logger) | |
pkmn = pkmn + "<br><b>Type</b>: <a href='http://pokemondb.net/type/{}'>{}</a>".format(data['types'][0]["type"]["name"],data['types'][0]["type"]["name"].capitalize()) | |
if len(data['types']) > 1 : | |
type2 = gettype(bot, data['types'][1]['type']['name'], logger) | |
pkmn = pkmn + " / <a href='http://pokemondb.net/type/{}'>{}</a>".format(data['types'][1]["type"]["name"],data['types'][1]["type"]["name"].capitalize()) | |
if type1 and type2: | |
matchups = comparetypes(type1, type2) | |
else: | |
if type1: | |
matchups = {'2x':type1['damage_relations']['double_damage_from'],'1/2':type1['damage_relations']['half_damage_from'],'immune':type1['damage_relations']['no_damage_from']} | |
matches = "" | |
if matchups: | |
for x in matchups: | |
if len(matchups[x]) > 0: | |
matches = matches + "<br><b>{}</b>: ".format(x.capitalize()) | |
for y in matchups[x]: | |
if isinstance(y, dict): | |
matches = matches + " <a href='http://pokemondb.net/type/{}'>{}</a>".format(y['name'].lower(),y['name'].capitalize()) | |
else: | |
matches = matches + " <a href='http://pokemondb.net/type/{}'>{}</a>".format(y.lower(),y.capitalize()) | |
else: | |
matches = "<i>Type matchups not currently available. Sorry :(</i>" | |
pkmn = pkmn + matches | |
link_image = "http://img.pokemondb.net/artwork/{}.jpg".format(pokemon.lower()) | |
filename = os.path.basename(link_image) | |
r = yield from aiohttp.request('get', link_image) | |
raw = yield from r.read() | |
image_data = io.BytesIO(raw) | |
image_id = yield from bot._client.upload_image(image_data, filename=filename) | |
yield from bot.coro_send_message(event.conv, pkmn, image_id=image_id) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment