mirror of
https://github.com/arthur-pbty/xiao.git
synced 2026-06-25 06:42:51 +02:00
Clean up Pokemon fetch functions
This commit is contained in:
+1
-1
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "xiao",
|
"name": "xiao",
|
||||||
"version": "126.6.5",
|
"version": "126.6.6",
|
||||||
"description": "Your personal server companion.",
|
"description": "Your personal server companion.",
|
||||||
"main": "Xiao.js",
|
"main": "Xiao.js",
|
||||||
"scripts": {
|
"scripts": {
|
||||||
|
|||||||
@@ -115,13 +115,18 @@ module.exports = class Pokemon {
|
|||||||
|
|
||||||
async fetchGameData() {
|
async fetchGameData() {
|
||||||
if (this.gameDataCached) return this;
|
if (this.gameDataCached) return this;
|
||||||
|
await this.fetchDefaultVariety();
|
||||||
|
await this.fetchOtherVarieties();
|
||||||
|
await this.fetchChain();
|
||||||
|
this.gameDataCached = true;
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
async fetchDefaultVariety() {
|
||||||
const defaultVariety = this.varieties.find(variety => variety.default);
|
const defaultVariety = this.varieties.find(variety => variety.default);
|
||||||
const { body: defaultBody } = await request.get(`https://pokeapi.co/api/v2/pokemon/${defaultVariety.id}`);
|
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)));
|
defaultVariety.types.push(...defaultBody.types.map(type => firstUpperCase(type.type.name)));
|
||||||
for (const ability of defaultBody.abilities) {
|
this.fetchAbilities(defaultBody.abilities);
|
||||||
const { body: defaultAbilityBody } = await request.get(ability.ability.url);
|
|
||||||
defaultVariety.abilities.push(defaultAbilityBody.names.find(name => name.language.name === 'en').name);
|
|
||||||
}
|
|
||||||
this.stats = {
|
this.stats = {
|
||||||
hp: defaultBody.stats.find(stat => stat.stat.name === 'hp').base_stat,
|
hp: defaultBody.stats.find(stat => stat.stat.name === 'hp').base_stat,
|
||||||
atk: defaultBody.stats.find(stat => stat.stat.name === 'attack').base_stat,
|
atk: defaultBody.stats.find(stat => stat.stat.name === 'attack').base_stat,
|
||||||
@@ -133,7 +138,37 @@ module.exports = class Pokemon {
|
|||||||
const inSwordShield = defaultBody.moves
|
const inSwordShield = defaultBody.moves
|
||||||
.some(move => move.version_group_details.some(mve => mve.version_group.name === 'sword-shield'));
|
.some(move => move.version_group_details.some(mve => mve.version_group.name === 'sword-shield'));
|
||||||
this.moveSetVersion = inSwordShield ? 'sword-shield' : 'ultra-sun-ultra-moon';
|
this.moveSetVersion = inSwordShield ? 'sword-shield' : 'ultra-sun-ultra-moon';
|
||||||
for (const move of defaultBody.moves) {
|
this.height = defaultBody.height * 3.94;
|
||||||
|
this.weight = defaultBody.weight * 0.2205;
|
||||||
|
this.encountersURL = defaultBody.location_area_encounters;
|
||||||
|
await this.fetchMoves(defaultBody.moves);
|
||||||
|
await this.fetchHeldItems(defaultBody.held_items);
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
async fetchOtherVarieties() {
|
||||||
|
const defaultVariety = this.varieties.find(variety => variety.default);
|
||||||
|
for (const variety of this.varieties) {
|
||||||
|
if (variety.id === defaultVariety.id) continue;
|
||||||
|
const { body } = await request.get(`https://pokeapi.co/api/v2/pokemon/${variety.id}`);
|
||||||
|
const { body: formBody } = await request.get(`https://pokeapi.co/api/v2/pokemon-form/${variety.id}`);
|
||||||
|
variety.types.push(...body.types.map(type => firstUpperCase(type.type.name)));
|
||||||
|
variety.mega = formBody.is_mega || false;
|
||||||
|
await this.fetchAbilities(body.abilities);
|
||||||
|
}
|
||||||
|
return this.varieties;
|
||||||
|
}
|
||||||
|
|
||||||
|
async fetchAbilities(abilities) {
|
||||||
|
for (const ability of abilities) {
|
||||||
|
const { body: defaultAbilityBody } = await request.get(ability.ability.url);
|
||||||
|
abilities.push(defaultAbilityBody.names.find(name => name.language.name === 'en').name);
|
||||||
|
}
|
||||||
|
return abilities;
|
||||||
|
}
|
||||||
|
|
||||||
|
async fetchMoves(moves) {
|
||||||
|
for (const move of moves) {
|
||||||
const versionGroup = move.version_group_details.find(mve => mve.version_group.name === this.moveSetVersion);
|
const versionGroup = move.version_group_details.find(mve => mve.version_group.name === this.moveSetVersion);
|
||||||
if (!versionGroup || !versionGroup.level_learned_at) continue;
|
if (!versionGroup || !versionGroup.level_learned_at) continue;
|
||||||
const { body: moveBody } = await request.get(move.move.url);
|
const { body: moveBody } = await request.get(move.move.url);
|
||||||
@@ -145,36 +180,27 @@ module.exports = class Pokemon {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
this.moveSet = this.moveSet.sort((a, b) => a.level - b.level);
|
this.moveSet = this.moveSet.sort((a, b) => a.level - b.level);
|
||||||
for (const variety of this.varieties) {
|
return this.moveSet;
|
||||||
if (variety.id === defaultVariety.id) continue;
|
}
|
||||||
const { body } = await request.get(`https://pokeapi.co/api/v2/pokemon/${variety.id}`);
|
|
||||||
const { body: formBody } = await request.get(`https://pokeapi.co/api/v2/pokemon-form/${variety.id}`);
|
async fetchHeldItems(heldItems) {
|
||||||
variety.types.push(...body.types.map(type => firstUpperCase(type.type.name)));
|
this.heldItems = heldItems
|
||||||
variety.mega = formBody.is_mega || false;
|
|
||||||
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);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
this.height = defaultBody.height * 3.94;
|
|
||||||
this.weight = defaultBody.weight * 0.2205;
|
|
||||||
this.heldItems = defaultBody.held_items
|
|
||||||
.filter(item => item.version_details.some(version => {
|
.filter(item => item.version_details.some(version => {
|
||||||
const inSwordShield2 = version.version.name === 'sword' || version.version.name === 'shield';
|
const inSwordShield = version.version.name === 'sword' || version.version.name === 'shield';
|
||||||
if (inSwordShield2) return true;
|
if (inSwordShield) return true;
|
||||||
if (!inSwordShield2 && (version.version.name === 'ultra-sun' || version.version.name === 'ultra-moon')) {
|
if (!inSwordShield && (version.version.name === 'ultra-sun' || version.version.name === 'ultra-moon')) {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
}))
|
}))
|
||||||
.map(item => {
|
.map(item => {
|
||||||
const inSwordShield2 = item.version_details
|
const inSwordShield = item.version_details
|
||||||
.some(version => version.version.name === 'sword' || version.version.name === 'shield');
|
.some(version => version.version.name === 'sword' || version.version.name === 'shield');
|
||||||
const { rarity } = item.version_details
|
const { rarity } = item.version_details
|
||||||
.find(version => {
|
.find(version => {
|
||||||
if (inSwordShield2) return true;
|
if (inSwordShield) return true;
|
||||||
const sunMoon = version.version.name === 'ultra-sun' || version.version.name === 'ultra-moon';
|
const sunMoon = version.version.name === 'ultra-sun' || version.version.name === 'ultra-moon';
|
||||||
if (!inSwordShield2 && sunMoon) return true;
|
if (!inSwordShield && sunMoon) return true;
|
||||||
return false;
|
return false;
|
||||||
});
|
});
|
||||||
return {
|
return {
|
||||||
@@ -183,11 +209,8 @@ module.exports = class Pokemon {
|
|||||||
rarity
|
rarity
|
||||||
};
|
};
|
||||||
});
|
});
|
||||||
this.encountersURL = defaultBody.location_area_encounters;
|
|
||||||
await this.fetchHeldItemNames();
|
await this.fetchHeldItemNames();
|
||||||
await this.fetchChain();
|
return this.heldItems;
|
||||||
this.gameDataCached = true;
|
|
||||||
return this;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
async fetchChain() {
|
async fetchChain() {
|
||||||
|
|||||||
Reference in New Issue
Block a user