From 297f2f6580c917f6a0abef183ee1e17bb27f889e Mon Sep 17 00:00:00 2001 From: tresabhi Date: Mon, 10 Jul 2023 17:41:48 +0000 Subject: [PATCH] feat: added limits to /today --- src/commands/today.tsx | 14 ++++++++-- src/renderers/today.tsx | 59 ++++++++++++++++++++--------------------- src/routes/today.tsx | 6 ++++- 3 files changed, 46 insertions(+), 33 deletions(-) diff --git a/src/commands/today.tsx b/src/commands/today.tsx index 7c10612cd..d3329380c 100644 --- a/src/commands/today.tsx +++ b/src/commands/today.tsx @@ -21,10 +21,20 @@ export const todayCommand: CommandRegistry = { command: new SlashCommandBuilder() .setName('today') .setDescription('A general daily breakdown of your performance') - .addStringOption(addUsernameChoices), + .addStringOption(addUsernameChoices) + .addIntegerOption((option) => + option + .setName('limit') + .setDescription( + 'The maximum number of tanks to display (default: Infinity)', + ) + .setRequired(false) + .setMinValue(1), + ), async handler(interaction) { const player = await resolvePlayerFromCommand(interaction); + const limit = interaction.options.getInteger('limit') ?? Infinity; const { nickname } = ( await getWargamingResponse( `https://api.wotblitz.${player.server}/wotb/account/info/?application_id=${WARGAMING_APPLICATION_ID}&account_id=${player.id}`, @@ -33,7 +43,7 @@ export const todayCommand: CommandRegistry = { const path = interactionToURL(interaction, player); return [ - await today(player), + await today(player, limit, false), primaryButton(path, 'Refresh'), linkButton(`${CYCLIC_API}/${path}`, 'Embed'), linkButton( diff --git a/src/renderers/today.tsx b/src/renderers/today.tsx index 93da5c594..9a0c96839 100644 --- a/src/renderers/today.tsx +++ b/src/renderers/today.tsx @@ -22,6 +22,7 @@ import { PossiblyPromise } from '../types/possiblyPromise.js'; export default async function today( { server, id }: ResolvedPlayer, + limit = Infinity, naked?: boolean, ) { const { diffed, order } = await getDiffedTankStats( @@ -113,37 +114,35 @@ export default async function today( ); const rows = await Promise.all( - [...(order.length === 0 ? [] : [0]), ...order].map( - async (tankId, index) => { - const tankStats = diffed[tankId]; - const career = careerStats[tankId]; + [ + // this code unreadable on god will forget tomorrow no cap + ...(order.length === 0 ? [] : [0]), + ...(isFinite(limit) ? order.slice(0, limit) : order), + ].map(async (tankId, index) => { + const tankStats = diffed[tankId]; + const career = careerStats[tankId]; - return ( - 4} - key={tankId} - name={tankId === 0 ? 'Total' : await resolveTankName(tankId)} - winrate={tankStats.wins / tankStats.battles} - careerWinrate={career.wins / career.battles} - WN8={isNaN(todayWN8s[tankId]) ? undefined : todayWN8s[tankId]} - careerWN8={ - isNaN(careerWN8s[tankId]) ? undefined : careerWN8s[tankId] - } - damage={tankStats.damage_dealt / tankStats.battles} - careerDamage={career.damage_dealt / career.battles} - battles={tankStats.battles} - careerBattles={career.battles} - icon={ - tankId === 0 - ? undefined - : (await tankopedia)[tankId]?.images.normal - } - /> - ); - }, - ), + return ( + 4} + key={tankId} + name={tankId === 0 ? 'Total' : await resolveTankName(tankId)} + winrate={tankStats.wins / tankStats.battles} + careerWinrate={career.wins / career.battles} + WN8={isNaN(todayWN8s[tankId]) ? undefined : todayWN8s[tankId]} + careerWN8={isNaN(careerWN8s[tankId]) ? undefined : careerWN8s[tankId]} + damage={tankStats.damage_dealt / tankStats.battles} + careerDamage={career.damage_dealt / career.battles} + battles={tankStats.battles} + careerBattles={career.battles} + icon={ + tankId === 0 ? undefined : (await tankopedia)[tankId]?.images.normal + } + /> + ); + }), ); return naked ? ( diff --git a/src/routes/today.tsx b/src/routes/today.tsx index 30b8a1c0a..b4bf67298 100644 --- a/src/routes/today.tsx +++ b/src/routes/today.tsx @@ -10,6 +10,10 @@ export const todayRoute: RouteRegistry = { async handler(req) { const player = resolvePlayerFromRequest(req); - return await today(player, true); + return await today( + player, + req.query.limit ? parseInt(req.query.limit as string) : undefined, + true, + ); }, };