Files
blitzkit/src/commands/searchTanks.ts
T

40 lines
1.3 KiB
TypeScript
Raw Normal View History

2023-05-20 00:57:41 +00:00
import { SlashCommandBuilder } from 'discord.js';
import { go } from 'fuzzysort';
import markdownEscape from 'markdown-escape';
2023-10-14 11:25:42 -05:00
import { TANK_NAMES_DIACRITICS } from '../core/blitzstars/tankopedia';
2023-10-14 11:32:02 -05:00
import addTankChoices from '../core/discord/addTankChoices';
import embedInfo from '../core/discord/embedInfo';
2023-07-11 19:54:57 +00:00
import { CommandRegistry } from '../events/interactionCreate';
2023-05-20 00:57:41 +00:00
2023-07-05 01:15:18 +00:00
export const searchTanksCommand: CommandRegistry = {
2023-05-20 00:57:41 +00:00
inProduction: true,
inPublic: true,
command: new SlashCommandBuilder()
2023-08-04 02:24:14 +00:00
.setName('search-tanks')
2023-05-20 00:57:41 +00:00
.setDescription('Search tanks')
.addStringOption((option) => addTankChoices(option).setAutocomplete(false))
.addIntegerOption((option) =>
option
.setName('limit')
.setDescription('The size of the search result (default: 25)')
.setMinValue(1)
.setMaxValue(100),
),
2023-06-27 01:43:30 +00:00
async handler(interaction) {
2023-05-20 00:57:41 +00:00
const tank = interaction.options.getString('tank')!;
const limit = interaction.options.getInteger('limit') ?? 25;
2023-08-10 01:46:39 +00:00
const results = go(tank, await TANK_NAMES_DIACRITICS, {
limit,
keys: ['combined'],
}).map((result) => result.obj.original);
2023-05-20 00:57:41 +00:00
2023-06-27 02:22:28 +00:00
return embedInfo(
2023-06-16 02:01:06 +00:00
`Tank search for "${markdownEscape(tank)}"`,
results.length === 0
? 'No tanks found.'
: `\`\`\`\n${results.join('\n')}\n\`\`\``,
);
2023-05-20 00:57:41 +00:00
},
2023-07-05 01:15:18 +00:00
};