fix: time zone compliant commands

This commit is contained in:
TresAbhi committed 2023-07-10 01:23:49 +00:00
1 parent dd0644e09f
commit 405f544774
11 files changed
+54 -30

No files matched your search

+2 -2
View File
@@ -5,7 +5,7 @@ import sumStats from '../core/blitz/sumStats.js';
import { tankopedia } from '../core/blitz/tankopedia.js';
import getDiffedTankStats from '../core/blitzstars/getDiffedTankStats.js';
import getPeriodNow from '../core/blitzstars/getPeriodNow.js';
import getPeriodStart from '../core/blitzstars/getPeriodStart.js';
import getTimeDaysAgo from '../core/blitzstars/getTimeDaysAgo.js';
import { tankAverages } from '../core/blitzstars/tankAverages.js';
import addUsernameChoices from '../core/discord/addUsernameChoices.js';
import embedNegative from '../core/discord/embedNegative.js';
@@ -62,7 +62,7 @@ export const eligibleCommand: CommandRegistry = {
const { diffed } = await getDiffedTankStats(
server,
id,
getPeriodStart('30'),
getTimeDaysAgo(server, 30),
getPeriodNow(),
);
const entries = Object.entries(diffed);
+2 -2
View File
@@ -34,7 +34,7 @@ export const evolutionCommand: CommandRegistry = {
true,
) as StatType;
const player = await resolvePlayerFromCommand(interaction);
const period = resolvePeriodFromCommand(interaction);
const period = resolvePeriodFromCommand(player.server, interaction);
const tankIdRaw = interaction.options.getString('tank')!;
const tankId =
commandGroup === 'tank' ? await resolveTankId(tankIdRaw) : null;
@@ -74,8 +74,8 @@ export const evolutionCommand: CommandRegistry = {
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);
const period = resolvePeriodFromButton(player.server, interaction);
return await evolution(
commandGroup,
+2 -2
View File
@@ -33,7 +33,7 @@ export const fullStatsCommand: CommandRegistry = {
true,
) as StatType;
const player = await resolvePlayerFromCommand(interaction);
const period = resolvePeriodFromCommand(interaction);
const period = resolvePeriodFromCommand(player.server, interaction);
const tankIdRaw = interaction.options.getString('tank')!;
const tankId =
commandGroup === 'tank' ? await resolveTankId(tankIdRaw) : null;
@@ -71,8 +71,8 @@ export const fullStatsCommand: CommandRegistry = {
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);
const period = resolvePeriodFromButton(player.server, interaction);
return await fullStats(
commandGroup,
+3 -3
View File
@@ -20,7 +20,7 @@ import { AccountInfo } from '../types/accountInfo.js';
export const statsCommand: CommandRegistry = {
inProduction: true,
inDevelopment: false,
inDevelopment: true,
inPublic: true,
command: addStatTypeSubCommandGroups(
@@ -34,7 +34,7 @@ export const statsCommand: CommandRegistry = {
true,
) as StatType;
const player = await resolvePlayerFromCommand(interaction);
const period = resolvePeriodFromCommand(interaction);
const period = resolvePeriodFromCommand(player.server, interaction);
const tankIdRaw = interaction.options.getString('tank')!;
const tankId =
commandGroup === 'tank' ? await resolveTankId(tankIdRaw) : null;
@@ -72,8 +72,8 @@ export const statsCommand: CommandRegistry = {
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);
const period = resolvePeriodFromButton(player.server, interaction);
return await stats(
commandGroup,
+7 -3
View File
@@ -1,12 +1,16 @@
import { BlitzServer } from '../../constants/servers.js';
import { Period } from '../discord/addPeriodSubCommands.js';
import getTimeDaysAgo from './getTimeDaysAgo.js';
export default function getPeriodStart(period: Exclude<Period, 'custom'>) {
export default function getPeriodStart(
server: BlitzServer,
period: Exclude<Period, 'custom'>,
) {
if (period === 'career') {
return -Infinity;
} else if (period === 'today') {
return getTimeDaysAgo(0);
return getTimeDaysAgo(server, 1);
} else {
return getTimeDaysAgo(parseInt(period));
return getTimeDaysAgo(server, parseInt(period));
}
}
+15 -7
View File
@@ -1,12 +1,20 @@
export default function getTimeDaysAgo(daysAgo: number) {
import { BlitzServer } from '../../constants/servers.js';
export const TIME_ZONE_MAPPINGS: Record<BlitzServer, number> = {
com: -5, // Central North American Time
eu: +1, // Central European Time
asia: +7, // Central Asia Standard Time
};
export default function getTimeDaysAgo(server: BlitzServer, daysAgo: number) {
const now = new Date();
now.setHours(5, 0, 0, 0);
if (daysAgo === 0) now.getTime() / 1000;
// if it's after 5:00 AM today, subtract one day
if (now.getTime() > Date.now()) now.setDate(now.getDate() - 1);
const time = new Date();
// subtract the period number of days from now
now.setDate(now.getDate() - daysAgo);
time.setUTCHours(-TIME_ZONE_MAPPINGS[server], 0, 0, 0);
if (time > now) time.setUTCDate(time.getUTCDate() - 1);
time.setUTCDate(time.getUTCDate() - daysAgo + 1);
return now.getTime() / 1000;
return time.getTime() / 1000;
}
+3 -1
View File
@@ -1,9 +1,11 @@
import { ButtonInteraction, CacheType } from 'discord.js';
import { CYCLIC_API } from '../../constants/cyclic.js';
import { BlitzServer } from '../../constants/servers.js';
import resolvePeriodFromURL from '../express/resolvePeriodFromURL.js';
export default function resolvePeriodFromButton(
server: BlitzServer,
interaction: ButtonInteraction<CacheType>,
) {
return resolvePeriodFromURL(`${CYCLIC_API}/${interaction.customId}`);
return resolvePeriodFromURL(server, `${CYCLIC_API}/${interaction.customId}`);
}
+5 -3
View File
@@ -1,4 +1,5 @@
import { CacheType, ChatInputCommandInteraction } from 'discord.js';
import { BlitzServer } from '../../constants/servers.js';
import getPeriodNow from '../blitzstars/getPeriodNow.js';
import getPeriodStart from '../blitzstars/getPeriodStart.js';
import getTimeDaysAgo from '../blitzstars/getTimeDaysAgo.js';
@@ -30,6 +31,7 @@ export interface ResolvedPeriod {
}
export default function resolvePeriodFromCommand(
server: BlitzServer,
interaction: ChatInputCommandInteraction<CacheType>,
) {
let statsName: string;
@@ -46,12 +48,12 @@ export default function resolvePeriodFromCommand(
statsName = `${startMin} to ${endMax} days' statistics`;
evolutionName = `${startMin} to ${endMax} days' evolution`;
start = getTimeDaysAgo(startMin);
end = getTimeDaysAgo(endMax);
start = getTimeDaysAgo(server, startMin);
end = getTimeDaysAgo(server, endMax);
} else {
statsName = PERIOD_NAMES[period];
evolutionName = EVOLUTION_PERIOD_NAMES[period];
start = getPeriodStart(period);
start = getPeriodStart(server, period);
end = getPeriodNow();
}
+6 -2
View File
@@ -1,7 +1,11 @@
import { Request } from 'express';
import { CYCLIC_API } from '../../constants/cyclic.js';
import { BlitzServer } from '../../constants/servers.js';
import resolvePeriodFromURL from './resolvePeriodFromURL.js';
export default function resolvePeriodFromRequest(request: Request) {
return resolvePeriodFromURL(`${CYCLIC_API}${request.path}`);
export default function resolvePeriodFromRequest(
server: BlitzServer,
request: Request,
) {
return resolvePeriodFromURL(server, `${CYCLIC_API}${request.path}`);
}
+8 -4
View File
@@ -1,3 +1,4 @@
import { BlitzServer } from '../../constants/servers.js';
import getPeriodNow from '../blitzstars/getPeriodNow.js';
import getPeriodStart from '../blitzstars/getPeriodStart.js';
import getTimeDaysAgo from '../blitzstars/getTimeDaysAgo.js';
@@ -8,7 +9,10 @@ import {
ResolvedPeriod,
} from '../discord/resolvePeriodFromCommand.js';
export default function resolvePeriodFromURL(urlString: string) {
export default function resolvePeriodFromURL(
server: BlitzServer,
urlString: string,
) {
let statsName: string;
let evolutionName: string;
let start: number;
@@ -25,12 +29,12 @@ export default function resolvePeriodFromURL(urlString: string) {
statsName = `${startMin} to ${endMax} days' statistics`;
evolutionName = `${startMin} to ${endMax} days' evolution`;
start = getTimeDaysAgo(startMin);
end = getTimeDaysAgo(endMax);
start = getTimeDaysAgo(server, startMin);
end = getTimeDaysAgo(server, endMax);
} else {
statsName = PERIOD_NAMES[period];
evolutionName = EVOLUTION_PERIOD_NAMES[period];
start = getPeriodStart(period);
start = getPeriodStart(server, period);
end = getPeriodNow();
}
+1 -1
View File
@@ -10,8 +10,8 @@ export const statsRoute: RouteRegistry = {
async handler(req) {
const type = req.params.type as StatType;
const period = resolvePeriodFromRequest(req);
const player = resolvePlayerFromRequest(req);
const period = resolvePeriodFromRequest(player.server, req);
return await stats(
type,