From c61877a26760cb853186d726ab310aeb4ce4b553 Mon Sep 17 00:00:00 2001 From: tresabhi Date: Sat, 20 May 2023 01:37:18 +0000 Subject: [PATCH] feat: searchclans --- src/commands/inactive.ts | 4 +- src/commands/searchclans.ts | 57 +++++++++++++++++++ src/commands/searchplayers.ts | 9 ++- src/commands/searchtanks.ts | 2 +- .../{addClanOption.ts => addClanChoices.ts} | 3 +- 5 files changed, 69 insertions(+), 6 deletions(-) create mode 100644 src/commands/searchclans.ts rename src/core/options/{addClanOption.ts => addClanChoices.ts} (68%) diff --git a/src/commands/inactive.ts b/src/commands/inactive.ts index f076fcdf4..926358d55 100644 --- a/src/commands/inactive.ts +++ b/src/commands/inactive.ts @@ -5,7 +5,7 @@ import clanAutocomplete from '../core/autocomplete/clan.js'; import getBlitzClan from '../core/blitz/getBlitzClan.js'; import getWargamingResponse from '../core/blitz/getWargamingResponse.js'; import cmdName from '../core/interaction/cmdName.js'; -import addClanOption from '../core/options/addClanOption.js'; +import addClanChoices from '../core/options/addClanChoices.js'; import { args } from '../core/process/args.js'; import { CommandRegistry } from '../events/interactionCreate.js'; import { AccountInfo } from '../types/accountInfo.js'; @@ -21,7 +21,7 @@ export default { command: new SlashCommandBuilder() .setName(cmdName('inactive')) .setDescription('Lists all inactive players') - .addStringOption(addClanOption) + .addStringOption(addClanChoices) .addNumberOption((option) => option .setName('threshold') diff --git a/src/commands/searchclans.ts b/src/commands/searchclans.ts new file mode 100644 index 000000000..cf298a9dc --- /dev/null +++ b/src/commands/searchclans.ts @@ -0,0 +1,57 @@ +import { SlashCommandBuilder } from 'discord.js'; +import markdownEscape from 'markdown-escape'; +import { BLITZ_SERVERS, BlitzServer } from '../constants/servers.js'; +import getWargamingResponse from '../core/blitz/getWargamingResponse.js'; +import cmdName from '../core/interaction/cmdName.js'; +import sklldEmbed from '../core/interaction/sklldEmbed.js'; +import addClanChoices from '../core/options/addClanChoices.js'; +import addServerChoices from '../core/options/addServerChoices.js'; +import { args } from '../core/process/args.js'; +import { CommandRegistry } from '../events/interactionCreate.js'; +import { ClanList } from '../types/clanList.js'; + +export default { + inProduction: true, + inDevelopment: true, + inPublic: true, + + command: new SlashCommandBuilder() + .setName(cmdName('searchclans')) + .setDescription('Search clans') + .addStringOption(addServerChoices) + .addStringOption((option) => addClanChoices(option).setAutocomplete(false)) + .addIntegerOption((option) => + option + .setName('limit') + .setDescription('The size of the search result (default: 25)') + .setMinValue(1) + .setMaxValue(100), + ), + + async execute(interaction) { + const server = interaction.options.getString('server') as BlitzServer; + const clan = interaction.options.getString('clan')!; + const limit = interaction.options.getInteger('limit') ?? 25; + const clanList = await getWargamingResponse( + `https://api.wotblitz.${server}/wotb/clans/list/?application_id=${args['wargaming-application-id']}&search=${clan}&limit=${limit}`, + ); + if (!clanList) return; + + await interaction.editReply({ + embeds: [ + sklldEmbed( + `Clan search for "${markdownEscape(clan)}" in ${ + BLITZ_SERVERS[server] + }`, + clanList.length === 0 + ? 'No clans found.' + : `\`\`\`\n${clanList + .map((clan) => `${clan.name} [${clan.tag}]`) + .join('\n')}\n\`\`\``, + ), + ], + }); + + console.log(`Clan search results for "${clan}"`); + }, +} satisfies CommandRegistry; diff --git a/src/commands/searchplayers.ts b/src/commands/searchplayers.ts index c957788f8..19cd7263e 100644 --- a/src/commands/searchplayers.ts +++ b/src/commands/searchplayers.ts @@ -1,6 +1,7 @@ import { EmbedBuilder, SlashCommandBuilder } from 'discord.js'; import markdownEscape from 'markdown-escape'; import { SKILLED_COLOR } from '../constants/colors.js'; +import { BLITZ_SERVERS, BlitzServer } from '../constants/servers.js'; import getWargamingResponse from '../core/blitz/getWargamingResponse.js'; import cmdName from '../core/interaction/cmdName.js'; import addServerChoices from '../core/options/addServerChoices.js'; @@ -30,7 +31,7 @@ export default { ), async execute(interaction) { - const server = interaction.options.getString('server')!; + const server = interaction.options.getString('server') as BlitzServer; const name = interaction.options.getString('username')!; const limit = interaction.options.getInteger('limit') ?? 25; const players = await getWargamingResponse( @@ -42,7 +43,11 @@ export default { embeds: [ new EmbedBuilder() .setColor(SKILLED_COLOR) - .setTitle(`Player search results for "${markdownEscape(name)}"`) + .setTitle( + `Player search for "${markdownEscape(name)}" in ${ + BLITZ_SERVERS[server] + }`, + ) .setDescription( `\`\`\`${ players.length === 0 diff --git a/src/commands/searchtanks.ts b/src/commands/searchtanks.ts index 610c2d865..9706e0481 100644 --- a/src/commands/searchtanks.ts +++ b/src/commands/searchtanks.ts @@ -34,7 +34,7 @@ export default { await interaction.editReply({ embeds: [ sklldEmbed( - `Tank search results for "${markdownEscape(tank)}"`, + `Tank search for "${markdownEscape(tank)}"`, results.length === 0 ? 'No tanks found.' : `\`\`\`\n${results.join('\n')}\n\`\`\``, diff --git a/src/core/options/addClanOption.ts b/src/core/options/addClanChoices.ts similarity index 68% rename from src/core/options/addClanOption.ts rename to src/core/options/addClanChoices.ts index 392efb7c4..f25c29156 100644 --- a/src/core/options/addClanOption.ts +++ b/src/core/options/addClanChoices.ts @@ -1,9 +1,10 @@ import { SlashCommandStringOption } from 'discord.js'; -export default function addClanOption(option: SlashCommandStringOption) { +export default function addClanChoices(option: SlashCommandStringOption) { return option .setName('clan') .setDescription('The clan name or tag you are checking') .setAutocomplete(true) + .setMinLength(2) .setRequired(true); }