mirror of
https://github.com/blitzkit/blitzkit.git
synced 2026-10-31 14:39:51 +01:00
Compare commits
2
Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
eab4266fd1 | ||
|
|
86b4b63a7c |
No files matched your search
@@ -0,0 +1,11 @@
|
||||
# BlitzKit 1.29.14
|
||||
|
||||
## Changes
|
||||
|
||||
- BlitzStars has enabled aggressive Cloudflare protections; hence, disabling BlitzKit from using BlitzStar's API
|
||||
- Disabled the following commands:
|
||||
- `/stats`
|
||||
- `/today`
|
||||
- `/breakdown`
|
||||
- `/evolution`
|
||||
- `/full-stats`
|
||||
+1
-1
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "blitzkit",
|
||||
"version": "1.29.13",
|
||||
"version": "1.29.14",
|
||||
"license": "BlitzKit License",
|
||||
"private": true,
|
||||
"scripts": {
|
||||
|
||||
@@ -1,49 +1,46 @@
|
||||
import { getBlitzStarsLinkButton } from '../../core/blitzstars/getBlitzStarsLinkButton';
|
||||
import { addPeriodicFilterOptions } from '../../core/discord/addPeriodicFilterOptions';
|
||||
import { addUsernameChoices } from '../../core/discord/addUsernameChoices';
|
||||
import { autocompleteTanks } from '../../core/discord/autocompleteTanks';
|
||||
import { autocompleteUsername } from '../../core/discord/autocompleteUsername';
|
||||
import { buttonRefresh } from '../../core/discord/buttonRefresh';
|
||||
import { commandToURL } from '../../core/discord/commandToURL';
|
||||
import { createLocalizedCommand } from '../../core/discord/createLocalizedCommand';
|
||||
import { getCustomPeriodParams } from '../../core/discord/getCustomPeriodParams';
|
||||
import { getFiltersFromButton } from '../../core/discord/getFiltersFromButton';
|
||||
import { getFiltersFromCommand } from '../../core/discord/getFiltersFromCommand';
|
||||
import { resolvePeriodFromButton } from '../../core/discord/resolvePeriodFromButton';
|
||||
import { resolvePeriodFromCommand } from '../../core/discord/resolvePeriodFromCommand';
|
||||
import { resolvePlayerFromButton } from '../../core/discord/resolvePlayerFromButton';
|
||||
import { resolvePlayerFromCommand } from '../../core/discord/resolvePlayerFromCommand';
|
||||
import type { CommandRegistry } from '../../events/interactionCreate';
|
||||
import { renderBreakdown } from './render';
|
||||
import { addPeriodicFilterOptions } from "../../core/discord/addPeriodicFilterOptions";
|
||||
import { addUsernameChoices } from "../../core/discord/addUsernameChoices";
|
||||
import { autocompleteTanks } from "../../core/discord/autocompleteTanks";
|
||||
import { autocompleteUsername } from "../../core/discord/autocompleteUsername";
|
||||
import { createLocalizedCommand } from "../../core/discord/createLocalizedCommand";
|
||||
import { getFiltersFromButton } from "../../core/discord/getFiltersFromButton";
|
||||
import { resolvePeriodFromButton } from "../../core/discord/resolvePeriodFromButton";
|
||||
import { resolvePlayerFromButton } from "../../core/discord/resolvePlayerFromButton";
|
||||
import { translator } from "../../core/localization/translator";
|
||||
import type { CommandRegistry } from "../../events/interactionCreate";
|
||||
import { renderBreakdown } from "./render";
|
||||
|
||||
export const breakdownCommand = new Promise<CommandRegistry>(
|
||||
async (resolve) => {
|
||||
resolve({
|
||||
command: await addPeriodicFilterOptions(
|
||||
createLocalizedCommand('breakdown'),
|
||||
createLocalizedCommand("breakdown"),
|
||||
(option) => option.addStringOption(addUsernameChoices),
|
||||
),
|
||||
|
||||
async handler(interaction) {
|
||||
const player = await resolvePlayerFromCommand(interaction);
|
||||
const period = resolvePeriodFromCommand(player.region, interaction);
|
||||
const filters = await getFiltersFromCommand(interaction);
|
||||
const path = commandToURL(interaction, {
|
||||
...player,
|
||||
...getCustomPeriodParams(interaction),
|
||||
...filters,
|
||||
});
|
||||
const { strings } = translator(interaction.locale);
|
||||
return strings.bot.commands.dead;
|
||||
|
||||
return [
|
||||
...(await renderBreakdown(
|
||||
player,
|
||||
period,
|
||||
filters,
|
||||
interaction.locale,
|
||||
)),
|
||||
buttonRefresh(interaction, path),
|
||||
await getBlitzStarsLinkButton(player.region, player.id),
|
||||
];
|
||||
// const player = await resolvePlayerFromCommand(interaction);
|
||||
// const period = resolvePeriodFromCommand(player.region, interaction);
|
||||
// const filters = await getFiltersFromCommand(interaction);
|
||||
// const path = commandToURL(interaction, {
|
||||
// ...player,
|
||||
// ...getCustomPeriodParams(interaction),
|
||||
// ...filters,
|
||||
// });
|
||||
|
||||
// return [
|
||||
// ...(await renderBreakdown(
|
||||
// player,
|
||||
// period,
|
||||
// filters,
|
||||
// interaction.locale,
|
||||
// )),
|
||||
// buttonRefresh(interaction, path),
|
||||
// await getBlitzStarsLinkButton(player.region, player.id),
|
||||
// ];
|
||||
},
|
||||
|
||||
autocomplete: (interaction) => {
|
||||
|
||||
@@ -5,8 +5,6 @@ import * as Graph from "../components/Graph";
|
||||
import { LineColor } from "../components/Graph/components/Line/constants";
|
||||
import { NoData } from "../components/NoData";
|
||||
import { TitleBar } from "../components/TitleBar";
|
||||
import { resolveTankId } from "../core/blitz/resolveTankId";
|
||||
import { getBlitzStarsLinkButton } from "../core/blitzstars/getBlitzStarsLinkButton";
|
||||
import { getPlayerHistories } from "../core/blitzstars/getPlayerHistories";
|
||||
import { getTankHistories } from "../core/blitzstars/getTankHistories";
|
||||
import { addPeriodSubCommands } from "../core/discord/addPeriodSubCommands";
|
||||
@@ -14,20 +12,12 @@ import { addTankChoices } from "../core/discord/addTankChoices";
|
||||
import { addUsernameChoices } from "../core/discord/addUsernameChoices";
|
||||
import { autocompleteTanks } from "../core/discord/autocompleteTanks";
|
||||
import { autocompleteUsername } from "../core/discord/autocompleteUsername";
|
||||
import { buttonRefresh } from "../core/discord/buttonRefresh";
|
||||
import { commandToURL } from "../core/discord/commandToURL";
|
||||
import { createLocalizedCommand } from "../core/discord/createLocalizedCommand";
|
||||
import { getCustomPeriodParams } from "../core/discord/getCustomPeriodParams";
|
||||
import { resolvePeriodFromButton } from "../core/discord/resolvePeriodFromButton";
|
||||
import {
|
||||
type ResolvedPeriod,
|
||||
resolvePeriodFromCommand,
|
||||
} from "../core/discord/resolvePeriodFromCommand";
|
||||
import { type ResolvedPeriod } from "../core/discord/resolvePeriodFromCommand";
|
||||
import { resolvePlayerFromButton } from "../core/discord/resolvePlayerFromButton";
|
||||
import {
|
||||
type ResolvedPlayer,
|
||||
resolvePlayerFromCommand,
|
||||
} from "../core/discord/resolvePlayerFromCommand";
|
||||
import { type ResolvedPlayer } from "../core/discord/resolvePlayerFromCommand";
|
||||
import { translator } from "../core/localization/translator";
|
||||
import type { CommandRegistry } from "../events/interactionCreate";
|
||||
|
||||
type EvolutionStatType = "player" | "tank";
|
||||
@@ -37,7 +27,7 @@ async function render(
|
||||
{ start, end, name }: ResolvedPeriod,
|
||||
type: "player" | "tank",
|
||||
tankId: number | null,
|
||||
locale: Locale
|
||||
locale: Locale,
|
||||
) {
|
||||
const accountInfo = await getAccountInfo(region, id);
|
||||
const clan = (await getClanAccountInfo(region, id, ["clan"]))?.clan;
|
||||
@@ -61,7 +51,7 @@ async function render(
|
||||
[
|
||||
history.all.battles,
|
||||
(history.all.wins / history.all.battles) * 100,
|
||||
] as Graph.PlotItem
|
||||
] as Graph.PlotItem,
|
||||
);
|
||||
const times = histories.map((history) => history.last_battle_time);
|
||||
const minTime = Math.min(...times);
|
||||
@@ -115,7 +105,7 @@ export const evolutionCommand = new Promise<CommandRegistry>(
|
||||
group: "player",
|
||||
modify(option: SlashCommandSubcommandGroupBuilder) {
|
||||
addPeriodSubCommands(option, (option) =>
|
||||
option.addStringOption(addUsernameChoices)
|
||||
option.addStringOption(addUsernameChoices),
|
||||
);
|
||||
},
|
||||
},
|
||||
@@ -125,43 +115,46 @@ export const evolutionCommand = new Promise<CommandRegistry>(
|
||||
addPeriodSubCommands(option, (option) =>
|
||||
option
|
||||
.addStringOption(addTankChoices)
|
||||
.addStringOption(addUsernameChoices)
|
||||
.addStringOption(addUsernameChoices),
|
||||
);
|
||||
},
|
||||
},
|
||||
]),
|
||||
|
||||
async handler(interaction) {
|
||||
const commandGroup =
|
||||
interaction.options.getSubcommandGroup() as EvolutionStatType;
|
||||
const player = await resolvePlayerFromCommand(interaction);
|
||||
const period = resolvePeriodFromCommand(player.region, interaction);
|
||||
const tankIdRaw = interaction.options.getString("tank")!;
|
||||
const tankId =
|
||||
commandGroup === "tank"
|
||||
? await resolveTankId(tankIdRaw, interaction.locale)
|
||||
: null;
|
||||
const path = commandToURL(interaction, {
|
||||
...player,
|
||||
...getCustomPeriodParams(interaction),
|
||||
tankId,
|
||||
});
|
||||
const { strings } = translator(interaction.locale);
|
||||
return strings.bot.commands.dead;
|
||||
|
||||
return [
|
||||
await render(
|
||||
player,
|
||||
period,
|
||||
commandGroup,
|
||||
tankId,
|
||||
interaction.locale
|
||||
),
|
||||
buttonRefresh(interaction, path),
|
||||
await getBlitzStarsLinkButton(
|
||||
player.region,
|
||||
player.id,
|
||||
tankId ?? undefined
|
||||
),
|
||||
];
|
||||
// const commandGroup =
|
||||
// interaction.options.getSubcommandGroup() as EvolutionStatType;
|
||||
// const player = await resolvePlayerFromCommand(interaction);
|
||||
// const period = resolvePeriodFromCommand(player.region, interaction);
|
||||
// const tankIdRaw = interaction.options.getString("tank")!;
|
||||
// const tankId =
|
||||
// commandGroup === "tank"
|
||||
// ? await resolveTankId(tankIdRaw, interaction.locale)
|
||||
// : null;
|
||||
// const path = commandToURL(interaction, {
|
||||
// ...player,
|
||||
// ...getCustomPeriodParams(interaction),
|
||||
// tankId,
|
||||
// });
|
||||
|
||||
// return [
|
||||
// await render(
|
||||
// player,
|
||||
// period,
|
||||
// commandGroup,
|
||||
// tankId,
|
||||
// interaction.locale
|
||||
// ),
|
||||
// buttonRefresh(interaction, path),
|
||||
// await getBlitzStarsLinkButton(
|
||||
// player.region,
|
||||
// player.id,
|
||||
// tankId ?? undefined
|
||||
// ),
|
||||
// ];
|
||||
},
|
||||
|
||||
autocomplete: (interaction) => {
|
||||
@@ -181,9 +174,9 @@ export const evolutionCommand = new Promise<CommandRegistry>(
|
||||
period,
|
||||
commandGroup,
|
||||
parseInt(url.searchParams.get("tankId") ?? "0") || null,
|
||||
interaction.locale
|
||||
interaction.locale,
|
||||
);
|
||||
},
|
||||
});
|
||||
}
|
||||
},
|
||||
);
|
||||
@@ -3,38 +3,28 @@ import {
|
||||
getAccountInfo,
|
||||
getClanAccountInfo,
|
||||
getTierWeights,
|
||||
} from '@blitzkit/core';
|
||||
import { Locale } from 'discord.js';
|
||||
import { CommandWrapper } from '../components/CommandWrapper';
|
||||
import { GenericAllStats } from '../components/GenericAllStats';
|
||||
import { NoData } from '../components/NoData';
|
||||
import { TierWeights } from '../components/TierWeights';
|
||||
import { TitleBar } from '../components/TitleBar';
|
||||
import { filtersToDescription } from '../core/blitzkit/filtersToDescription';
|
||||
import { filterStats, type StatFilters } from '../core/blitzstars/filterStats';
|
||||
import { getBlitzStarsLinkButton } from '../core/blitzstars/getBlitzStarsLinkButton';
|
||||
import { getStatsInPeriod } from '../core/blitzstars/getStatsInPeriod';
|
||||
import { addPeriodicFilterOptions } from '../core/discord/addPeriodicFilterOptions';
|
||||
import { addUsernameChoices } from '../core/discord/addUsernameChoices';
|
||||
import { autocompleteTanks } from '../core/discord/autocompleteTanks';
|
||||
import { autocompleteUsername } from '../core/discord/autocompleteUsername';
|
||||
import { buttonRefresh } from '../core/discord/buttonRefresh';
|
||||
import { commandToURL } from '../core/discord/commandToURL';
|
||||
import { createLocalizedCommand } from '../core/discord/createLocalizedCommand';
|
||||
import { getCustomPeriodParams } from '../core/discord/getCustomPeriodParams';
|
||||
import { getFiltersFromButton } from '../core/discord/getFiltersFromButton';
|
||||
import { getFiltersFromCommand } from '../core/discord/getFiltersFromCommand';
|
||||
import { resolvePeriodFromButton } from '../core/discord/resolvePeriodFromButton';
|
||||
import {
|
||||
type ResolvedPeriod,
|
||||
resolvePeriodFromCommand,
|
||||
} from '../core/discord/resolvePeriodFromCommand';
|
||||
import { resolvePlayerFromButton } from '../core/discord/resolvePlayerFromButton';
|
||||
import {
|
||||
type ResolvedPlayer,
|
||||
resolvePlayerFromCommand,
|
||||
} from '../core/discord/resolvePlayerFromCommand';
|
||||
import type { CommandRegistry } from '../events/interactionCreate';
|
||||
} from "@blitzkit/core";
|
||||
import { Locale } from "discord.js";
|
||||
import { CommandWrapper } from "../components/CommandWrapper";
|
||||
import { GenericAllStats } from "../components/GenericAllStats";
|
||||
import { NoData } from "../components/NoData";
|
||||
import { TierWeights } from "../components/TierWeights";
|
||||
import { TitleBar } from "../components/TitleBar";
|
||||
import { filtersToDescription } from "../core/blitzkit/filtersToDescription";
|
||||
import { filterStats, type StatFilters } from "../core/blitzstars/filterStats";
|
||||
import { getStatsInPeriod } from "../core/blitzstars/getStatsInPeriod";
|
||||
import { addPeriodicFilterOptions } from "../core/discord/addPeriodicFilterOptions";
|
||||
import { addUsernameChoices } from "../core/discord/addUsernameChoices";
|
||||
import { autocompleteTanks } from "../core/discord/autocompleteTanks";
|
||||
import { autocompleteUsername } from "../core/discord/autocompleteUsername";
|
||||
import { createLocalizedCommand } from "../core/discord/createLocalizedCommand";
|
||||
import { getFiltersFromButton } from "../core/discord/getFiltersFromButton";
|
||||
import { resolvePeriodFromButton } from "../core/discord/resolvePeriodFromButton";
|
||||
import { type ResolvedPeriod } from "../core/discord/resolvePeriodFromCommand";
|
||||
import { resolvePlayerFromButton } from "../core/discord/resolvePlayerFromButton";
|
||||
import { type ResolvedPlayer } from "../core/discord/resolvePlayerFromCommand";
|
||||
import { translator } from "../core/localization/translator";
|
||||
import type { CommandRegistry } from "../events/interactionCreate";
|
||||
|
||||
async function render(
|
||||
{ region, id }: ResolvedPlayer,
|
||||
@@ -43,7 +33,7 @@ async function render(
|
||||
locale: Locale,
|
||||
) {
|
||||
const { nickname } = await getAccountInfo(region, id);
|
||||
const clan = (await getClanAccountInfo(region, id, ['clan']))?.clan;
|
||||
const clan = (await getClanAccountInfo(region, id, ["clan"]))?.clan;
|
||||
const clanImage = clan ? emblemURL(clan.emblem_set_id) : undefined;
|
||||
const diffedTankStats = await getStatsInPeriod(
|
||||
region,
|
||||
@@ -86,25 +76,28 @@ export const fullStatsCommand = new Promise<CommandRegistry>(
|
||||
async (resolve) => {
|
||||
resolve({
|
||||
command: await addPeriodicFilterOptions(
|
||||
createLocalizedCommand('full-stats'),
|
||||
createLocalizedCommand("full-stats"),
|
||||
(option) => option.addStringOption(addUsernameChoices),
|
||||
),
|
||||
|
||||
async handler(interaction) {
|
||||
const player = await resolvePlayerFromCommand(interaction);
|
||||
const period = resolvePeriodFromCommand(player.region, interaction);
|
||||
const filters = await getFiltersFromCommand(interaction);
|
||||
const path = commandToURL(interaction, {
|
||||
...player,
|
||||
...getCustomPeriodParams(interaction),
|
||||
...filters,
|
||||
});
|
||||
const { strings } = translator(interaction.locale);
|
||||
return strings.bot.commands.dead;
|
||||
|
||||
return Promise.all([
|
||||
render(player, period, filters, interaction.locale),
|
||||
buttonRefresh(interaction, path),
|
||||
getBlitzStarsLinkButton(player.region, player.id),
|
||||
]);
|
||||
// const player = await resolvePlayerFromCommand(interaction);
|
||||
// const period = resolvePeriodFromCommand(player.region, interaction);
|
||||
// const filters = await getFiltersFromCommand(interaction);
|
||||
// const path = commandToURL(interaction, {
|
||||
// ...player,
|
||||
// ...getCustomPeriodParams(interaction),
|
||||
// ...filters,
|
||||
// });
|
||||
|
||||
// return Promise.all([
|
||||
// render(player, period, filters, interaction.locale),
|
||||
// buttonRefresh(interaction, path),
|
||||
// getBlitzStarsLinkButton(player.region, player.id),
|
||||
// ]);
|
||||
},
|
||||
|
||||
autocomplete: (interaction) => {
|
||||
|
||||
@@ -6,35 +6,25 @@ import { NoData } from "../components/NoData";
|
||||
import { TitleBar } from "../components/TitleBar";
|
||||
import { filtersToDescription } from "../core/blitzkit/filtersToDescription";
|
||||
import { filterStats, type StatFilters } from "../core/blitzstars/filterStats";
|
||||
import { getBlitzStarsLinkButton } from "../core/blitzstars/getBlitzStarsLinkButton";
|
||||
import { getStatsInPeriod } from "../core/blitzstars/getStatsInPeriod";
|
||||
import { addPeriodicFilterOptions } from "../core/discord/addPeriodicFilterOptions";
|
||||
import { addUsernameChoices } from "../core/discord/addUsernameChoices";
|
||||
import { autocompleteTanks } from "../core/discord/autocompleteTanks";
|
||||
import { autocompleteUsername } from "../core/discord/autocompleteUsername";
|
||||
import { buttonRefresh } from "../core/discord/buttonRefresh";
|
||||
import { commandToURL } from "../core/discord/commandToURL";
|
||||
import { createLocalizedCommand } from "../core/discord/createLocalizedCommand";
|
||||
import { getCustomPeriodParams } from "../core/discord/getCustomPeriodParams";
|
||||
import { getFiltersFromButton } from "../core/discord/getFiltersFromButton";
|
||||
import { getFiltersFromCommand } from "../core/discord/getFiltersFromCommand";
|
||||
import { resolvePeriodFromButton } from "../core/discord/resolvePeriodFromButton";
|
||||
import {
|
||||
type ResolvedPeriod,
|
||||
resolvePeriodFromCommand,
|
||||
} from "../core/discord/resolvePeriodFromCommand";
|
||||
import { type ResolvedPeriod } from "../core/discord/resolvePeriodFromCommand";
|
||||
import { resolvePlayerFromButton } from "../core/discord/resolvePlayerFromButton";
|
||||
import {
|
||||
type ResolvedPlayer,
|
||||
resolvePlayerFromCommand,
|
||||
} from "../core/discord/resolvePlayerFromCommand";
|
||||
import { type ResolvedPlayer } from "../core/discord/resolvePlayerFromCommand";
|
||||
import { translator } from "../core/localization/translator";
|
||||
import type { CommandRegistry } from "../events/interactionCreate";
|
||||
|
||||
async function render(
|
||||
{ region, id }: ResolvedPlayer,
|
||||
{ start, end, name }: ResolvedPeriod,
|
||||
filters: StatFilters,
|
||||
locale: Locale
|
||||
locale: Locale,
|
||||
) {
|
||||
const { nickname } = await getAccountInfo(region, id);
|
||||
const clan = (await getClanAccountInfo(region, id, ["clan"]))?.clan;
|
||||
@@ -44,7 +34,7 @@ async function render(
|
||||
id,
|
||||
start,
|
||||
end,
|
||||
locale
|
||||
locale,
|
||||
);
|
||||
const { stats, supplementary } = await filterStats(diffedTankStats, filters);
|
||||
const filterDescriptions = await filtersToDescription(filters, locale);
|
||||
@@ -73,24 +63,27 @@ export const statsCommand = new Promise<CommandRegistry>(async (resolve) => {
|
||||
resolve({
|
||||
command: await addPeriodicFilterOptions(
|
||||
createLocalizedCommand("stats"),
|
||||
(option) => option.addStringOption(addUsernameChoices)
|
||||
(option) => option.addStringOption(addUsernameChoices),
|
||||
),
|
||||
|
||||
async handler(interaction) {
|
||||
const player = await resolvePlayerFromCommand(interaction);
|
||||
const period = resolvePeriodFromCommand(player.region, interaction);
|
||||
const filters = await getFiltersFromCommand(interaction);
|
||||
const path = commandToURL(interaction, {
|
||||
...player,
|
||||
...getCustomPeriodParams(interaction),
|
||||
...filters,
|
||||
});
|
||||
const { strings } = translator(interaction.locale);
|
||||
return strings.bot.commands.dead;
|
||||
|
||||
return Promise.all([
|
||||
render(player, period, filters, interaction.locale),
|
||||
buttonRefresh(interaction, path),
|
||||
getBlitzStarsLinkButton(player.region, player.id),
|
||||
]);
|
||||
// const player = await resolvePlayerFromCommand(interaction);
|
||||
// const period = resolvePeriodFromCommand(player.region, interaction);
|
||||
// const filters = await getFiltersFromCommand(interaction);
|
||||
// const path = commandToURL(interaction, {
|
||||
// ...player,
|
||||
// ...getCustomPeriodParams(interaction),
|
||||
// ...filters,
|
||||
// });
|
||||
|
||||
// return Promise.all([
|
||||
// render(player, period, filters, interaction.locale),
|
||||
// buttonRefresh(interaction, path),
|
||||
// getBlitzStarsLinkButton(player.region, player.id),
|
||||
// ]);
|
||||
},
|
||||
|
||||
autocomplete: (interaction) => {
|
||||
|
||||
@@ -1,50 +1,47 @@
|
||||
import { gameDefinitions } from '../core/blitzkit/nonBlockingPromises';
|
||||
import { getBlitzStarsLinkButton } from '../core/blitzstars/getBlitzStarsLinkButton';
|
||||
import { addFilterOptions } from '../core/discord/addFilterOptions';
|
||||
import { addUsernameChoices } from '../core/discord/addUsernameChoices';
|
||||
import { autocompleteTanks } from '../core/discord/autocompleteTanks';
|
||||
import { autocompleteUsername } from '../core/discord/autocompleteUsername';
|
||||
import { buttonRefresh } from '../core/discord/buttonRefresh';
|
||||
import { commandToURL } from '../core/discord/commandToURL';
|
||||
import { createLocalizedCommand } from '../core/discord/createLocalizedCommand';
|
||||
import { getCustomPeriodParams } from '../core/discord/getCustomPeriodParams';
|
||||
import { getFiltersFromButton } from '../core/discord/getFiltersFromButton';
|
||||
import { getFiltersFromCommand } from '../core/discord/getFiltersFromCommand';
|
||||
import { resolvePeriodFromButton } from '../core/discord/resolvePeriodFromButton';
|
||||
import { resolvePeriodFromCommand } from '../core/discord/resolvePeriodFromCommand';
|
||||
import { resolvePlayerFromButton } from '../core/discord/resolvePlayerFromButton';
|
||||
import { resolvePlayerFromCommand } from '../core/discord/resolvePlayerFromCommand';
|
||||
import { type CommandRegistry } from '../events/interactionCreate';
|
||||
import { renderBreakdown } from './breakdown/render';
|
||||
import { gameDefinitions } from "../core/blitzkit/nonBlockingPromises";
|
||||
import { addFilterOptions } from "../core/discord/addFilterOptions";
|
||||
import { addUsernameChoices } from "../core/discord/addUsernameChoices";
|
||||
import { autocompleteTanks } from "../core/discord/autocompleteTanks";
|
||||
import { autocompleteUsername } from "../core/discord/autocompleteUsername";
|
||||
import { createLocalizedCommand } from "../core/discord/createLocalizedCommand";
|
||||
import { getFiltersFromButton } from "../core/discord/getFiltersFromButton";
|
||||
import { resolvePeriodFromButton } from "../core/discord/resolvePeriodFromButton";
|
||||
import { resolvePlayerFromButton } from "../core/discord/resolvePlayerFromButton";
|
||||
import { translator } from "../core/localization/translator";
|
||||
import { type CommandRegistry } from "../events/interactionCreate";
|
||||
import { renderBreakdown } from "./breakdown/render";
|
||||
|
||||
export const todayCommand = new Promise<CommandRegistry>(async (resolve) => {
|
||||
const awaitedGameDefinitions = await gameDefinitions;
|
||||
|
||||
resolve({
|
||||
command: addFilterOptions(
|
||||
createLocalizedCommand('today'),
|
||||
createLocalizedCommand("today"),
|
||||
awaitedGameDefinitions.nations,
|
||||
).addStringOption(addUsernameChoices),
|
||||
|
||||
async handler(interaction) {
|
||||
const player = await resolvePlayerFromCommand(interaction);
|
||||
const period = resolvePeriodFromCommand(
|
||||
player.region,
|
||||
interaction,
|
||||
'today',
|
||||
);
|
||||
const filters = await getFiltersFromCommand(interaction);
|
||||
const path = commandToURL(interaction, {
|
||||
...player,
|
||||
...getCustomPeriodParams(interaction, true),
|
||||
...filters,
|
||||
});
|
||||
const { strings } = translator(interaction.locale);
|
||||
return strings.bot.commands.dead;
|
||||
|
||||
return [
|
||||
...(await renderBreakdown(player, period, filters, interaction.locale)),
|
||||
buttonRefresh(interaction, path),
|
||||
await getBlitzStarsLinkButton(player.region, player.id),
|
||||
];
|
||||
// const player = await resolvePlayerFromCommand(interaction);
|
||||
// const period = resolvePeriodFromCommand(
|
||||
// player.region,
|
||||
// interaction,
|
||||
// 'today',
|
||||
// );
|
||||
// const filters = await getFiltersFromCommand(interaction);
|
||||
// const path = commandToURL(interaction, {
|
||||
// ...player,
|
||||
// ...getCustomPeriodParams(interaction, true),
|
||||
// ...filters,
|
||||
// });
|
||||
|
||||
// return [
|
||||
// ...(await renderBreakdown(player, period, filters, interaction.locale)),
|
||||
// buttonRefresh(interaction, path),
|
||||
// await getBlitzStarsLinkButton(player.region, player.id),
|
||||
// ];
|
||||
},
|
||||
|
||||
autocomplete: (interaction) => {
|
||||
|
||||
@@ -357,6 +357,8 @@
|
||||
},
|
||||
|
||||
"commands": {
|
||||
"dead": "# Stat Commands Are Dead\n\nThe BlitzKit Discord bot used to use BlitzStars to fetch periodic statistics. BlitzStars has enabled aggressive Cloudflare protections; hence, disabling BlitzKit from using BlitzStar's API. This has impacted the following commands:\n\n- `/stats`\n- `/today`\n- `/breakdown`\n- `/evolution`\n- `/full-stats`\n\nPlease use [Aftermath](<https://amth.one/invite>) as an alternative which is completely independent of BlitzStars. BlitzKit-hosted stat commands will return in the near future.",
|
||||
|
||||
"replay": {
|
||||
"name": "replay",
|
||||
"description": "Display replay results",
|
||||
|
||||
@@ -320,16 +320,9 @@
|
||||
}
|
||||
},
|
||||
"commands": {
|
||||
"dead": "# Stat Commands Are Dead\n\nThe BlitzKit Discord bot used to use BlitzStars to fetch periodic statistics. BlitzStars has enabled aggressive Cloudflare protections; hence, disabling BlitzKit from using BlitzStar's API. This has impacted the following commands:\n\n- `/stats`\n- `/today`\n- `/breakdown`\n- `/evolution`\n- `/full-stats`\n\nPlease use [Aftermath](<https://amth.one/invite>) as an alternative which is completely independent of BlitzStars. BlitzKit-hosted stat commands will return in the near future.",
|
||||
"replay": {
|
||||
"name": "repetición",
|
||||
"description": "Mostrar resultados de la repetición",
|
||||
"options": {
|
||||
"file": {
|
||||
"name": "file",
|
||||
"description": "Replay file"
|
||||
}
|
||||
}
|
||||
"description": "Mostrar resultados de la repetición"
|
||||
},
|
||||
"research": {
|
||||
"name": "desarollar",
|
||||
@@ -1012,8 +1005,8 @@
|
||||
"title": "Características",
|
||||
"compare": {
|
||||
"label": "Comparar con",
|
||||
"class": "{tier} {class}",
|
||||
"tier": "All tier {tier}",
|
||||
"class": "Tier {tier} {class}",
|
||||
"tier": "All of tier {tier}",
|
||||
"all": "Todos los tanques"
|
||||
},
|
||||
"values": {
|
||||
|
||||
@@ -320,16 +320,9 @@
|
||||
}
|
||||
},
|
||||
"commands": {
|
||||
"dead": "# Stat Commands Are Dead\n\nThe BlitzKit Discord bot used to use BlitzStars to fetch periodic statistics. BlitzStars has enabled aggressive Cloudflare protections; hence, disabling BlitzKit from using BlitzStar's API. This has impacted the following commands:\n\n- `/stats`\n- `/today`\n- `/breakdown`\n- `/evolution`\n- `/full-stats`\n\nPlease use [Aftermath](<https://amth.one/invite>) as an alternative which is completely independent of BlitzStars. BlitzKit-hosted stat commands will return in the near future.",
|
||||
"replay": {
|
||||
"name": "rejouer",
|
||||
"description": "Afficher les résultats de la relecture",
|
||||
"options": {
|
||||
"file": {
|
||||
"name": "file",
|
||||
"description": "Replay file"
|
||||
}
|
||||
}
|
||||
"description": "Afficher les résultats de la relecture"
|
||||
},
|
||||
"research": {
|
||||
"name": "recherche",
|
||||
@@ -1012,8 +1005,8 @@
|
||||
"title": "Characteristics",
|
||||
"compare": {
|
||||
"label": "Compare against",
|
||||
"class": "{tier} {class}",
|
||||
"tier": "All tier {tier}",
|
||||
"class": "Tier {tier} {class}",
|
||||
"tier": "All of tier {tier}",
|
||||
"all": "All tanks"
|
||||
},
|
||||
"values": {
|
||||
|
||||
@@ -320,16 +320,9 @@
|
||||
}
|
||||
},
|
||||
"commands": {
|
||||
"dead": "# Stat Commands Are Dead\n\nThe BlitzKit Discord bot used to use BlitzStars to fetch periodic statistics. BlitzStars has enabled aggressive Cloudflare protections; hence, disabling BlitzKit from using BlitzStar's API. This has impacted the following commands:\n\n- `/stats`\n- `/today`\n- `/breakdown`\n- `/evolution`\n- `/full-stats`\n\nPlease use [Aftermath](<https://amth.one/invite>) as an alternative which is completely independent of BlitzStars. BlitzKit-hosted stat commands will return in the near future.",
|
||||
"replay": {
|
||||
"name": "replay",
|
||||
"description": "Display replay results",
|
||||
"options": {
|
||||
"file": {
|
||||
"name": "file",
|
||||
"description": "Replay file"
|
||||
}
|
||||
}
|
||||
"description": "Display replay results"
|
||||
},
|
||||
"research": {
|
||||
"name": "研究",
|
||||
@@ -1012,8 +1005,8 @@
|
||||
"title": "性能値",
|
||||
"compare": {
|
||||
"label": "比較対象",
|
||||
"class": "{tier} {class}",
|
||||
"tier": "All tier {tier}",
|
||||
"class": "Tier {tier} {class}",
|
||||
"tier": "All of tier {tier}",
|
||||
"all": "全車輌"
|
||||
},
|
||||
"values": {
|
||||
|
||||
@@ -320,16 +320,9 @@
|
||||
}
|
||||
},
|
||||
"commands": {
|
||||
"dead": "# Stat Commands Are Dead\n\nThe BlitzKit Discord bot used to use BlitzStars to fetch periodic statistics. BlitzStars has enabled aggressive Cloudflare protections; hence, disabling BlitzKit from using BlitzStar's API. This has impacted the following commands:\n\n- `/stats`\n- `/today`\n- `/breakdown`\n- `/evolution`\n- `/full-stats`\n\nPlease use [Aftermath](<https://amth.one/invite>) as an alternative which is completely independent of BlitzStars. BlitzKit-hosted stat commands will return in the near future.",
|
||||
"replay": {
|
||||
"name": "powtórz",
|
||||
"description": "Wyświetl wyniki powtórki",
|
||||
"options": {
|
||||
"file": {
|
||||
"name": "file",
|
||||
"description": "Replay file"
|
||||
}
|
||||
}
|
||||
"description": "Wyświetl wyniki powtórki"
|
||||
},
|
||||
"research": {
|
||||
"name": "badanie",
|
||||
@@ -1012,8 +1005,8 @@
|
||||
"title": "Characteristics",
|
||||
"compare": {
|
||||
"label": "Compare against",
|
||||
"class": "{tier} {class}",
|
||||
"tier": "All tier {tier}",
|
||||
"class": "Tier {tier} {class}",
|
||||
"tier": "All of tier {tier}",
|
||||
"all": "All tanks"
|
||||
},
|
||||
"values": {
|
||||
|
||||
@@ -320,16 +320,9 @@
|
||||
}
|
||||
},
|
||||
"commands": {
|
||||
"dead": "# Stat Commands Are Dead\n\nThe BlitzKit Discord bot used to use BlitzStars to fetch periodic statistics. BlitzStars has enabled aggressive Cloudflare protections; hence, disabling BlitzKit from using BlitzStar's API. This has impacted the following commands:\n\n- `/stats`\n- `/today`\n- `/breakdown`\n- `/evolution`\n- `/full-stats`\n\nPlease use [Aftermath](<https://amth.one/invite>) as an alternative which is completely independent of BlitzStars. BlitzKit-hosted stat commands will return in the near future.",
|
||||
"replay": {
|
||||
"name": "replay",
|
||||
"description": "Exibir resultados de replays",
|
||||
"options": {
|
||||
"file": {
|
||||
"name": "file",
|
||||
"description": "Replay file"
|
||||
}
|
||||
}
|
||||
"description": "Exibir resultados de replays"
|
||||
},
|
||||
"research": {
|
||||
"name": "pesquisa",
|
||||
@@ -1012,8 +1005,8 @@
|
||||
"title": "Características",
|
||||
"compare": {
|
||||
"label": "Comparar com",
|
||||
"class": "{tier} {class}",
|
||||
"tier": "All tier {tier}",
|
||||
"class": "Tier {tier} {class}",
|
||||
"tier": "All of tier {tier}",
|
||||
"all": "Todos os tanques"
|
||||
},
|
||||
"values": {
|
||||
|
||||
@@ -320,16 +320,9 @@
|
||||
}
|
||||
},
|
||||
"commands": {
|
||||
"dead": ".",
|
||||
"replay": {
|
||||
"name": "повтор",
|
||||
"description": "Показать результаты повтора",
|
||||
"options": {
|
||||
"file": {
|
||||
"name": "file",
|
||||
"description": "Replay file"
|
||||
}
|
||||
}
|
||||
"description": "Показать результаты повтора"
|
||||
},
|
||||
"research": {
|
||||
"name": "исследование",
|
||||
@@ -1012,8 +1005,8 @@
|
||||
"title": "Характеристики",
|
||||
"compare": {
|
||||
"label": "Сравнивать с",
|
||||
"class": "{tier} {class}",
|
||||
"tier": "All tier {tier}",
|
||||
"class": "{class} {tier} уровня",
|
||||
"tier": "Все {tier} уровня",
|
||||
"all": "Все танки"
|
||||
},
|
||||
"values": {
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
{
|
||||
"test": {
|
||||
"default": "тест",
|
||||
"long": "{color}{fruit}",
|
||||
"long": "{fruit}",
|
||||
"fox": "Швидка бура лисиця перестрибує через лінивого собаку."
|
||||
},
|
||||
"common": {
|
||||
@@ -23,7 +23,7 @@
|
||||
},
|
||||
"shells": {
|
||||
"ap": "ББ",
|
||||
"ap_cr": "",
|
||||
"ap_cr": "APCR",
|
||||
"hc": "HEAT",
|
||||
"he": "ОФ"
|
||||
},
|
||||
@@ -320,16 +320,9 @@
|
||||
}
|
||||
},
|
||||
"commands": {
|
||||
"dead": ".",
|
||||
"replay": {
|
||||
"name": "реплей",
|
||||
"description": "Показати результати реплею",
|
||||
"options": {
|
||||
"file": {
|
||||
"name": "",
|
||||
"description": "Replay filehttps://crowdin.com/editor/blitzkrieg/80/en-uk?view=side-by-side#9706"
|
||||
}
|
||||
}
|
||||
"description": "Показати результати реплею"
|
||||
},
|
||||
"research": {
|
||||
"name": "дослідження",
|
||||
@@ -667,7 +660,7 @@
|
||||
},
|
||||
"tank_search": {
|
||||
"select_dialog_title": "Знайти танк",
|
||||
"swap_dialog_title": "Резервуар підміни",
|
||||
"swap_dialog_title": "Swap tank",
|
||||
"clear_filters": "Очистити",
|
||||
"login": "Увійдіть, щоб скористатися",
|
||||
"search_bar_hint": "Шукайте техніку...",
|
||||
@@ -678,7 +671,7 @@
|
||||
"sorting_by": "Відсортувати за {name}",
|
||||
"clear": "Clear",
|
||||
"tier": "Рівень {tier}",
|
||||
"passive": "",
|
||||
"passive": "{name} (Passive)",
|
||||
"active": "{name} (Active)",
|
||||
"no_tanks_found": {
|
||||
"body": "Нічого не знайдено.",
|
||||
@@ -744,7 +737,7 @@
|
||||
"pwa": {
|
||||
"title": "Install the BlitzKit App",
|
||||
"new": "",
|
||||
"checking": "",
|
||||
"checking": "Checking compatibility...",
|
||||
"instructions": "Instructions for Apple devices.",
|
||||
"install": "Install",
|
||||
"dismiss": "Dismiss"
|
||||
@@ -830,7 +823,7 @@
|
||||
"help": {
|
||||
"title": "Partially reveal tank?",
|
||||
"description": "Reveals the tank without showing the name. This round will be considered incorrect and break your streak!",
|
||||
"cancel": "",
|
||||
"cancel": "Cancel",
|
||||
"reveal": "Reveal"
|
||||
},
|
||||
"clear": "Clear",
|
||||
@@ -1012,8 +1005,8 @@
|
||||
"title": "Characteristics",
|
||||
"compare": {
|
||||
"label": "Compare against",
|
||||
"class": "{tier} {class}",
|
||||
"tier": "All tier {tier}",
|
||||
"class": "Tier {tier} {class}",
|
||||
"tier": "All of tier {tier}",
|
||||
"all": "Усі танки"
|
||||
},
|
||||
"values": {
|
||||
@@ -1281,7 +1274,7 @@
|
||||
"button": "Generate URL",
|
||||
"title": "Generate URL",
|
||||
"subtitle": "Search an account to track",
|
||||
"cancel": "",
|
||||
"cancel": "Cancel",
|
||||
"success": {
|
||||
"title": "Copy URL",
|
||||
"info": "Generated the URL for {name}. The embed will start tracking as soon as the URL is pasted. Reset at any time by right-clicking on PC or long-pressing on mobile and then selecting \"Reset\".",
|
||||
|
||||
@@ -320,16 +320,9 @@
|
||||
}
|
||||
},
|
||||
"commands": {
|
||||
"dead": "# Stat Commands Are Dead\n\nThe BlitzKit Discord bot used to use BlitzStars to fetch periodic statistics. BlitzStars has enabled aggressive Cloudflare protections; hence, disabling BlitzKit from using BlitzStar's API. This has impacted the following commands:\n\n- `/stats`\n- `/today`\n- `/breakdown`\n- `/evolution`\n- `/full-stats`\n\nPlease use [Aftermath](<https://amth.one/invite>) as an alternative which is completely independent of BlitzStars. BlitzKit-hosted stat commands will return in the near future.",
|
||||
"replay": {
|
||||
"name": "回放",
|
||||
"description": "显示重播结果",
|
||||
"options": {
|
||||
"file": {
|
||||
"name": "file",
|
||||
"description": "Replay file"
|
||||
}
|
||||
}
|
||||
"description": "显示重播结果"
|
||||
},
|
||||
"research": {
|
||||
"name": "研发",
|
||||
@@ -1012,8 +1005,8 @@
|
||||
"title": "属性",
|
||||
"compare": {
|
||||
"label": "比较",
|
||||
"class": "{tier} {class}",
|
||||
"tier": "All tier {tier}",
|
||||
"class": "{tier}阶 {class}",
|
||||
"tier": "所有 {tier} 阶",
|
||||
"all": "所有坦克"
|
||||
},
|
||||
"values": {
|
||||
|
||||
Reference in new issue
Block a user