diff --git a/src/commands/searchTanks.ts b/src/commands/searchTanks.ts index f2330aad5..20e5ff5c5 100644 --- a/src/commands/searchTanks.ts +++ b/src/commands/searchTanks.ts @@ -1,7 +1,7 @@ import { SlashCommandBuilder } from 'discord.js'; import { go } from 'fuzzysort'; import markdownEscape from 'markdown-escape'; -import { TANK_NAMES } from '../core/blitz/tankopedia'; +import { TANK_NAMES_DIACRITICS } from '../core/blitz/tankopedia'; import addTankChoices from '../core/discord/addTankChoices'; import embedInfo from '../core/discord/embedInfo'; import { CommandRegistry } from '../events/interactionCreate'; @@ -26,9 +26,10 @@ export const searchTanksCommand: CommandRegistry = { async handler(interaction) { const tank = interaction.options.getString('tank')!; const limit = interaction.options.getInteger('limit') ?? 25; - const results = go(tank, await TANK_NAMES, { limit }).map( - (result) => result.target, - ); + const results = go(tank, await TANK_NAMES_DIACRITICS, { + limit, + keys: ['combined'], + }).map((result) => result.obj.original); return embedInfo( `Tank search for "${markdownEscape(tank)}"`, diff --git a/src/core/blitz/tankopedia.ts b/src/core/blitz/tankopedia.ts index ffb2cf6c8..bbd798099 100644 --- a/src/core/blitz/tankopedia.ts +++ b/src/core/blitz/tankopedia.ts @@ -1,3 +1,4 @@ +import { deburr } from 'lodash'; import { secrets } from '../node/secrets'; import getWargamingResponse from './getWargamingResponse'; @@ -36,6 +37,20 @@ export const TANKS = new Promise(async (resolve) => { export const TANK_NAMES = new Promise(async (resolve) => { resolve((await entries).map(({ name }) => name)); }); +export const TANK_NAMES_DIACRITICS = TANK_NAMES.then((tankNames) => + Promise.all( + tankNames.map(async (tankName, index) => { + const name = tankName ?? `Unknown Tank ${(await TANKS)[index].tank_id}`; + const diacriticless = deburr(name); + + return { + original: name, + diacriticless, + combined: `${name}${diacriticless}`, + }; + }), + ), +); export interface TankopediaInfo { achievement_sections: Record; diff --git a/src/core/discord/autocompleteTanks.ts b/src/core/discord/autocompleteTanks.ts index a7a1cdbaa..2af8adfed 100644 --- a/src/core/discord/autocompleteTanks.ts +++ b/src/core/discord/autocompleteTanks.ts @@ -4,8 +4,7 @@ import { CacheType, } from 'discord.js'; import { go } from 'fuzzysort'; -import resolveTankName from '../blitz/resolveTankName'; -import { TANKS } from '../blitz/tankopedia'; +import { TANKS, TANK_NAMES_DIACRITICS } from '../blitz/tankopedia'; export default async function autocompleteTanks( interaction: AutocompleteInteraction, @@ -16,16 +15,14 @@ export default async function autocompleteTanks( await interaction.respond( focusedOption.value ? await Promise.all( - go(focusedOption.value, await TANKS, { - keys: ['name'], + go(focusedOption.value, await TANK_NAMES_DIACRITICS, { + keys: ['combined'], limit: 10, }).map( - async (item) => + async (item, index) => ({ - name: item.obj.name - ? item.obj.name - : await resolveTankName(item.obj.tank_id), - value: `${item.obj.tank_id}`, + name: item.obj.original, + value: `${(await TANKS)[index].tank_id}`, }) satisfies ApplicationCommandOptionChoiceData, ), )