feat: added limits to /today

This commit is contained in:
TresAbhi committed 2023-07-10 17:41:48 +00:00
1 parent 438feefa83
commit 297f2f6580
3 files changed
+46 -33

No files matched your search

+12 -2
View File
@@ -21,10 +21,20 @@ export const todayCommand: CommandRegistry = {
command: new SlashCommandBuilder() command: new SlashCommandBuilder()
.setName('today') .setName('today')
.setDescription('A general daily breakdown of your performance') .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) { async handler(interaction) {
const player = await resolvePlayerFromCommand(interaction); const player = await resolvePlayerFromCommand(interaction);
const limit = interaction.options.getInteger('limit') ?? Infinity;
const { nickname } = ( const { nickname } = (
await getWargamingResponse<AccountInfo>( await getWargamingResponse<AccountInfo>(
`https://api.wotblitz.${player.server}/wotb/account/info/?application_id=${WARGAMING_APPLICATION_ID}&account_id=${player.id}`, `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); const path = interactionToURL(interaction, player);
return [ return [
await today(player), await today(player, limit, false),
primaryButton(path, 'Refresh'), primaryButton(path, 'Refresh'),
linkButton(`${CYCLIC_API}/${path}`, 'Embed'), linkButton(`${CYCLIC_API}/${path}`, 'Embed'),
linkButton( linkButton(
+29 -30
View File
@@ -22,6 +22,7 @@ import { PossiblyPromise } from '../types/possiblyPromise.js';
export default async function today( export default async function today(
{ server, id }: ResolvedPlayer, { server, id }: ResolvedPlayer,
limit = Infinity,
naked?: boolean, naked?: boolean,
) { ) {
const { diffed, order } = await getDiffedTankStats( const { diffed, order } = await getDiffedTankStats(
@@ -113,37 +114,35 @@ export default async function today(
); );
const rows = await Promise.all( const rows = await Promise.all(
[...(order.length === 0 ? [] : [0]), ...order].map( [
async (tankId, index) => { // this code unreadable on god will forget tomorrow no cap
const tankStats = diffed[tankId]; ...(order.length === 0 ? [] : [0]),
const career = careerStats[tankId]; ...(isFinite(limit) ? order.slice(0, limit) : order),
].map(async (tankId, index) => {
const tankStats = diffed[tankId];
const career = careerStats[tankId];
return ( return (
<Breakdown.Row <Breakdown.Row
naked={naked} naked={naked}
isListing={tankId !== 0} isListing={tankId !== 0}
minimized={index > 4} minimized={index > 4}
key={tankId} key={tankId}
name={tankId === 0 ? 'Total' : await resolveTankName(tankId)} name={tankId === 0 ? 'Total' : await resolveTankName(tankId)}
winrate={tankStats.wins / tankStats.battles} winrate={tankStats.wins / tankStats.battles}
careerWinrate={career.wins / career.battles} careerWinrate={career.wins / career.battles}
WN8={isNaN(todayWN8s[tankId]) ? undefined : todayWN8s[tankId]} WN8={isNaN(todayWN8s[tankId]) ? undefined : todayWN8s[tankId]}
careerWN8={ careerWN8={isNaN(careerWN8s[tankId]) ? undefined : careerWN8s[tankId]}
isNaN(careerWN8s[tankId]) ? undefined : careerWN8s[tankId] damage={tankStats.damage_dealt / tankStats.battles}
} careerDamage={career.damage_dealt / career.battles}
damage={tankStats.damage_dealt / tankStats.battles} battles={tankStats.battles}
careerDamage={career.damage_dealt / career.battles} careerBattles={career.battles}
battles={tankStats.battles} icon={
careerBattles={career.battles} tankId === 0 ? undefined : (await tankopedia)[tankId]?.images.normal
icon={ }
tankId === 0 />
? undefined );
: (await tankopedia)[tankId]?.images.normal }),
}
/>
);
},
),
); );
return naked ? ( return naked ? (
+5 -1
View File
@@ -10,6 +10,10 @@ export const todayRoute: RouteRegistry = {
async handler(req) { async handler(req) {
const player = resolvePlayerFromRequest(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,
);
}, },
}; };