Files
blitzkit/packages/bot/src/core/blitz/resolveTankId.ts
T

45 lines
1.3 KiB
TypeScript
Raw Normal View History

2024-09-07 21:45:00 -05:00
import { tankDefinitions, tankNames } from '@blitzkit/core';
2024-03-09 11:48:35 -06:00
import { Locale } from 'discord.js';
2023-05-30 17:24:24 +00:00
import { go } from 'fuzzysort';
2024-01-21 18:29:32 -06:00
import markdownEscape from 'markdown-escape';
2024-09-07 23:00:56 -05:00
import { UserError } from '../../../../website/src/hooks/userError';
import { tankNamesTechTreeOnly } from '../discord/autocompleteTanks';
import { translator } from '../localization/translator';
2023-05-30 17:24:24 +00:00
2024-03-09 11:48:35 -06:00
export default async function resolveTankId(
tank: string | number,
locale: Locale,
2024-03-15 21:50:19 -05:00
techTreeOnly = false,
2024-03-09 11:48:35 -06:00
) {
const { translate } = translator(locale);
2024-03-09 11:50:47 -06:00
const number = typeof tank === 'string' ? Number(tank) : tank;
2023-05-30 17:24:24 +00:00
if (Number.isNaN(number)) {
2024-03-15 21:50:19 -05:00
const searchResult = go(
`${tank}`,
await (techTreeOnly ? tankNamesTechTreeOnly : tankNames),
{
2024-08-13 19:44:35 -05:00
keys: ['searchableName', 'searchableNameDeburr', 'camouflages'],
2024-03-15 21:50:19 -05:00
limit: 1,
},
);
2023-05-30 17:24:24 +00:00
if (searchResult.length === 0) {
2024-01-19 16:07:15 -06:00
throw new UserError(
2024-03-09 11:48:35 -06:00
translate('bot.common.errors.tank_name_not_found', [
markdownEscape(`${tank}`),
]),
2024-01-19 16:07:15 -06:00
);
2023-05-30 17:24:24 +00:00
} else {
2023-11-29 12:17:21 -06:00
return searchResult[0].obj.id;
2023-05-30 17:24:24 +00:00
}
} else {
2023-12-05 17:36:18 -06:00
if ((await tankDefinitions)[number]) {
2023-05-30 17:24:24 +00:00
return number;
} else {
2024-01-19 16:07:15 -06:00
throw new UserError(
2024-03-09 11:48:35 -06:00
translate('bot.common.errors.tank_id_not_found', [`${number}`]),
2024-01-19 16:07:15 -06:00
);
2023-05-30 17:24:24 +00:00
}
}
}