Files
blitzkit/src/commands/evolution.tsx
T

86 lines
3.3 KiB
TypeScript
Raw Normal View History

2023-06-23 01:45:44 +00:00
import { SlashCommandBuilder } from 'discord.js';
2023-06-28 18:45:14 +00:00
import { CYCLIC_API } from '../constants/cyclic.js';
import getWargamingResponse from '../core/blitz/getWargamingResponse.js';
2023-06-21 01:52:26 +00:00
import resolveTankId from '../core/blitz/resolveTankId.js';
2023-06-27 02:22:28 +00:00
import addStatTypeSubCommandGroups from '../core/discord/addStatTypeSubCommandGroups.js';
import autocompleteTanks from '../core/discord/autocompleteTanks.js';
import autocompleteUsername from '../core/discord/autocompleteUsername.js';
2023-06-28 18:45:14 +00:00
import interactionToURL from '../core/discord/interactionToURL.js';
import linkButton from '../core/discord/linkButton.js';
import primaryButton from '../core/discord/primaryButton.js';
import resolvePeriodFromButton from '../core/discord/resolvePeriodFromButton.js';
2023-06-27 01:46:08 +00:00
import resolvePeriodFromCommand from '../core/discord/resolvePeriodFromCommand.js';
2023-06-28 18:45:14 +00:00
import resolvePlayerFromButton from '../core/discord/resolvePlayerFromButton.js';
2023-06-27 02:07:14 +00:00
import resolvePlayerFromCommand from '../core/discord/resolvePlayerFromCommand.js';
2023-06-28 18:45:14 +00:00
import { WARGAMING_APPLICATION_ID } from '../core/node/arguments.js';
2023-06-25 02:32:56 +00:00
import { CommandRegistry } from '../events/interactionCreate/index.js';
2023-06-23 01:45:44 +00:00
import evolution from '../renderers/evolution.js';
2023-06-27 19:10:12 +00:00
import { StatType } from '../renderers/statsfull.js';
2023-06-28 18:45:14 +00:00
import { AccountInfo } from '../types/accountInfo.js';
2023-06-21 01:52:26 +00:00
export default {
inProduction: true,
2023-06-29 18:39:59 +00:00
inDevelopment: true,
2023-06-21 01:52:26 +00:00
inPublic: true,
2023-06-27 02:22:28 +00:00
command: addStatTypeSubCommandGroups(
2023-06-21 01:57:27 +00:00
new SlashCommandBuilder()
.setName('evolution')
2023-06-21 01:57:27 +00:00
.setDescription('Evolution of statistics'),
),
2023-06-21 01:52:26 +00:00
2023-06-27 01:43:30 +00:00
async handler(interaction) {
2023-06-23 01:45:44 +00:00
const commandGroup = interaction.options.getSubcommandGroup(
true,
) as StatType;
2023-06-27 02:07:14 +00:00
const player = await resolvePlayerFromCommand(interaction);
2023-06-27 01:43:30 +00:00
const period = resolvePeriodFromCommand(interaction);
2023-06-21 01:52:26 +00:00
const tankIdRaw = interaction.options.getString('tank')!;
2023-06-28 18:45:14 +00:00
const tankId = commandGroup === 'tank' ? resolveTankId(tankIdRaw) : null;
const start = interaction.options.getInteger('start');
const end = interaction.options.getInteger('end');
const { nickname } = (
await getWargamingResponse<AccountInfo>(
`https://api.wotblitz.${player.server}/wotb/account/info/?application_id=${WARGAMING_APPLICATION_ID}&account_id=${player.id}`,
)
)[player.id];
const path = interactionToURL(interaction, {
...player,
tankId,
start,
end,
});
2023-06-21 01:52:26 +00:00
2023-06-28 18:45:14 +00:00
return [
await evolution(commandGroup, period, player, tankId),
primaryButton(path, 'Refresh'),
// linkButton(`${CYCLIC_API}/${path}`, 'Embed'),
2023-06-28 18:45:14 +00:00
linkButton(
`https://www.blitzstars.com/player/${player.server}/${nickname}${
commandGroup === 'tank' ? `/tank/${tankId!}` : ''
}`,
'BlitzStars',
),
];
2023-06-21 01:52:26 +00:00
},
autocomplete: (interaction) => {
2023-06-27 02:22:28 +00:00
autocompleteUsername(interaction);
autocompleteTanks(interaction);
2023-06-21 01:52:26 +00:00
},
2023-06-28 18:45:14 +00:00
async button(interaction) {
const url = new URL(`${CYCLIC_API}/${interaction.customId}`);
const path = url.pathname.split('/').filter(Boolean);
const commandGroup = path[1] as StatType;
const period = resolvePeriodFromButton(interaction);
const player = await resolvePlayerFromButton(interaction);
return await evolution(
commandGroup,
period,
player,
parseInt(url.searchParams.get('tankId')!),
);
},
2023-06-21 01:52:26 +00:00
} satisfies CommandRegistry;