feat: replace $

This commit is contained in:
tresabhi committed 2025-01-16 14:22:30 -06:00
1 parent 98724df711
commit f9f7468544
17 files changed
+182 -175

No files matched your search

+4 -4
View File
@@ -10,11 +10,11 @@ import { createLocalizedCommand } from '../core/discord/createLocalizedCommand';
import { translator } from '../core/localization/translator'; import { translator } from '../core/localization/translator';
import { CommandRegistry } from '../events/interactionCreate'; import { CommandRegistry } from '../events/interactionCreate';
interface Auction { type Auction = null | {
count: number; count: number;
has_next: boolean; has_next: boolean;
results: Result[]; results: Result[];
} };
type Result = type Result =
| { | {
@@ -88,12 +88,12 @@ export const auctionCommand = new Promise<CommandRegistry>((resolve) => {
pageSize pageSize
}&type[]=vehicle&saleable=${saleable}`, }&type[]=vehicle&saleable=${saleable}`,
).then((response) => response.json() as Promise<Auction>); ).then((response) => response.json() as Promise<Auction>);
const saleableTanks = data.results.filter((result) => result.available);
if (saleableTanks.length === 0) { if (data === null) {
return strings.bot.commands.auction.errors.no_auction; return strings.bot.commands.auction.errors.no_auction;
} }
const saleableTanks = data.results.filter((result) => result.available);
const nextPricesTimestamp = saleableTanks[0].next_price_timestamp; const nextPricesTimestamp = saleableTanks[0].next_price_timestamp;
const title = `# ${strings.bot.commands.auction.body.title}`; const title = `# ${strings.bot.commands.auction.body.title}`;
+1 -1
View File
@@ -26,7 +26,7 @@ export const inactiveCommand = new Promise<CommandRegistry>((resolve) => {
.setName('threshold') .setName('threshold')
.setNameLocalizations( .setNameLocalizations(
localizationObject( localizationObject(
(strings) => strings.bot.commands.inactive.options.threshold.$, (strings) => strings.bot.commands.inactive.options.threshold.name,
undefined, undefined,
true, true,
), ),
@@ -60,11 +60,11 @@ export const ratingLeaderboardCommand = new Promise<CommandRegistry>(
return option return option
.addIntegerOption((option) => .addIntegerOption((option) =>
option option
.setName(strings.bot.commands.rating_leaderboard.options.limit.$) .setName(strings.bot.commands.rating_leaderboard.options.limit.name)
.setNameLocalizations( .setNameLocalizations(
localizationObject( localizationObject(
(strings) => (strings) =>
strings.bot.commands.rating_leaderboard.options.limit.$, strings.bot.commands.rating_leaderboard.options.limit.name,
undefined, undefined,
true, true,
), ),
@@ -90,11 +90,13 @@ export const ratingLeaderboardCommand = new Promise<CommandRegistry>(
) )
.addStringOption((option) => .addStringOption((option) =>
option option
.setName(strings.bot.commands.rating_leaderboard.options.season.$) .setName(
strings.bot.commands.rating_leaderboard.options.season.name,
)
.setNameLocalizations( .setNameLocalizations(
localizationObject( localizationObject(
(strings) => (strings) =>
strings.bot.commands.rating_leaderboard.options.season.$, strings.bot.commands.rating_leaderboard.options.season.name,
undefined, undefined,
true, true,
), ),
@@ -159,13 +161,13 @@ export const ratingLeaderboardCommand = new Promise<CommandRegistry>(
return option return option
.setName( .setName(
strings.bot.commands.rating_leaderboard.options.league.$, strings.bot.commands.rating_leaderboard.options.league.name,
) )
.setNameLocalizations( .setNameLocalizations(
localizationObject( localizationObject(
(strings) => (strings) =>
strings.bot.commands.rating_leaderboard.options.league strings.bot.commands.rating_leaderboard.options.league
.$, .name,
undefined, undefined,
true, true,
), ),
+5 -4
View File
@@ -35,10 +35,11 @@ export const researchCommand = new Promise<CommandRegistry>((resolve) => {
command: createLocalizedCommand('research') command: createLocalizedCommand('research')
.addStringOption((option) => .addStringOption((option) =>
option option
.setName(strings.bot.commands.research.options.target_tank.$) .setName(strings.bot.commands.research.options.target_tank.name)
.setNameLocalizations( .setNameLocalizations(
localizationObject( localizationObject(
(strings) => strings.bot.commands.research.options.target_tank.$, (strings) =>
strings.bot.commands.research.options.target_tank.name,
undefined, undefined,
true, true,
), ),
@@ -57,11 +58,11 @@ export const researchCommand = new Promise<CommandRegistry>((resolve) => {
) )
.addStringOption((option) => .addStringOption((option) =>
option option
.setName(strings.bot.commands.research.options.starting_tank.$) .setName(strings.bot.commands.research.options.starting_tank.name)
.setNameLocalizations( .setNameLocalizations(
localizationObject( localizationObject(
(strings) => (strings) =>
strings.bot.commands.research.options.starting_tank.$, strings.bot.commands.research.options.starting_tank.name,
undefined, undefined,
true, true,
), ),
+2 -2
View File
@@ -23,10 +23,10 @@ export const searchClansCommand = new Promise<CommandRegistry>((resolve) => {
const { strings } = translator(Locale.EnglishUS); const { strings } = translator(Locale.EnglishUS);
return option return option
.setName(strings.bot.commands.search_clans.options.limit.$) .setName(strings.bot.commands.search_clans.options.limit.name)
.setNameLocalizations( .setNameLocalizations(
localizationObject( localizationObject(
(strings) => strings.bot.commands.search_clans.options.limit.$, (strings) => strings.bot.commands.search_clans.options.limit.name,
undefined, undefined,
true, true,
), ),
+3 -2
View File
@@ -28,10 +28,11 @@ export const searchPlayersCommand = new Promise<CommandRegistry>((resolve) => {
) )
.addIntegerOption((option) => .addIntegerOption((option) =>
option option
.setName(strings.bot.commands.search_players.options.limit.$) .setName(strings.bot.commands.search_players.options.limit.name)
.setNameLocalizations( .setNameLocalizations(
localizationObject( localizationObject(
(strings) => strings.bot.commands.search_players.options.limit.$, (strings) =>
strings.bot.commands.search_players.options.limit.name,
undefined, undefined,
true, true,
), ),
@@ -30,7 +30,7 @@ export function GenericAllStats({
<Root> <Root>
<Row> <Row>
<Card <Card
title={strings.bot.commands.full_stats.body.cards.games.$} title={strings.bot.commands.full_stats.body.cards.games.title}
items={[ items={[
{ {
label: strings.bot.commands.full_stats.body.cards.games.winrate, label: strings.bot.commands.full_stats.body.cards.games.winrate,
@@ -48,7 +48,7 @@ export function GenericAllStats({
]} ]}
/> />
<Card <Card
title={strings.bot.commands.full_stats.body.cards.efficiency.$} title={strings.bot.commands.full_stats.body.cards.efficiency.title}
items={[ items={[
{ {
label: strings.bot.commands.full_stats.body.cards.efficiency.wn8, label: strings.bot.commands.full_stats.body.cards.efficiency.wn8,
@@ -78,7 +78,7 @@ export function GenericAllStats({
</Row> </Row>
<Row> <Row>
<Card <Card
title={strings.bot.commands.full_stats.body.cards.lethality.$} title={strings.bot.commands.full_stats.body.cards.lethality.title}
items={[ items={[
{ {
label: label:
@@ -113,7 +113,7 @@ export function GenericAllStats({
]} ]}
/> />
<Card <Card
title={strings.bot.commands.full_stats.body.cards.miscellaneous.$} title={strings.bot.commands.full_stats.body.cards.miscellaneous.title}
items={[ items={[
{ {
label: label:
@@ -9,7 +9,7 @@ export function addClanChoices(option: SlashCommandStringOption) {
.setName('clan') .setName('clan')
.setNameLocalizations( .setNameLocalizations(
localizationObject( localizationObject(
(strings) => strings.bot.common.options.clan.$, (strings) => strings.bot.common.options.clan.name,
undefined, undefined,
true, true,
), ),
@@ -23,10 +23,10 @@ export function addFilterOptions<
option option
.addStringOption((option) => .addStringOption((option) =>
option option
.setName(strings.bot.common.options.filters.nation.$) .setName(strings.bot.common.options.filters.nation.name)
.setNameLocalizations( .setNameLocalizations(
localizationObject( localizationObject(
(strings) => strings.bot.common.options.filters.nation.$, (strings) => strings.bot.common.options.filters.nation.name,
undefined, undefined,
true, true,
), ),
@@ -60,10 +60,10 @@ export function addFilterOptions<
.addStringOption((option) => addTierChoices(option).setRequired(false)) .addStringOption((option) => addTierChoices(option).setRequired(false))
.addStringOption((option) => .addStringOption((option) =>
option option
.setName(strings.bot.common.options.filters.class.$) .setName(strings.bot.common.options.filters.class.name)
.setNameLocalizations( .setNameLocalizations(
localizationObject( localizationObject(
(strings) => strings.bot.common.options.filters.class.$, (strings) => strings.bot.common.options.filters.class.name,
undefined, undefined,
true, true,
), ),
@@ -90,10 +90,10 @@ export function addFilterOptions<
) )
.addStringOption((option) => .addStringOption((option) =>
option option
.setName(strings.bot.common.options.filters.type.$) .setName(strings.bot.common.options.filters.type.name)
.setNameLocalizations( .setNameLocalizations(
localizationObject( localizationObject(
(strings) => strings.bot.common.options.filters.type.$, (strings) => strings.bot.common.options.filters.type.name,
undefined, undefined,
true, true,
), ),
@@ -19,32 +19,32 @@ export function addPeriodSubCommands(
const { strings } = translator(Locale.EnglishUS); const { strings } = translator(Locale.EnglishUS);
const subcommandNameLocalizations = { const subcommandNameLocalizations = {
today: localizationObject( today: localizationObject(
(strings) => strings.bot.common.subcommands.today.$, (strings) => strings.bot.common.subcommands.today.name,
undefined, undefined,
true, true,
), ),
30: localizationObject( 30: localizationObject(
(strings) => strings.bot.common.subcommands[30].$, (strings) => strings.bot.common.subcommands[30].name,
undefined, undefined,
true, true,
), ),
60: localizationObject( 60: localizationObject(
(strings) => strings.bot.common.subcommands[60].$, (strings) => strings.bot.common.subcommands[60].name,
undefined, undefined,
true, true,
), ),
90: localizationObject( 90: localizationObject(
(strings) => strings.bot.common.subcommands[90].$, (strings) => strings.bot.common.subcommands[90].name,
undefined, undefined,
true, true,
), ),
career: localizationObject( career: localizationObject(
(strings) => strings.bot.common.subcommands.career.$, (strings) => strings.bot.common.subcommands.career.name,
undefined, undefined,
true, true,
), ),
custom: localizationObject( custom: localizationObject(
(strings) => strings.bot.common.subcommands.custom.$, (strings) => strings.bot.common.subcommands.custom.name,
undefined, undefined,
true, true,
), ),
@@ -74,7 +74,7 @@ export function addPeriodSubCommands(
.addSubcommand((option) => .addSubcommand((option) =>
extra( extra(
option option
.setName(strings.bot.common.subcommands.today.$) .setName(strings.bot.common.subcommands.today.name)
.setNameLocalizations(subcommandNameLocalizations.today) .setNameLocalizations(subcommandNameLocalizations.today)
.setDescription(strings.bot.common.subcommands.today.description) .setDescription(strings.bot.common.subcommands.today.description)
.setDescriptionLocalizations( .setDescriptionLocalizations(
@@ -85,7 +85,7 @@ export function addPeriodSubCommands(
.addSubcommand((option) => .addSubcommand((option) =>
extra( extra(
option option
.setName(strings.bot.common.subcommands[30].$) .setName(strings.bot.common.subcommands[30].name)
.setNameLocalizations(subcommandNameLocalizations[30]) .setNameLocalizations(subcommandNameLocalizations[30])
.setDescription(strings.bot.common.subcommands[30].description) .setDescription(strings.bot.common.subcommands[30].description)
.setDescriptionLocalizations(subcommandDescriptionLocalizations[30]), .setDescriptionLocalizations(subcommandDescriptionLocalizations[30]),
@@ -94,7 +94,7 @@ export function addPeriodSubCommands(
.addSubcommand((option) => .addSubcommand((option) =>
extra( extra(
option option
.setName(strings.bot.common.subcommands[60].$) .setName(strings.bot.common.subcommands[60].name)
.setNameLocalizations(subcommandNameLocalizations[60]) .setNameLocalizations(subcommandNameLocalizations[60])
.setDescription(strings.bot.common.subcommands[60].description) .setDescription(strings.bot.common.subcommands[60].description)
.setDescriptionLocalizations(subcommandDescriptionLocalizations[60]), .setDescriptionLocalizations(subcommandDescriptionLocalizations[60]),
@@ -103,7 +103,7 @@ export function addPeriodSubCommands(
.addSubcommand((option) => .addSubcommand((option) =>
extra( extra(
option option
.setName(strings.bot.common.subcommands[90].$) .setName(strings.bot.common.subcommands[90].name)
.setNameLocalizations(subcommandNameLocalizations[90]) .setNameLocalizations(subcommandNameLocalizations[90])
.setDescription(strings.bot.common.subcommands[90].description) .setDescription(strings.bot.common.subcommands[90].description)
.setDescriptionLocalizations(subcommandDescriptionLocalizations[90]), .setDescriptionLocalizations(subcommandDescriptionLocalizations[90]),
@@ -112,7 +112,7 @@ export function addPeriodSubCommands(
.addSubcommand((option) => .addSubcommand((option) =>
extra( extra(
option option
.setName(strings.bot.common.subcommands.career.$) .setName(strings.bot.common.subcommands.career.name)
.setNameLocalizations(subcommandNameLocalizations.career) .setNameLocalizations(subcommandNameLocalizations.career)
.setDescription(strings.bot.common.subcommands.career.description) .setDescription(strings.bot.common.subcommands.career.description)
.setDescriptionLocalizations( .setDescriptionLocalizations(
@@ -123,7 +123,7 @@ export function addPeriodSubCommands(
.addSubcommand((option) => .addSubcommand((option) =>
extra( extra(
option option
.setName(strings.bot.common.subcommands.custom.$) .setName(strings.bot.common.subcommands.custom.name)
.setNameLocalizations(subcommandNameLocalizations.custom) .setNameLocalizations(subcommandNameLocalizations.custom)
.setDescription(strings.bot.common.subcommands.custom.description) .setDescription(strings.bot.common.subcommands.custom.description)
.setDescriptionLocalizations( .setDescriptionLocalizations(
@@ -131,7 +131,7 @@ export function addPeriodSubCommands(
) )
.addIntegerOption((option) => .addIntegerOption((option) =>
option option
.setName(strings.bot.common.subcommands.custom.options.start.$) .setName(strings.bot.common.subcommands.custom.options.start.name)
.setDescription( .setDescription(
strings.bot.common.subcommands.custom.options.start.description, strings.bot.common.subcommands.custom.options.start.description,
) )
@@ -139,7 +139,7 @@ export function addPeriodSubCommands(
) )
.addIntegerOption((option) => .addIntegerOption((option) =>
option option
.setName(strings.bot.common.subcommands.custom.options.end.$) .setName(strings.bot.common.subcommands.custom.options.end.name)
.setDescription( .setDescription(
strings.bot.common.subcommands.custom.options.end.description, strings.bot.common.subcommands.custom.options.end.description,
) )
@@ -11,10 +11,10 @@ export function addRegionChoices(option: SlashCommandStringOption) {
const { strings } = translator(Locale.EnglishUS); const { strings } = translator(Locale.EnglishUS);
return option return option
.setName(strings.bot.common.options.region.$) .setName(strings.bot.common.options.region.name)
.setNameLocalizations( .setNameLocalizations(
localizationObject( localizationObject(
(strings) => strings.bot.common.options.region.$, (strings) => strings.bot.common.options.region.name,
undefined, undefined,
true, true,
), ),
@@ -6,10 +6,10 @@ export function addTankChoices(option: SlashCommandStringOption) {
const { strings } = translator(Locale.EnglishUS); const { strings } = translator(Locale.EnglishUS);
return option return option
.setName(strings.bot.common.options.tank.$) .setName(strings.bot.common.options.tank.name)
.setNameLocalizations( .setNameLocalizations(
localizationObject( localizationObject(
(strings) => strings.bot.common.options.tank.$, (strings) => strings.bot.common.options.tank.name,
undefined, undefined,
true, true,
), ),
@@ -13,10 +13,10 @@ export function addTierChoices(option: SlashCommandStringOption) {
const { strings } = translator(Locale.EnglishUS); const { strings } = translator(Locale.EnglishUS);
return option return option
.setName(strings.bot.common.options.tier.$) .setName(strings.bot.common.options.tier.name)
.setNameLocalizations( .setNameLocalizations(
localizationObject( localizationObject(
(strings) => strings.bot.common.options.tier.$, (strings) => strings.bot.common.options.tier.name,
undefined, undefined,
true, true,
), ),
@@ -6,10 +6,10 @@ export function addUsernameChoices(option: SlashCommandStringOption) {
const { strings } = translator(Locale.EnglishUS); const { strings } = translator(Locale.EnglishUS);
return option return option
.setName(strings.bot.common.options.username.$) .setName(strings.bot.common.options.username.name)
.setNameLocalizations( .setNameLocalizations(
localizationObject( localizationObject(
(strings) => strings.bot.common.options.username.$, (strings) => strings.bot.common.options.username.name,
undefined, undefined,
true, true,
), ),
@@ -35,8 +35,8 @@ export async function autocompleteTanks(
{ {
keys: [ keys: [
...SUPPORTED_LOCALES.map((locale) => [ ...SUPPORTED_LOCALES.map((locale) => [
`searchableName.${locale}`, `searchableName.{locale}`,
`searchableNameDeburr.${locale}`, `searchableNameDeburr.{locale}`,
]).flat(), ]).flat(),
'camouflages', 'camouflages',
], ],
@@ -33,7 +33,7 @@ export function createLocalizedCommand(
.setName(command) .setName(command)
.setNameLocalizations( .setNameLocalizations(
localizationObject( localizationObject(
(strings) => strings.bot.commands[commandPathItem].$, (strings) => strings.bot.commands[commandPathItem].name,
undefined, undefined,
true, true,
), ),
@@ -52,9 +52,9 @@ export function createLocalizedCommand(
(strings) => (strings) =>
( (
strings.bot.commands[commandPathItem] as unknown as { strings.bot.commands[commandPathItem] as unknown as {
subcommands: Record<string, { $: string }>; subcommands: Record<string, { name: string }>;
} }
).subcommands[subItem.subcommand].$, ).subcommands[subItem.subcommand].name,
undefined, undefined,
true, true,
); );
@@ -87,9 +87,9 @@ export function createLocalizedCommand(
(strings) => (strings) =>
( (
strings.bot.commands[commandPathItem] as unknown as { strings.bot.commands[commandPathItem] as unknown as {
groups: Record<string, { $: string }>; groups: Record<string, { name: string }>;
} }
).groups[subItem.group].$, ).groups[subItem.group].name,
undefined, undefined,
true, true,
); );
+119 -116
View File
@@ -1,6 +1,6 @@
{ {
"test": { "test": {
"$": "test", "default": "test",
"long": "This is a long test string. You MUST NEVER see this in the UI. My favorite fruit is %s1 because it has the color of %s2. I like it so much that I will say its name 3 times! %s1! %s1! %s1! Once again, it's %s2, not %s3.", "long": "This is a long test string. You MUST NEVER see this in the UI. My favorite fruit is %s1 because it has the color of %s2. I like it so much that I will say its name 3 times! %s1! %s1! %s1! Once again, it's %s2, not %s3.",
"fox": "The quick brown fox jumps over the lazy dog." "fox": "The quick brown fox jumps over the lazy dog."
}, },
@@ -202,11 +202,11 @@
"bot": { "bot": {
"common": { "common": {
"errors": { "errors": {
"clan_not_found": "# Could not find clan\nCouldn't find \"%s\". Try selecting a clan from the search result.", "clan_not_found": "# Could not find clan\nCouldn't find \"%s1\". Try selecting a clan from the search result.",
"player_not_found": "# Could not find user\nI couldn't find user \"%s\". Try picking an user from the search result, typing in a valid username, or using the `/link` command.", "player_not_found": "# Could not find user\nI couldn't find user \"%s1\". Try picking an user from the search result, typing in a valid username, or using the `/link` command.",
"player_not_linked": "# Use `/link` to get started\nI don't know who you are but you can tell me today!", "player_not_linked": "# Use `/link` to get started\nI don't know who you are but you can tell me today!",
"tank_name_not_found": "# Tank not found\nCould not find tank by the name \"%s\".", "tank_name_not_found": "# Tank not found\nCould not find tank by the name \"%s1\".",
"tank_id_not_found": "# Tank not found\nCould not find tank by the ID \"%s\". Try typing the name of the tank instead of a number.", "tank_id_not_found": "# Tank not found\nCould not find tank by the ID \"%s1\". Try typing the name of the tank instead of a number.",
"no_tank_stats": "# No tank stats available\nThis player doesn't have any stats available. This may not be the player you are looking for.", "no_tank_stats": "# No tank stats available\nThis player doesn't have any stats available. This may not be the player you are looking for.",
"get_help": "Help Discord server", "get_help": "Help Discord server",
"uncaught_error": "# BlitzKit ran into an error!\nWe're so sorry about this. Feel free to [join the official Discord server](https://discord.gg/nDt7AjGJQH) to get help.", "uncaught_error": "# BlitzKit ran into an error!\nWe're so sorry about this. Feel free to [join the official Discord server](https://discord.gg/nDt7AjGJQH) to get help.",
@@ -216,51 +216,54 @@
}, },
"wn8": { "wn8": {
"$": "WN8", "name": "WN8",
"very_bad": "Very bad",
"bad": "Bad", "types": {
"below_average": "Below average", "very_bad": "Very bad",
"average": "Average", "bad": "Bad",
"above_average": "Above average", "below_average": "Below average",
"good": "Good", "average": "Average",
"very_good": "Very good", "above_average": "Above average",
"great": "Great", "good": "Good",
"unicum": "Unicum", "very_good": "Very good",
"super_unicum": "Super unicum" "great": "Great",
"unicum": "Unicum",
"super_unicum": "Super unicum"
}
}, },
"subcommands": { "subcommands": {
"today": { "today": {
"$": "today", "name": "today",
"description": "Today" "description": "Today"
}, },
"30": { "30": {
"$": "30", "name": "30",
"description": "30 days" "description": "30 days"
}, },
"60": { "60": {
"$": "60", "name": "60",
"description": "60 days" "description": "60 days"
}, },
"90": { "90": {
"$": "90", "name": "90",
"description": "90 days" "description": "90 days"
}, },
"career": { "career": {
"$": "career", "name": "career",
"description": "Career" "description": "Career"
}, },
"custom": { "custom": {
"$": "custom", "name": "custom",
"description": "Custom range", "description": "Custom range",
"options": { "options": {
"start": { "start": {
"$": "start", "name": "start",
"description": "Start in number of days ago from today" "description": "Start in number of days ago from today"
}, },
"end": { "end": {
"$": "end", "name": "end",
"description": "End in number of days ago from today" "description": "End in number of days ago from today"
} }
} }
@@ -269,46 +272,46 @@
"options": { "options": {
"clan": { "clan": {
"$": "clan", "name": "clan",
"description": "The clan name or tag" "description": "The clan name or tag"
}, },
"tank": { "tank": {
"$": "tank", "name": "tank",
"description": "The tank to get stats for" "description": "The tank to get stats for"
}, },
"username": { "username": {
"$": "username", "name": "username",
"description": "The Blitz username of the player" "description": "The Blitz username of the player"
}, },
"filters": { "filters": {
"nation": { "nation": {
"$": "nation", "name": "nation",
"description": "Nation" "description": "Nation"
}, },
"class": { "class": {
"$": "class", "name": "class",
"description": "Class" "description": "Class"
}, },
"type": { "type": {
"$": "type", "name": "type",
"description": "Type" "description": "Type"
} }
}, },
"region": { "region": {
"$": "region", "name": "region",
"description": "Region" "description": "Region"
}, },
"tier": { "tier": {
"$": "tier", "name": "tier",
"description": "Tier", "description": "Tier",
"choices": { "choices": {
"tier": "Tier %s - %s" "tier": "Tier %s1 - %s2"
} }
} }
}, },
@@ -316,13 +319,13 @@
"periods": { "periods": {
"career": "Career", "career": "Career",
"today": "Today", "today": "Today",
"days": "%s days", "days": "%s1 days",
"custom": "%s - %s days" "custom": "%s1 - %s2 days"
}, },
"filters": { "filters": {
"none": "No filters", "none": "No filters",
"tier": "Tier %s" "tier": "Tier %s1"
}, },
"no_data": { "no_data": {
@@ -350,14 +353,14 @@
"commands": { "commands": {
"auction": { "auction": {
"$": "auction", "name": "auction",
"description": "Tanks available right now in the auction", "description": "Tanks available right now in the auction",
"body": { "body": {
"title": "Blitz Auction", "title": "Blitz Auction",
"subtitle": "%s available • next prices %s\nBid now: %s", "subtitle": "%s1 available • next prices %s2\nBid now: %s3",
"next": "Next price: %s", "next": "Next price: %s1",
"available": "Available: %s / %s" "available": "Available: %s1 / %s2"
}, },
"errors": { "errors": {
"no_auction": "# No ongoing auction\n\nCurrently, there are no tanks available for purchase in the auction. If you think this is an error, please report this discrepancy in [the official Discord Server](https://discord.gg/nDt7AjGJQH)." "no_auction": "# No ongoing auction\n\nCurrently, there are no tanks available for purchase in the auction. If you think this is an error, please report this discrepancy in [the official Discord Server](https://discord.gg/nDt7AjGJQH)."
@@ -368,21 +371,21 @@
}, },
"replay": { "replay": {
"$": "replay", "name": "replay",
"description": "Display replay results" "description": "Display replay results"
}, },
"research": { "research": {
"$": "research", "name": "research",
"description": "Lists the expenses in researching a line", "description": "Lists the expenses in researching a line",
"options": { "options": {
"target_tank": { "target_tank": {
"$": "target-tank", "name": "target-tank",
"description": "The final tank to research in the line" "description": "The final tank to research in the line"
}, },
"starting_tank": { "starting_tank": {
"$": "starting-tank", "name": "starting-tank",
"description": "The starting tank in the line (inferred automatically if not provided)" "description": "The starting tank in the line (inferred automatically if not provided)"
} }
}, },
@@ -390,57 +393,57 @@
"body": { "body": {
"subtitle": "Research", "subtitle": "Research",
"total": "Total", "total": "Total",
"research": "Research: %s", "research": "Research: %s1",
"upgrades": "Upgrades: %s", "upgrades": "Upgrades: %s1",
"purchase": "Purchase: %s", "purchase": "Purchase: %s1",
"equipment": "Equipment: %s", "equipment": "Equipment: %s1",
"estimation": "# This is an estimation!\n\nThis list may include already researched tanks because of the inaccurate information Wargaming provides. Try providing a `starting-tank` from the line when using the command if you can." "estimation": "# This is an estimation!\n\nThis list may include already researched tanks because of the inaccurate information Wargaming provides. Try providing a `starting-tank` from the line when using the command if you can."
}, },
"errors": { "errors": {
"non_tech_tree": "# %s is not on the tech tree\n\nYou cannot research a premium/collector tank.", "non_tech_tree": "# %s1 is not on the tech tree\n\nYou cannot research a premium/collector tank.",
"tier_1": "# %s is a tier I\n\nTier I tanks are always unlocked for free for all players.", "tier_1": "# %s1 is a tier I\n\nTier I tanks are always unlocked for free for all players.",
"already_researched": "# %s is already researched\n\nTry providing a `starting-tank` when using the command to view the totals for a line you have already researched.", "already_researched": "# %s1 is already researched\n\nTry providing a `starting-tank` when using the command to view the totals for a line you have already researched.",
"start_end_equal": "# %s was provided twice\n\nMake sure `starting-tank` and `target-tank` are different.", "start_end_equal": "# %s1 was provided twice\n\nMake sure `starting-tank` and `target-tank` are different.",
"tanks_not_on_line": "# %s and %s are not on the same line\n\nMake sure `starting-tank` and `target-tank` are on the same tech-tree line.", "tanks_not_on_line": "# %s1 and %s2 are not on the same line\n\nMake sure `starting-tank` and `target-tank` are on the same tech-tree line.",
"unordered": "# %s higher tiered to %s\n\nMake sure to provide %s as the `starting-tank` instead as it is the lower tiered tank." "unordered": "# %s1 higher tiered to %s2\n\nMake sure to provide %s3 as the `starting-tank` instead as it is the lower tiered tank."
} }
}, },
"about": { "about": {
"$": "about", "name": "about",
"description": "All the info you need about the bot", "description": "All the info you need about the bot",
"subcommands": { "subcommands": {
"commands": { "commands": {
"$": "commands", "name": "commands",
"description": "List of all commands and their descriptions", "description": "List of all commands and their descriptions",
"body": "# Commands\n\nBlitzKit offers the following commands:\n\n" "body": "# Commands\n\nBlitzKit offers the following commands:\n\n"
}, },
"embeds": { "embeds": {
"$": "embeds", "name": "embeds",
"description": "How embeds work" "description": "How embeds work"
}, },
"introduction": { "introduction": {
"$": "introduction", "name": "introduction",
"description": "About the bot" "description": "About the bot"
}, },
"invite": { "invite": {
"$": "invite", "name": "invite",
"description": "How to invite the bot" "description": "How to invite the bot"
}, },
"timezones": { "timezones": {
"$": "timezones", "name": "timezones",
"description": "How BlitzKit infers and uses your timezone" "description": "How BlitzKit infers and uses your timezone"
}, },
"credits": { "credits": {
"$": "credits", "name": "credits",
"description": "People who have helped BlitzKit" "description": "People who have helped BlitzKit"
} }
} }
}, },
"breakdown": { "breakdown": {
"$": "breakdown", "name": "breakdown",
"description": "A period's breakdown by tanks played", "description": "A period's breakdown by tanks played",
"body": { "body": {
@@ -449,19 +452,19 @@
"wn8": "WN8", "wn8": "WN8",
"winrate": "Winrate", "winrate": "Winrate",
"damage": "Damage", "damage": "Damage",
"unknown_tank": "Unknown tank %s" "unknown_tank": "Unknown tank %s1"
} }
}, },
"debug": { "debug": {
"$": "debug", "name": "debug",
"description": "Debug information about the bot", "description": "Debug information about the bot",
"body": { "body": {
"title": "# Debug\n\n", "title": "# Debug\n\n",
"version": "Version", "version": "Version",
"shard": { "shard": {
"$": "Shard", "label": "Shard",
"default": "default" "default": "default"
}, },
"uptime": "Uptime" "uptime": "Uptime"
@@ -469,66 +472,66 @@
}, },
"evolution": { "evolution": {
"$": "evolution", "name": "evolution",
"description": "Evolution of statistics", "description": "Evolution of statistics",
"groups": { "groups": {
"player": { "player": {
"$": "player", "name": "player",
"description": "Player statistics" "description": "Player statistics"
}, },
"tank": { "tank": {
"$": "tank", "name": "tank",
"description": "Tank statistics" "description": "Tank statistics"
} }
} }
}, },
"inactive": { "inactive": {
"$": "inactive", "name": "inactive",
"description": "Lists all inactive players in a clan above a threshold", "description": "Lists all inactive players in a clan above a threshold",
"options": { "options": {
"threshold": { "threshold": {
"$": "threshold", "name": "threshold",
"description": "The number of days inactive (default: %s days)" "description": "The number of days inactive (default: %s1 days)"
} }
}, },
"body": { "body": {
"subtitle": "Inactive for %s+ days", "subtitle": "Inactive for %s1+ days",
"listing": "%s days" "listing": "%s1 days"
} }
}, },
"full_stats": { "full_stats": {
"$": "full-stats", "name": "full-stats",
"description": "Full in-game statistics", "description": "Full in-game statistics",
"body": { "body": {
"cards": { "cards": {
"games": { "games": {
"$": "Games", "title": "Games",
"winrate": "Winrate", "winrate": "Winrate",
"battles": "Battles", "battles": "Battles",
"wins_losses": "Wins / losses" "wins_losses": "Wins / losses"
}, },
"efficiency": { "efficiency": {
"$": "Efficiency", "title": "Efficiency",
"wn8": "WN8", "wn8": "WN8",
"survival": "Survival", "survival": "Survival",
"accuracy": "Accuracy" "accuracy": "Accuracy"
}, },
"lethality": { "lethality": {
"$": "Lethality", "title": "Lethality",
"average_damage": "Average damage", "average_damage": "Average damage",
"damage_per_tier": "Damage per tier", "damage_per_tier": "Damage per tier",
"damage_ratio": "Damage ratio", "damage_ratio": "Damage ratio",
"average_kills": "Average kills" "average_kills": "Average kills"
}, },
"miscellaneous": { "miscellaneous": {
"$": "Miscellaneous", "title": "Miscellaneous",
"average_tier": "Average tier", "average_tier": "Average tier",
"average_spots": "Average spots", "average_spots": "Average spots",
"average_xp": "Average XP", "average_xp": "Average XP",
@@ -539,13 +542,13 @@
}, },
"link": { "link": {
"$": "link", "name": "link",
"description": "Links your Blitz and Discord account", "description": "Links your Blitz and Discord account",
"body": { "body": {
"accounts_linked": "Accounts linked", "accounts_linked": "Accounts linked",
"no_role_permissions": { "no_role_permissions": {
"$": "%s failed to verify", "title": "%s1 failed to verify",
"description": "I don't have the permission to manage roles." "description": "I don't have the permission to manage roles."
} }
}, },
@@ -557,111 +560,111 @@
}, },
"search_clans": { "search_clans": {
"$": "search-clans", "name": "search-clans",
"description": "Search clans", "description": "Search clans",
"options": { "options": {
"limit": { "limit": {
"$": "limit", "name": "limit",
"description": "The max number of clan results (default: %s)" "description": "The max number of clan results (default: %s1)"
} }
}, },
"body": { "body": {
"title": "Clan search for %s in region %s", "title": "Clan search for %s1 in region %s2",
"no_results": "No clans found" "no_results": "No clans found"
} }
}, },
"search_players": { "search_players": {
"$": "search-players", "name": "search-players",
"description": "Search players", "description": "Search players",
"options": { "options": {
"limit": { "limit": {
"$": "limit", "name": "limit",
"description": "The max number of player results (default: %s)" "description": "The max number of player results (default: %s1)"
} }
}, },
"body": { "body": {
"title": "Player search for %s in region %s", "title": "Player search for %s1 in region %s2",
"no_results": "No players found" "no_results": "No players found"
} }
}, },
"rating_leaderboard": { "rating_leaderboard": {
"$": "rating-leaderboard", "name": "rating-leaderboard",
"description": "Rating battles statistics", "description": "Rating battles statistics",
"subcommands": { "subcommands": {
"neighbors": { "neighbors": {
"$": "neighbors", "name": "neighbors",
"description": "Neighboring players on the leaderboard" "description": "Neighboring players on the leaderboard"
}, },
"league": { "league": {
"$": "league", "name": "league",
"description": "Top players of a league" "description": "Top players of a league"
} }
}, },
"options": { "options": {
"limit": { "limit": {
"$": "limit", "name": "limit",
"description": "How many neighbors to display (default: %s)" "description": "How many neighbors to display (default: %s1)"
}, },
"season": { "season": {
"$": "season", "name": "season",
"description": "Season number (default: current)", "description": "Season number (default: current)",
"choices": { "choices": {
"current": "%s (current)" "current": "%s1 (current)"
} }
}, },
"league": { "league": {
"$": "league", "name": "league",
"description": "The league to display" "description": "The league to display"
} }
}, },
"body": { "body": {
"top_players": "Top %s players", "top_players": "Top %s1 players",
"no_participation": "# %s didn't play rating in season %s\n\nThis player did not participate in this season or did not get past calibration.", "no_participation": "# %s1 didn't play rating in season %s2\n\nThis player did not participate in this season or did not get past calibration.",
"no_ongoing_season": "# No ongoing season\n\nThere isn't a currently running rating season.", "no_ongoing_season": "# No ongoing season\n\nThere isn't a currently running rating season.",
"deleted_player": "Deleted %s", "deleted_player": "Deleted %s1",
"neighbors": "Rating neighbors", "neighbors": "Rating neighbors",
"more": "+ %s more" "more": "+ %s1 more"
} }
}, },
"today": { "today": {
"$": "today", "name": "today",
"description": "Today's played tanks and statistics" "description": "Today's played tanks and statistics"
}, },
"stats": { "stats": {
"$": "stats", "name": "stats",
"description": "Quick statistics for a period" "description": "Quick statistics for a period"
}, },
"owned_tanks": { "owned_tanks": {
"$": "owned-tanks", "name": "owned-tanks",
"description": "Shows all own tanks in a tier", "description": "Shows all own tanks in a tier",
"body": { "body": {
"title": "# %s's owned tier %s tanks\n\n" "title": "# %s1's owned tier %s2 tanks\n\n"
} }
}, },
"permissions": { "permissions": {
"$": "permissions", "name": "permissions",
"description": "Checks wether the bot has the required permissions to function", "description": "Checks wether the bot has the required permissions to function",
"body": { "body": {
"title": "# Permissions\n\n%s", "title": "# Permissions\n\n%s1",
"view_channels": "View channels: needed to find the message the refresh button was used on", "view_channels": "View channels: needed to find the message the refresh button was used on",
"read_message_history": "Read message history: needed to find the message to refresh", "read_message_history": "Read message history: needed to find the message to refresh",
"attach_files": "Attach files: needed to add images to image-based commands", "attach_files": "Attach files: needed to add images to image-based commands",
@@ -670,32 +673,32 @@
}, },
"ping": { "ping": {
"$": "ping", "name": "ping",
"description": "Check wether the bot is alive.", "description": "Check wether the bot is alive.",
"body": { "body": {
"pong": "Pong 🏓", "pong": "Pong 🏓",
"pong_with_time": "Pong 🏓 - %sms" "pong_with_time": "Pong 🏓 - %s1ms"
}, },
"subcommands": { "subcommands": {
"blitzkit": { "blitzkit": {
"$": "blitzkit", "name": "blitzkit",
"description": "Ping BlitzKit" "description": "Ping BlitzKit"
}, },
"wotb": { "wotb": {
"$": "wotb", "name": "wotb",
"description": "Ping World of Tanks Blitz" "description": "Ping World of Tanks Blitz"
} }
} }
}, },
"player_info": { "player_info": {
"$": "player-info", "name": "player-info",
"description": "Basic information about a player", "description": "Basic information about a player",
"body": { "body": {
"title": "%s's information", "title": "%s1's information",
"nickname": "Nickname", "nickname": "Nickname",
"battles": "Battles", "battles": "Battles",
"winrate": "Winrate", "winrate": "Winrate",
@@ -706,16 +709,16 @@
}, },
"rating": { "rating": {
"$": "rating", "name": "rating",
"description": "Rating player's statistics", "description": "Rating player's statistics",
"subcommands": { "subcommands": {
"today": { "today": {
"$": "today", "name": "today",
"description": "Today's rating statistics" "description": "Today's rating statistics"
}, },
"season": { "season": {
"$": "season", "name": "season",
"description": "This season's rating statistics" "description": "This season's rating statistics"
} }
}, },
@@ -728,7 +731,7 @@
}, },
"errors": { "errors": {
"no_participation": "# %s hasn't played rating\n\nThis player hasn't participated in the rating gamemode this season.", "no_participation": "# %s1 hasn't played rating\n\nThis player hasn't participated in the rating gamemode this season.",
"unrecorded_stats": "# Statistics currently unavailable\n\nWargaming may be currently be facing server downtime. If there is an on-going season, statistics should be available withing 24 hours." "unrecorded_stats": "# Statistics currently unavailable\n\nWargaming may be currently be facing server downtime. If there is an on-going season, statistics should be available withing 24 hours."
} }
} }