diff --git a/docs/changelogs/1.9.4.md b/docs/changelogs/1.9.4.md new file mode 100644 index 000000000..31604e71b --- /dev/null +++ b/docs/changelogs/1.9.4.md @@ -0,0 +1,12 @@ +# Blitzkrieg 1.9.4 + +Haha, I lied. More fixes. + +## Fixes + +- Tank names once again show when searching for tank stats +- Tier weights now ignore tanks without entries in the `tankopedia` + +## Technical Changes + +- All `tankopedia` derivatives are now promises diff --git a/package.json b/package.json index e41d802c1..324cdd060 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "blitzkrieg", - "version": "1.9.3", + "version": "1.9.4", "description": "", "main": "src/server.ts", "type": "module", diff --git a/src/commands/searchTanks.ts b/src/commands/searchTanks.ts index 144d2f54a..0d58bae86 100644 --- a/src/commands/searchTanks.ts +++ b/src/commands/searchTanks.ts @@ -26,7 +26,7 @@ export const searchTanksCommand: CommandRegistry = { async handler(interaction) { const tank = interaction.options.getString('tank')!; const limit = interaction.options.getInteger('limit') ?? 25; - const results = go(tank, TANK_NAMES, { limit }).map( + const results = go(tank, await TANK_NAMES, { limit }).map( (result) => result.target, ); diff --git a/src/core/blitz/resolveTankId.ts b/src/core/blitz/resolveTankId.ts index ddbe33b66..76c74a824 100644 --- a/src/core/blitz/resolveTankId.ts +++ b/src/core/blitz/resolveTankId.ts @@ -6,7 +6,7 @@ export default async function resolveTankId(tank: string) { const number = parseInt(tank); if (Number.isNaN(number)) { - const searchResult = go(tank, TANKS, { keys: ['name'], limit: 1 }); + const searchResult = go(tank, await TANKS, { keys: ['name'], limit: 1 }); if (searchResult.length === 0) { throw throwError( diff --git a/src/core/blitz/tankopedia.ts b/src/core/blitz/tankopedia.ts index 981a59002..d2b54cf41 100644 --- a/src/core/blitz/tankopedia.ts +++ b/src/core/blitz/tankopedia.ts @@ -23,10 +23,15 @@ export const tankopedia = fetch('https://www.blitzstars.com/bs-tankopedia.json') console.log('Tankopedia cached'); return (wrapperTankopedia as { data: Tankopedia }).data; }); -const entries = Object.entries(tankopedia); -export const TANK_IDS = entries.map(([, { tank_id }]) => tank_id as number); -export const TANKS = entries.map(([, entry]) => entry as TankopediaEntry); -export const TANK_NAMES = entries.map(([, { name }]) => name); +const entries = new Promise(async (resolve) => { + resolve(Object.entries(await tankopedia).map(([, entry]) => entry)); +}); +export const TANKS = new Promise(async (resolve) => { + resolve((await entries).map((entry) => entry)); +}); +export const TANK_NAMES = new Promise(async (resolve) => { + resolve((await entries).map(({ name }) => name)); +}); export const TANK_ICONS: Record = { 'AT-SPG': 'https://i.imgur.com/BIHSEH0.png', diff --git a/src/core/discord/autocompleteTanks.ts b/src/core/discord/autocompleteTanks.ts index 46fa638bc..ec75c052c 100644 --- a/src/core/discord/autocompleteTanks.ts +++ b/src/core/discord/autocompleteTanks.ts @@ -16,7 +16,7 @@ export default async function autocompleteTanks( await interaction.respond( focusedOption.value ? await Promise.all( - go(focusedOption.value, TANKS, { keys: ['name'], limit: 10 }).map( + go(focusedOption.value, await TANKS, { keys: ['name'], limit: 10 }).map( async (item) => ({ name: item.obj.name diff --git a/src/renderers/statsfull.tsx b/src/renderers/statsfull.tsx index 1c867f9f9..c876c7bf9 100644 --- a/src/renderers/statsfull.tsx +++ b/src/renderers/statsfull.tsx @@ -107,6 +107,10 @@ export default async function statsfull( tierWeights = await entries.reduce>( async (accumulator, [tankIdString, stats]) => { const tankId = parseInt(tankIdString); + const tankopediaEntry = (await tankopedia)[tankId]; + + if (!tankopediaEntry) return accumulator; + const tier = (await tankopedia)[tankId].tier as Tier; if ((await accumulator)[tier]) {