feat: update bot chunk 3

This commit is contained in:
tresabhi committed 2025-01-16 13:53:29 -06:00
1 parent 122b3f6478
commit 5499cb5cca
9 files changed
+69 -46

No files matched your search

+2 -2
View File
@@ -28,10 +28,10 @@ export const aboutCommand = new Promise<CommandRegistry>(async (resolve) => {
async handler(interaction) { async handler(interaction) {
const subcommand = interaction.options.getSubcommand(); const subcommand = interaction.options.getSubcommand();
const { t } = translator(interaction.locale); const { strings } = translator(interaction.locale);
if (subcommand === 'commands') { if (subcommand === 'commands') {
return t`bot.commands.about.subcommands.commands.body${( return `${strings.bot.commands.about.subcommands.commands.body}${(
await Promise.all(COMMANDS_RAW) await Promise.all(COMMANDS_RAW)
) )
.sort((a, b) => .sort((a, b) =>
+6 -6
View File
@@ -11,17 +11,17 @@ export const debugCommand = new Promise<CommandRegistry>((resolve) => {
command: createLocalizedCommand('debug'), command: createLocalizedCommand('debug'),
async handler(interaction) { async handler(interaction) {
const { t } = translator(interaction.locale); const { strings } = translator(interaction.locale);
const currentTime = new Date().getTime(); const currentTime = new Date().getTime();
const uptime = currentTime - executionStart; const uptime = currentTime - executionStart;
const list = [ const list = [
[t`bot.commands.debug.body.version`, packageJSON.version], [strings.bot.commands.debug.body.version, packageJSON.version],
[ [
t`bot.commands.debug.body.shard`, strings.bot.commands.debug.body.shard,
client.shard?.ids[0] ?? t`bot.commands.debug.body.shard.default`, client.shard?.ids[0] ?? strings.bot.commands.debug.body.shard.default,
], ],
[ [
t`bot.commands.debug.body.uptime`, strings.bot.commands.debug.body.uptime,
`${Math.floor((uptime / 1000 / 60 / 60) % 24)}h ${Math.floor( `${Math.floor((uptime / 1000 / 60 / 60) % 24)}h ${Math.floor(
(uptime / 1000 / 60) % 60, (uptime / 1000 / 60) % 60,
)}m ${Math.floor((uptime / 1000) % 60)}s ${Math.floor( )}m ${Math.floor((uptime / 1000) % 60)}s ${Math.floor(
@@ -29,7 +29,7 @@ export const debugCommand = new Promise<CommandRegistry>((resolve) => {
)}ms`, )}ms`,
], ],
]; ];
return t`bot.commands.debug.body.title${list return `${strings.bot.commands.debug.body.title}${list
.map(([key, value]) => `- ${key}: ${value}`) .map(([key, value]) => `- ${key}: ${value}`)
.join('\n')}`; .join('\n')}`;
}, },
@@ -21,7 +21,7 @@ export function GenericAllStats({
supplementaryStats, supplementaryStats,
locale, locale,
}: GenericAllStatsProps) { }: GenericAllStatsProps) {
const { t } = translator(locale); const { strings } = translator(locale);
const damageRatio = stats.damage_dealt / stats.damage_received; const damageRatio = stats.damage_dealt / stats.damage_received;
const killsToDeathRatio = const killsToDeathRatio =
stats.frags / (stats.battles - stats.survived_battles); stats.frags / (stats.battles - stats.survived_battles);
@@ -30,27 +30,28 @@ export function GenericAllStats({
<Root> <Root>
<Row> <Row>
<Card <Card
title={t`bot.commands.full_stats.body.cards.games`} title={strings.bot.commands.full_stats.body.cards.games.$}
items={[ items={[
{ {
label: t`bot.commands.full_stats.body.cards.games.winrate`, label: strings.bot.commands.full_stats.body.cards.games.winrate,
value: `${(100 * (stats.wins / stats.battles)).toFixed(2)}%`, value: `${(100 * (stats.wins / stats.battles)).toFixed(2)}%`,
}, },
{ {
label: t`bot.commands.full_stats.body.cards.games.battles`, label: strings.bot.commands.full_stats.body.cards.games.battles,
value: stats.battles, value: stats.battles,
}, },
{ {
label: t`bot.commands.full_stats.body.cards.games.wins_losses`, label:
strings.bot.commands.full_stats.body.cards.games.wins_losses,
value: `${stats.wins} / ${stats.losses}`, value: `${stats.wins} / ${stats.losses}`,
}, },
]} ]}
/> />
<Card <Card
title={t`bot.commands.full_stats.body.cards.efficiency`} title={strings.bot.commands.full_stats.body.cards.efficiency.$}
items={[ items={[
{ {
label: t`bot.commands.full_stats.body.cards.efficiency.wn8`, label: strings.bot.commands.full_stats.body.cards.efficiency.wn8,
value: value:
supplementaryStats && isNumber(supplementaryStats.WN8) supplementaryStats && isNumber(supplementaryStats.WN8)
? supplementaryStats.WN8!.toFixed(0) ? supplementaryStats.WN8!.toFixed(0)
@@ -60,14 +61,16 @@ export function GenericAllStats({
: undefined, : undefined,
}, },
{ {
label: t`bot.commands.full_stats.body.cards.efficiency.survival`, label:
strings.bot.commands.full_stats.body.cards.efficiency.survival,
value: `${( value: `${(
100 * 100 *
(stats.survived_battles / stats.battles) (stats.survived_battles / stats.battles)
).toFixed(2)}%`, ).toFixed(2)}%`,
}, },
{ {
label: t`bot.commands.full_stats.body.cards.efficiency.accuracy`, label:
strings.bot.commands.full_stats.body.cards.efficiency.accuracy,
value: `${((stats.hits / stats.shots) * 100).toFixed(2)}%`, value: `${((stats.hits / stats.shots) * 100).toFixed(2)}%`,
}, },
]} ]}
@@ -75,14 +78,18 @@ export function GenericAllStats({
</Row> </Row>
<Row> <Row>
<Card <Card
title={t`bot.commands.full_stats.body.cards.lethality`} title={strings.bot.commands.full_stats.body.cards.lethality.$}
items={[ items={[
{ {
label: t`bot.commands.full_stats.body.cards.lethality.average_damage`, label:
strings.bot.commands.full_stats.body.cards.lethality
.average_damage,
value: (stats.damage_dealt / stats.battles).toFixed(0), value: (stats.damage_dealt / stats.battles).toFixed(0),
}, },
{ {
label: t`bot.commands.full_stats.body.cards.lethality.damage_per_tier`, label:
strings.bot.commands.full_stats.body.cards.lethality
.damage_per_tier,
value: supplementaryStats?.tier value: supplementaryStats?.tier
? ( ? (
stats.damage_dealt / stats.damage_dealt /
@@ -92,32 +99,44 @@ export function GenericAllStats({
: undefined, : undefined,
}, },
{ {
label: t`bot.commands.full_stats.body.cards.lethality.damage_ratio`, label:
strings.bot.commands.full_stats.body.cards.lethality
.damage_ratio,
value: isFinite(damageRatio) ? damageRatio.toFixed(2) : undefined, value: isFinite(damageRatio) ? damageRatio.toFixed(2) : undefined,
}, },
{ {
label: t`bot.commands.full_stats.body.cards.lethality.average_kills`, label:
strings.bot.commands.full_stats.body.cards.lethality
.average_kills,
value: (stats.frags / stats.battles).toFixed(0), value: (stats.frags / stats.battles).toFixed(0),
}, },
]} ]}
/> />
<Card <Card
title={t`bot.commands.full_stats.body.cards.miscellaneous`} title={strings.bot.commands.full_stats.body.cards.miscellaneous.$}
items={[ items={[
{ {
label: t`bot.commands.full_stats.body.cards.miscellaneous.average_tier`, label:
strings.bot.commands.full_stats.body.cards.miscellaneous
.average_tier,
value: supplementaryStats?.tier?.toFixed(2), value: supplementaryStats?.tier?.toFixed(2),
}, },
{ {
label: t`bot.commands.full_stats.body.cards.miscellaneous.average_spots`, label:
strings.bot.commands.full_stats.body.cards.miscellaneous
.average_spots,
value: (stats.spotted / stats.battles).toFixed(2), value: (stats.spotted / stats.battles).toFixed(2),
}, },
{ {
label: t`bot.commands.full_stats.body.cards.miscellaneous.average_xp`, label:
strings.bot.commands.full_stats.body.cards.miscellaneous
.average_xp,
value: (stats.xp / stats.battles).toFixed(0), value: (stats.xp / stats.battles).toFixed(0),
}, },
{ {
label: t`bot.commands.full_stats.body.cards.miscellaneous.kills_to_death_ratio`, label:
strings.bot.commands.full_stats.body.cards.miscellaneous
.kills_to_death_ratio,
value: isFinite(killsToDeathRatio) value: isFinite(killsToDeathRatio)
? killsToDeathRatio.toFixed(2) ? killsToDeathRatio.toFixed(2)
: undefined, : undefined,
@@ -8,15 +8,15 @@ export async function searchClansAcrossRegionsBotWrapper(
locale: Locale, locale: Locale,
limit?: number, limit?: number,
) { ) {
const { t } = translator(locale); const { strings } = translator(locale);
const trimmed = search.trim(); const trimmed = search.trim();
if (trimmed.length < 3) { if (trimmed.length < 3) {
throw new UserError(t`bot.common.errors.query_too_small`); throw new UserError(strings.bot.common.errors.query_too_small);
} }
if (trimmed.length > 100) { if (trimmed.length > 100) {
throw new UserError(t`bot.common.errors.query_too_long`); throw new UserError(strings.bot.common.errors.query_too_long);
} }
return await searchClansAcrossRegions(trimmed, limit); return await searchClansAcrossRegions(trimmed, limit);
@@ -8,15 +8,15 @@ export async function searchPlayersAcrossRegionsBotWrapper(
locale: Locale, locale: Locale,
limit?: number, limit?: number,
) { ) {
const { t } = translator(locale); const { strings } = translator(locale);
const trimmed = search.trim(); const trimmed = search.trim();
if (trimmed.length < 3) { if (trimmed.length < 3) {
throw new UserError(t`bot.common.errors.query_too_small`); throw new UserError(strings.bot.common.errors.query_too_small);
} }
if (trimmed.length > 100) { if (trimmed.length > 100) {
throw new UserError(t`bot.common.errors.query_too_long`); throw new UserError(strings.bot.common.errors.query_too_long);
} }
return await searchPlayersAcrossRegions(trimmed, limit); return await searchPlayersAcrossRegions(trimmed, limit);
@@ -38,7 +38,7 @@ export async function getTankHistories(
locale: Locale, locale: Locale,
options?: Partial<GetTankHistoriesOptions>, options?: Partial<GetTankHistoriesOptions>,
) { ) {
const { t } = translator(locale); const { strings } = translator(locale);
const mergedOptions = { ...getTankHistoriesDefaultOptions, ...options }; const mergedOptions = { ...getTankHistoriesDefaultOptions, ...options };
const tankHistoriesResponse = await fetch( const tankHistoriesResponse = await fetch(
`https://www.blitzstars.com/api/tankhistories/for/${id}/`, `https://www.blitzstars.com/api/tankhistories/for/${id}/`,
@@ -82,7 +82,7 @@ export async function getTankHistories(
const tankStats = await getTankStats(server, id); const tankStats = await getTankStats(server, id);
if (tankStats === null) { if (tankStats === null) {
throw new UserError(t`bot.common.errors.no_tank_stats`); throw new UserError(strings.bot.common.errors.no_tank_stats);
} }
tankStats.forEach((tankHistory) => { tankStats.forEach((tankHistory) => {
@@ -3,16 +3,22 @@ import { translator } from '../localization/translator';
import { localizationObject } from './localizationObject'; import { localizationObject } from './localizationObject';
export function addUsernameChoices(option: SlashCommandStringOption) { export function addUsernameChoices(option: SlashCommandStringOption) {
const { t } = translator(Locale.EnglishUS); const { strings } = translator(Locale.EnglishUS);
return option return option
.setName(t`bot.common.options.username`) .setName(strings.bot.common.options.username.$)
.setNameLocalizations( .setNameLocalizations(
localizationObject('bot.common.options.username', undefined, true), localizationObject(
(strings) => strings.bot.common.options.username.$,
undefined,
true,
),
) )
.setDescription(t`bot.common.options.username.description`) .setDescription(strings.bot.common.options.username.description)
.setDescriptionLocalizations( .setDescriptionLocalizations(
localizationObject('bot.common.options.username.description'), localizationObject(
(strings) => strings.bot.common.options.username.description,
),
) )
.setAutocomplete(true); .setAutocomplete(true);
} }
@@ -6,13 +6,13 @@ export function buttonRefresh(
interaction: ChatInputCommandInteraction, interaction: ChatInputCommandInteraction,
path: string, path: string,
) { ) {
const { t } = translator(interaction.locale); const { strings } = translator(interaction.locale);
if ( if (
interaction.appPermissions?.has('ReadMessageHistory') && interaction.appPermissions?.has('ReadMessageHistory') &&
interaction.appPermissions?.has('ViewChannel') interaction.appPermissions?.has('ViewChannel')
) { ) {
return buttonPrimary(path, t`bot.common.buttons.refresh`); return buttonPrimary(path, strings.bot.common.buttons.refresh);
} }
return null; return null;
@@ -12,8 +12,6 @@ import {
SlashCommandSubcommandsOnlyBuilder, SlashCommandSubcommandsOnlyBuilder,
} from 'discord.js'; } from 'discord.js';
import { RenderConfiguration } from '../../core/blitzkit/renderConfiguration'; import { RenderConfiguration } from '../../core/blitzkit/renderConfiguration';
import { handleAutocomplete } from './handlers/autocomplete';
import { handleChatInputCommand } from './handlers/chatInputCommand';
export type InteractionRawReturnable = export type InteractionRawReturnable =
| string | string
@@ -109,9 +107,9 @@ export const commands = Promise.allSettled(COMMANDS_RAW).then((rawCommands) => {
export async function interactionCreate(interaction: Interaction<CacheType>) { export async function interactionCreate(interaction: Interaction<CacheType>) {
if (interaction.isAutocomplete()) { if (interaction.isAutocomplete()) {
handleAutocomplete(interaction); // handleAutocomplete(interaction);
} else if (interaction.isChatInputCommand()) { } else if (interaction.isChatInputCommand()) {
handleChatInputCommand(interaction); // handleChatInputCommand(interaction);
} else if (interaction.isButton()) { } else if (interaction.isButton()) {
// handleButton(interaction); // handleButton(interaction);
} }