Add Pokedex Ability and Move

This commit is contained in:
Dragon Fire
2021-01-22 18:14:32 -05:00
parent 62230d41e3
commit 793ca59e18
11 changed files with 212 additions and 11 deletions
+13
View File
@@ -0,0 +1,13 @@
const { firstUpperCase } = require('../../util/Util');
module.exports = class Ability {
constructor(store, data) {
this.store = store;
this.id = data.id;
const slugName = firstUpperCase(data.name).replaceAll('-', ' ');
this.name = data.names.length
? data.names.find(entry => entry.language.name === 'en').name
: slugName;
this.description = data.effect_entries.find(entry => entry.language.name === 'en').effect;
}
};
+29
View File
@@ -0,0 +1,29 @@
const Collection = require('@discordjs/collection');
const request = require('node-superfetch');
const Ability = require('./Ability');
module.exports = class AbilityStore extends Collection {
constructor(options) {
super(options);
}
async fetch(query) {
query = this.makeSlug(query);
if (!query) return null;
const found = this.find(pokemon => pokemon.slug === query);
if (found) return found;
try {
const { body } = await request.get(`https://pokeapi.co/api/v2/ability/${query}/`);
const ability = new Ability(this, body);
this.set(ability.id, ability);
return ability;
} catch (err) {
if (err.status === 404) return null;
throw err;
}
}
makeSlug(query) {
return encodeURIComponent(query.toLowerCase().replaceAll(' ', '-').replace(/[^a-zA-Z0-9-]/g, ''));
}
};
+25
View File
@@ -0,0 +1,25 @@
const { firstUpperCase } = require('../../util/Util');
module.exports = class Move {
constructor(store, data) {
this.store = store;
this.id = data.id;
const slugName = firstUpperCase(data.name).replaceAll('-', ' ');
this.name = data.names.length
? data.names.find(entry => entry.language.name === 'en').name
: slugName;
this.description = data.effect_entries.find(entry => entry.language.name === 'en').effect;
this.accuracy = data.accuracy;
this.effectChance = data.effect_chance;
this.power = data.power;
this.pp = data.pp;
this.type = firstUpperCase(data.type.name);
this.contestType = firstUpperCase(data.contest_type.name);
this.class = firstUpperCase(data.damage_class.name);
}
get cleanDescription() {
return this.description
.replace(/\$effect_chance/gi, this.effectChance);
}
};
+29
View File
@@ -0,0 +1,29 @@
const Collection = require('@discordjs/collection');
const request = require('node-superfetch');
const Move = require('./Move');
module.exports = class MoveStore extends Collection {
constructor(options) {
super(options);
}
async fetch(query) {
query = this.makeSlug(query);
if (!query) return null;
const found = this.find(pokemon => pokemon.slug === query);
if (found) return found;
try {
const { body } = await request.get(`https://pokeapi.co/api/v2/move/${query}/`);
const move = new Move(this, body);
this.set(move.id, move);
return move;
} catch (err) {
if (err.status === 404) return null;
throw err;
}
}
makeSlug(query) {
return encodeURIComponent(query.toLowerCase().replaceAll(' ', '-').replace(/[^a-zA-Z0-9-]/g, ''));
}
};
+7 -8
View File
@@ -179,8 +179,8 @@ module.exports = class Pokemon {
const { body: defaultBody } = await request.get(`https://pokeapi.co/api/v2/pokemon/${defaultVariety.id}`);
defaultVariety.types.push(...defaultBody.types.map(type => firstUpperCase(type.type.name)));
for (const ability of defaultBody.abilities) {
const { body: defaultAbilityBody } = await request.get(ability.ability.url);
defaultVariety.abilities.push(defaultAbilityBody.names.find(name => name.language.name === 'en').name);
const defaultAbilityData = await this.store.abilities.fetch(ability.ability.id);
defaultVariety.abilities.push(defaultAbilityData);
}
defaultVariety.stats = {
hp: defaultBody.stats.find(stat => stat.stat.name === 'hp').base_stat,
@@ -226,8 +226,8 @@ module.exports = class Pokemon {
|| baseStats.sDef !== variety.stats.sDef
|| baseStats.spd !== variety.stats.spd;
for (const ability of body.abilities) {
const { body: abilityBody } = await request.get(ability.ability.url);
variety.abilities.push(abilityBody.names.find(name => name.language.name === 'en').name);
const abilityData = await this.store.abilities.fetch(ability.ability.id);
variety.abilities.push(abilityData);
}
}
return this.varieties;
@@ -237,11 +237,10 @@ module.exports = class Pokemon {
for (const move of moves) {
const versionGroup = move.version_group_details.find(mve => mve.version_group.name === this.moveSetVersion);
if (!versionGroup || !versionGroup.level_learned_at) continue;
const { body: moveBody } = await request.get(move.move.url);
const nme = moveBody.names.find(name => name.language.name === 'en').name;
if (this.moveSet.some(mve => mve.name === nme)) continue;
const moveData = await this.store.moves.fetch(move.id);
if (this.moveSet.some(mve => mve.move.id === moveData.id)) continue;
this.moveSet.push({
name: nme,
move: moveData,
level: versionGroup.level_learned_at
});
}
+4
View File
@@ -1,6 +1,8 @@
const Collection = require('@discordjs/collection');
const request = require('node-superfetch');
const Pokemon = require('./Pokemon');
const MoveStore = require('./MoveStore');
const AbilityStore = require('./AbilityStore');
const missingno = require('../../assets/json/missingno');
module.exports = class PokemonStore extends Collection {
@@ -10,6 +12,8 @@ module.exports = class PokemonStore extends Collection {
this.pokemonCount = 898;
this.pokemonCountWithCry = 893;
this.smogonData = {};
this.moves = new MoveStore();
this.abilities = new AbilityStore();
}
async fetch(query) {