diff --git a/src/commands/fullStats.tsx b/src/commands/fullStats.tsx index 83a3ef076..689d958ba 100644 --- a/src/commands/fullStats.tsx +++ b/src/commands/fullStats.tsx @@ -21,7 +21,7 @@ export const fullStatsCommand = new Promise( async (resolve) => { const command = await addStatTypeSubCommandGroups( new SlashCommandBuilder() - .setName('fullstats') + .setName('full-stats') .setDescription('Full in-game statistics'), ); diff --git a/src/commands/ownedTanks.tsx b/src/commands/ownedTanks.tsx index f5bddbb84..82e338d6d 100644 --- a/src/commands/ownedTanks.tsx +++ b/src/commands/ownedTanks.tsx @@ -49,7 +49,7 @@ export const ownedTanksCommand: CommandRegistry = { inPublic: true, command: new SlashCommandBuilder() - .setName('ownedtanks') + .setName('owned-tanks') .setDescription("Shows a player's owned tanks") .addStringOption((option) => option diff --git a/src/commands/playerAchievements.ts b/src/commands/playerAchievements.ts index 904b8534a..60cdf86fa 100644 --- a/src/commands/playerAchievements.ts +++ b/src/commands/playerAchievements.ts @@ -20,7 +20,7 @@ export const playerAchievementsCommand: CommandRegistry = { inPublic: true, command: new SlashCommandBuilder() - .setName('playerachievements') + .setName('player-achievements') .setDescription("All the player's achievements") .addStringOption(addUsernameChoices) .addStringOption((option) => diff --git a/src/commands/playerInfo.ts b/src/commands/playerInfo.ts index e11a66ebe..704daf3b0 100644 --- a/src/commands/playerInfo.ts +++ b/src/commands/playerInfo.ts @@ -16,7 +16,7 @@ export const playerInfoCommand: CommandRegistry = { inPublic: true, command: new SlashCommandBuilder() - .setName('playerinfo') + .setName('player-info') .setDescription('Basic information about a player') .addStringOption(addUsernameChoices), diff --git a/src/commands/searchClans.ts b/src/commands/searchClans.ts index 7d7436d3b..01ca6061d 100644 --- a/src/commands/searchClans.ts +++ b/src/commands/searchClans.ts @@ -15,7 +15,7 @@ export const searchClansCommand: CommandRegistry = { inPublic: true, command: new SlashCommandBuilder() - .setName('searchclans') + .setName('search-clans') .setDescription('Search clans') .addStringOption(addRegionChoices) .addStringOption((option) => addClanChoices(option).setAutocomplete(false)) diff --git a/src/commands/searchPlayers.ts b/src/commands/searchPlayers.ts index c68d8a0e6..536d5fb18 100644 --- a/src/commands/searchPlayers.ts +++ b/src/commands/searchPlayers.ts @@ -16,7 +16,7 @@ export const searchPlayersCommand: CommandRegistry = { inPublic: true, command: new SlashCommandBuilder() - .setName('searchplayers') + .setName('search-players') .setDescription('Search players in a Blitz server') .addStringOption(addRegionChoices) .addStringOption((option) => diff --git a/src/commands/searchTanks.ts b/src/commands/searchTanks.ts index 7f1e87ab3..f02b95c05 100644 --- a/src/commands/searchTanks.ts +++ b/src/commands/searchTanks.ts @@ -12,7 +12,7 @@ export const searchTanksCommand: CommandRegistry = { inPublic: true, command: new SlashCommandBuilder() - .setName('searchtanks') + .setName('search-tanks') .setDescription('Search tanks') .addStringOption((option) => addTankChoices(option).setAutocomplete(false)) .addIntegerOption((option) => diff --git a/src/core/blitzstars/getPeriodStart.ts b/src/core/blitzstars/getPeriodStart.ts index 60cf2099e..330997209 100644 --- a/src/core/blitzstars/getPeriodStart.ts +++ b/src/core/blitzstars/getPeriodStart.ts @@ -1,16 +1,7 @@ import { Region } from '../../constants/regions'; -import { Period } from '../discord/addPeriodSubCommands'; +import { PeriodOption } from '../discord/addPeriodSubCommands'; import getTimeDaysAgo from './getTimeDaysAgo'; -export default function getPeriodStart( - server: Region, - period: Exclude, -) { - if (period === 'career') { - return -Infinity; - } else if (period === 'today') { - return getTimeDaysAgo(server, 1); - } else { - return getTimeDaysAgo(server, parseInt(period.match(/\d+/)?.[0]!)); - } +export default function getPeriodStart(region: Region, period: PeriodOption) { + return period === 'career' ? 0 : getTimeDaysAgo(region, parseInt(period)); } diff --git a/src/core/blitzstars/getTimeDaysAgo.ts b/src/core/blitzstars/getTimeDaysAgo.ts index 652b28fea..485561e9d 100644 --- a/src/core/blitzstars/getTimeDaysAgo.ts +++ b/src/core/blitzstars/getTimeDaysAgo.ts @@ -6,13 +6,13 @@ export const TIME_ZONE_MAPPINGS: Record = { asia: +7, // Central Asia Standard Time }; -export default function getTimeDaysAgo(server: Region, daysAgo: number) { +export default function getTimeDaysAgo(region: Region, daysAgo: number) { const now = new Date(); if (daysAgo === 0) now.getTime() / 1000; const time = new Date(); - time.setUTCHours(-TIME_ZONE_MAPPINGS[server], 0, 0, 0); + time.setUTCHours(-TIME_ZONE_MAPPINGS[region], 0, 0, 0); if (time > now) time.setUTCDate(time.getUTCDate() - 1); time.setUTCDate(time.getUTCDate() - daysAgo + 1); diff --git a/src/core/discord/addPeriodSubCommands.ts b/src/core/discord/addPeriodSubCommands.ts index 32020e707..f4261acc4 100644 --- a/src/core/discord/addPeriodSubCommands.ts +++ b/src/core/discord/addPeriodSubCommands.ts @@ -4,7 +4,8 @@ import { } from 'discord.js'; import { PERIOD_NAMES } from '../discord/resolvePeriodFromCommand'; -export type Period = 'period' | 'customperiod'; +export type PeriodSubcommand = 'period' | 'custom'; +export type PeriodOption = `${number}` | 'career'; export default function addPeriodSubCommands( option: SlashCommandSubcommandGroupBuilder, @@ -16,18 +17,18 @@ export default function addPeriodSubCommands( .addSubcommand((option) => extra( option - .setName('period' satisfies Period) + .setName('period' satisfies PeriodSubcommand) .setDescription(PERIOD_NAMES.period) .addStringOption((option) => option - .setName('days') + .setName('period') .setDescription('A preset period') .setChoices( - { name: 'Today', value: '1' }, - { name: '30 days', value: '30' }, - { name: '60 days', value: '60' }, - { name: '90 days', value: '90' }, - { name: 'Career', value: 'Infinity' }, + { name: 'Today', value: '1' satisfies PeriodOption }, + { name: '30 days', value: '30' satisfies PeriodOption }, + { name: '60 days', value: '60' satisfies PeriodOption }, + { name: '90 days', value: '90' satisfies PeriodOption }, + { name: 'Career', value: 'career' satisfies PeriodOption }, ) .setRequired(true), ), @@ -36,8 +37,8 @@ export default function addPeriodSubCommands( .addSubcommand((option) => extra( option - .setName('customperiod' satisfies Period) - .setDescription(PERIOD_NAMES.customperiod) + .setName('custom' satisfies PeriodSubcommand) + .setDescription(PERIOD_NAMES.custom) .addIntegerOption((option) => option .setName('start') diff --git a/src/core/discord/addStatTypeSubCommandGroups.ts b/src/core/discord/addStatTypeSubCommandGroups.ts index c96518e83..86c91d0b8 100644 --- a/src/core/discord/addStatTypeSubCommandGroups.ts +++ b/src/core/discord/addStatTypeSubCommandGroups.ts @@ -43,7 +43,7 @@ export default async function addStatTypeSubCommandGroups( }) .addStringOption((option) => option - .setName('tanktype') + .setName('tank-type') .setDescription('Type') .addChoices( ...Object.entries(awaitedTankopediaInfo.vehicle_types).map( @@ -65,7 +65,7 @@ export default async function addStatTypeSubCommandGroups( ) .addStringOption((option) => option - .setName('treetype') + .setName('tree-type') .setDescription('Tech tree type') .addChoices( { name: 'Tech Tree', value: 'techtree' }, @@ -75,7 +75,7 @@ export default async function addStatTypeSubCommandGroups( .setRequired(false), ), ) - .setName('tanks') + .setName('multi-tank') .setDescription('Multiple tanks'), ); } diff --git a/src/core/discord/resolvePeriodFromCommand.ts b/src/core/discord/resolvePeriodFromCommand.ts index 65819e16b..db4fb1c7f 100644 --- a/src/core/discord/resolvePeriodFromCommand.ts +++ b/src/core/discord/resolvePeriodFromCommand.ts @@ -3,20 +3,16 @@ import { Region } from '../../constants/regions'; import getPeriodNow from '../blitzstars/getPeriodNow'; import getPeriodStart from '../blitzstars/getPeriodStart'; import getTimeDaysAgo from '../blitzstars/getTimeDaysAgo'; -import { Period } from '../discord/addPeriodSubCommands'; +import { PeriodSubcommand } from '../discord/addPeriodSubCommands'; -export const PERIOD_NAMES: Record = { - today: "Today's statistics", - period: "Set number of days' statistics", - career: 'Career statistics', - customperiod: 'Custom period', +export const PERIOD_NAMES: Record = { + period: "Preset period's statistics", + custom: "Custom period's statistics", }; -export const EVOLUTION_PERIOD_NAMES: Record = { - today: "Today's evolution", - period: "Set number of days' evolution", - career: 'Career evolution', - customperiod: 'Custom period', +export const EVOLUTION_PERIOD_NAMES: Record = { + period: "Preset period's evolution", + custom: "Custom period's evolution", }; export interface ResolvedPeriod { @@ -34,9 +30,9 @@ export default function resolvePeriodFromCommand( let evolutionName: string; let start: number; let end: number; - const period = interaction.options.getSubcommand() as Period; + const period = interaction.options.getSubcommand() as PeriodSubcommand; - if (period === 'customperiod') { + if (period === 'custom') { const startRaw = interaction.options.getInteger('start')!; const endRaw = interaction.options.getInteger('end')!; const startMin = Math.min(startRaw, endRaw); diff --git a/src/core/express/resolvePeriodFromURL.ts b/src/core/express/resolvePeriodFromURL.ts index 035f68916..a4bee04fe 100644 --- a/src/core/express/resolvePeriodFromURL.ts +++ b/src/core/express/resolvePeriodFromURL.ts @@ -2,7 +2,7 @@ import { Region } from '../../constants/regions'; import getPeriodNow from '../blitzstars/getPeriodNow'; import getPeriodStart from '../blitzstars/getPeriodStart'; import getTimeDaysAgo from '../blitzstars/getTimeDaysAgo'; -import { Period } from '../discord/addPeriodSubCommands'; +import { PeriodSubcommand } from '../discord/addPeriodSubCommands'; import { EVOLUTION_PERIOD_NAMES, PERIOD_NAMES, @@ -19,7 +19,7 @@ export default function resolvePeriodFromURL( let end: number; const url = new URL(urlString); const path = url.pathname.split('/').filter(Boolean); - const period = path[path.length - 1] as Period; + const period = path[path.length - 1] as PeriodSubcommand; if (period === 'custom') { const startRaw = parseInt(url!.searchParams.get('start')!);