feat: error handling for /research

This commit is contained in:
TrèsAbhi committed 2024-03-15 21:50:19 -05:00
1 parent 787d3ae6ea
commit d39ab43e74
6 files changed
+337 -96

No files matched your search

+11 -8
View File
@@ -2,24 +2,27 @@ import { Locale } from 'discord.js';
import { go } from 'fuzzysort';
import markdownEscape from 'markdown-escape';
import { UserError } from '../../hooks/userError';
import {
tankDefinitions,
tanksDefinitionsArray,
} from '../blitzkrieg/tankDefinitions';
import { tankDefinitions, tankNames } from '../blitzkrieg/tankDefinitions';
import { tankNamesTechTreeOnly } from '../discord/autocompleteTanks';
import { translator } from '../localization/translator';
export default async function resolveTankId(
tank: string | number,
locale: Locale,
techTreeOnly = false,
) {
const { translate } = translator(locale);
const number = typeof tank === 'string' ? Number(tank) : tank;
if (Number.isNaN(number)) {
const searchResult = go(`${tank}`, await tanksDefinitionsArray, {
keys: ['name'],
limit: 1,
});
const searchResult = go(
`${tank}`,
await (techTreeOnly ? tankNamesTechTreeOnly : tankNames),
{
keys: ['combined'],
limit: 1,
},
);
if (searchResult.length === 0) {
throw new UserError(
+2 -1
View File
@@ -10,7 +10,8 @@ export async function buildTechTreeLine(start: number, end: number) {
if (start === end) return line;
for (const ancestorId of endTank.ancestors) {
if ((await resolveAncestry(ancestorId)).includes(start)) {
line.push(...(await buildTechTreeLine(start, ancestorId)));
const ancestorTree = await buildTechTreeLine(start, ancestorId);
line.push(...ancestorTree);
break;
}
}
+3 -2
View File
@@ -10,16 +10,17 @@ import {
OVERFLOW_SUFFIX,
} from './autocompleteClan/constants';
const tankNamesTechTreeOnly = tankNames.then((names) =>
export const tankNamesTechTreeOnly = tankNames.then((names) =>
names.filter((tank) => tank.treeType === 'researchable'),
);
export default async function autocompleteTanks(
interaction: AutocompleteInteraction<CacheType>,
techTreeOnly = false,
fields = ['tank'],
) {
const focusedOption = interaction.options.getFocused(true);
if (focusedOption.name !== 'tank') return;
if (!fields.includes(focusedOption.name)) return;
await interaction.respond(
focusedOption.value