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 { CommandRegistry } from '../events/interactionCreate';
interface Auction {
type Auction = null | {
count: number;
has_next: boolean;
results: Result[];
}
};
type Result =
| {
@@ -88,12 +88,12 @@ export const auctionCommand = new Promise<CommandRegistry>((resolve) => {
pageSize
}&type[]=vehicle&saleable=${saleable}`,
).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;
}
const saleableTanks = data.results.filter((result) => result.available);
const nextPricesTimestamp = saleableTanks[0].next_price_timestamp;
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')
.setNameLocalizations(
localizationObject(
(strings) => strings.bot.commands.inactive.options.threshold.$,
(strings) => strings.bot.commands.inactive.options.threshold.name,
undefined,
true,
),
@@ -60,11 +60,11 @@ export const ratingLeaderboardCommand = new Promise<CommandRegistry>(
return option
.addIntegerOption((option) =>
option
.setName(strings.bot.commands.rating_leaderboard.options.limit.$)
.setName(strings.bot.commands.rating_leaderboard.options.limit.name)
.setNameLocalizations(
localizationObject(
(strings) =>
strings.bot.commands.rating_leaderboard.options.limit.$,
strings.bot.commands.rating_leaderboard.options.limit.name,
undefined,
true,
),
@@ -90,11 +90,13 @@ export const ratingLeaderboardCommand = new Promise<CommandRegistry>(
)
.addStringOption((option) =>
option
.setName(strings.bot.commands.rating_leaderboard.options.season.$)
.setName(
strings.bot.commands.rating_leaderboard.options.season.name,
)
.setNameLocalizations(
localizationObject(
(strings) =>
strings.bot.commands.rating_leaderboard.options.season.$,
strings.bot.commands.rating_leaderboard.options.season.name,
undefined,
true,
),
@@ -159,13 +161,13 @@ export const ratingLeaderboardCommand = new Promise<CommandRegistry>(
return option
.setName(
strings.bot.commands.rating_leaderboard.options.league.$,
strings.bot.commands.rating_leaderboard.options.league.name,
)
.setNameLocalizations(
localizationObject(
(strings) =>
strings.bot.commands.rating_leaderboard.options.league
.$,
.name,
undefined,
true,
),
+5 -4
View File
@@ -35,10 +35,11 @@ export const researchCommand = new Promise<CommandRegistry>((resolve) => {
command: createLocalizedCommand('research')
.addStringOption((option) =>
option
.setName(strings.bot.commands.research.options.target_tank.$)
.setName(strings.bot.commands.research.options.target_tank.name)
.setNameLocalizations(
localizationObject(
(strings) => strings.bot.commands.research.options.target_tank.$,
(strings) =>
strings.bot.commands.research.options.target_tank.name,
undefined,
true,
),
@@ -57,11 +58,11 @@ export const researchCommand = new Promise<CommandRegistry>((resolve) => {
)
.addStringOption((option) =>
option
.setName(strings.bot.commands.research.options.starting_tank.$)
.setName(strings.bot.commands.research.options.starting_tank.name)
.setNameLocalizations(
localizationObject(
(strings) =>
strings.bot.commands.research.options.starting_tank.$,
strings.bot.commands.research.options.starting_tank.name,
undefined,
true,
),
+2 -2
View File
@@ -23,10 +23,10 @@ export const searchClansCommand = new Promise<CommandRegistry>((resolve) => {
const { strings } = translator(Locale.EnglishUS);
return option
.setName(strings.bot.commands.search_clans.options.limit.$)
.setName(strings.bot.commands.search_clans.options.limit.name)
.setNameLocalizations(
localizationObject(
(strings) => strings.bot.commands.search_clans.options.limit.$,
(strings) => strings.bot.commands.search_clans.options.limit.name,
undefined,
true,
),
+3 -2
View File
@@ -28,10 +28,11 @@ export const searchPlayersCommand = new Promise<CommandRegistry>((resolve) => {
)
.addIntegerOption((option) =>
option
.setName(strings.bot.commands.search_players.options.limit.$)
.setName(strings.bot.commands.search_players.options.limit.name)
.setNameLocalizations(
localizationObject(
(strings) => strings.bot.commands.search_players.options.limit.$,
(strings) =>
strings.bot.commands.search_players.options.limit.name,
undefined,
true,
),
@@ -30,7 +30,7 @@ export function GenericAllStats({
<Root>
<Row>
<Card
title={strings.bot.commands.full_stats.body.cards.games.$}
title={strings.bot.commands.full_stats.body.cards.games.title}
items={[
{
label: strings.bot.commands.full_stats.body.cards.games.winrate,
@@ -48,7 +48,7 @@ export function GenericAllStats({
]}
/>
<Card
title={strings.bot.commands.full_stats.body.cards.efficiency.$}
title={strings.bot.commands.full_stats.body.cards.efficiency.title}
items={[
{
label: strings.bot.commands.full_stats.body.cards.efficiency.wn8,
@@ -78,7 +78,7 @@ export function GenericAllStats({
</Row>
<Row>
<Card
title={strings.bot.commands.full_stats.body.cards.lethality.$}
title={strings.bot.commands.full_stats.body.cards.lethality.title}
items={[
{
label:
@@ -113,7 +113,7 @@ export function GenericAllStats({
]}
/>
<Card
title={strings.bot.commands.full_stats.body.cards.miscellaneous.$}
title={strings.bot.commands.full_stats.body.cards.miscellaneous.title}
items={[
{
label:
@@ -9,7 +9,7 @@ export function addClanChoices(option: SlashCommandStringOption) {
.setName('clan')
.setNameLocalizations(
localizationObject(
(strings) => strings.bot.common.options.clan.$,
(strings) => strings.bot.common.options.clan.name,
undefined,
true,
),
@@ -23,10 +23,10 @@ export function addFilterOptions<
option
.addStringOption((option) =>
option
.setName(strings.bot.common.options.filters.nation.$)
.setName(strings.bot.common.options.filters.nation.name)
.setNameLocalizations(
localizationObject(
(strings) => strings.bot.common.options.filters.nation.$,
(strings) => strings.bot.common.options.filters.nation.name,
undefined,
true,
),
@@ -60,10 +60,10 @@ export function addFilterOptions<
.addStringOption((option) => addTierChoices(option).setRequired(false))
.addStringOption((option) =>
option
.setName(strings.bot.common.options.filters.class.$)
.setName(strings.bot.common.options.filters.class.name)
.setNameLocalizations(
localizationObject(
(strings) => strings.bot.common.options.filters.class.$,
(strings) => strings.bot.common.options.filters.class.name,
undefined,
true,
),
@@ -90,10 +90,10 @@ export function addFilterOptions<
)
.addStringOption((option) =>
option
.setName(strings.bot.common.options.filters.type.$)
.setName(strings.bot.common.options.filters.type.name)
.setNameLocalizations(
localizationObject(
(strings) => strings.bot.common.options.filters.type.$,
(strings) => strings.bot.common.options.filters.type.name,
undefined,
true,
),
@@ -19,32 +19,32 @@ export function addPeriodSubCommands(
const { strings } = translator(Locale.EnglishUS);
const subcommandNameLocalizations = {
today: localizationObject(
(strings) => strings.bot.common.subcommands.today.$,
(strings) => strings.bot.common.subcommands.today.name,
undefined,
true,
),
30: localizationObject(
(strings) => strings.bot.common.subcommands[30].$,
(strings) => strings.bot.common.subcommands[30].name,
undefined,
true,
),
60: localizationObject(
(strings) => strings.bot.common.subcommands[60].$,
(strings) => strings.bot.common.subcommands[60].name,
undefined,
true,
),
90: localizationObject(
(strings) => strings.bot.common.subcommands[90].$,
(strings) => strings.bot.common.subcommands[90].name,
undefined,
true,
),
career: localizationObject(
(strings) => strings.bot.common.subcommands.career.$,
(strings) => strings.bot.common.subcommands.career.name,
undefined,
true,
),
custom: localizationObject(
(strings) => strings.bot.common.subcommands.custom.$,
(strings) => strings.bot.common.subcommands.custom.name,
undefined,
true,
),
@@ -74,7 +74,7 @@ export function addPeriodSubCommands(
.addSubcommand((option) =>
extra(
option
.setName(strings.bot.common.subcommands.today.$)
.setName(strings.bot.common.subcommands.today.name)
.setNameLocalizations(subcommandNameLocalizations.today)
.setDescription(strings.bot.common.subcommands.today.description)
.setDescriptionLocalizations(
@@ -85,7 +85,7 @@ export function addPeriodSubCommands(
.addSubcommand((option) =>
extra(
option
.setName(strings.bot.common.subcommands[30].$)
.setName(strings.bot.common.subcommands[30].name)
.setNameLocalizations(subcommandNameLocalizations[30])
.setDescription(strings.bot.common.subcommands[30].description)
.setDescriptionLocalizations(subcommandDescriptionLocalizations[30]),
@@ -94,7 +94,7 @@ export function addPeriodSubCommands(
.addSubcommand((option) =>
extra(
option
.setName(strings.bot.common.subcommands[60].$)
.setName(strings.bot.common.subcommands[60].name)
.setNameLocalizations(subcommandNameLocalizations[60])
.setDescription(strings.bot.common.subcommands[60].description)
.setDescriptionLocalizations(subcommandDescriptionLocalizations[60]),
@@ -103,7 +103,7 @@ export function addPeriodSubCommands(
.addSubcommand((option) =>
extra(
option
.setName(strings.bot.common.subcommands[90].$)
.setName(strings.bot.common.subcommands[90].name)
.setNameLocalizations(subcommandNameLocalizations[90])
.setDescription(strings.bot.common.subcommands[90].description)
.setDescriptionLocalizations(subcommandDescriptionLocalizations[90]),
@@ -112,7 +112,7 @@ export function addPeriodSubCommands(
.addSubcommand((option) =>
extra(
option
.setName(strings.bot.common.subcommands.career.$)
.setName(strings.bot.common.subcommands.career.name)
.setNameLocalizations(subcommandNameLocalizations.career)
.setDescription(strings.bot.common.subcommands.career.description)
.setDescriptionLocalizations(
@@ -123,7 +123,7 @@ export function addPeriodSubCommands(
.addSubcommand((option) =>
extra(
option
.setName(strings.bot.common.subcommands.custom.$)
.setName(strings.bot.common.subcommands.custom.name)
.setNameLocalizations(subcommandNameLocalizations.custom)
.setDescription(strings.bot.common.subcommands.custom.description)
.setDescriptionLocalizations(
@@ -131,7 +131,7 @@ export function addPeriodSubCommands(
)
.addIntegerOption((option) =>
option
.setName(strings.bot.common.subcommands.custom.options.start.$)
.setName(strings.bot.common.subcommands.custom.options.start.name)
.setDescription(
strings.bot.common.subcommands.custom.options.start.description,
)
@@ -139,7 +139,7 @@ export function addPeriodSubCommands(
)
.addIntegerOption((option) =>
option
.setName(strings.bot.common.subcommands.custom.options.end.$)
.setName(strings.bot.common.subcommands.custom.options.end.name)
.setDescription(
strings.bot.common.subcommands.custom.options.end.description,
)
@@ -11,10 +11,10 @@ export function addRegionChoices(option: SlashCommandStringOption) {
const { strings } = translator(Locale.EnglishUS);
return option
.setName(strings.bot.common.options.region.$)
.setName(strings.bot.common.options.region.name)
.setNameLocalizations(
localizationObject(
(strings) => strings.bot.common.options.region.$,
(strings) => strings.bot.common.options.region.name,
undefined,
true,
),
@@ -6,10 +6,10 @@ export function addTankChoices(option: SlashCommandStringOption) {
const { strings } = translator(Locale.EnglishUS);
return option
.setName(strings.bot.common.options.tank.$)
.setName(strings.bot.common.options.tank.name)
.setNameLocalizations(
localizationObject(
(strings) => strings.bot.common.options.tank.$,
(strings) => strings.bot.common.options.tank.name,
undefined,
true,
),
@@ -13,10 +13,10 @@ export function addTierChoices(option: SlashCommandStringOption) {
const { strings } = translator(Locale.EnglishUS);
return option
.setName(strings.bot.common.options.tier.$)
.setName(strings.bot.common.options.tier.name)
.setNameLocalizations(
localizationObject(
(strings) => strings.bot.common.options.tier.$,
(strings) => strings.bot.common.options.tier.name,
undefined,
true,
),
@@ -6,10 +6,10 @@ export function addUsernameChoices(option: SlashCommandStringOption) {
const { strings } = translator(Locale.EnglishUS);
return option
.setName(strings.bot.common.options.username.$)
.setName(strings.bot.common.options.username.name)
.setNameLocalizations(
localizationObject(
(strings) => strings.bot.common.options.username.$,
(strings) => strings.bot.common.options.username.name,
undefined,
true,
),
@@ -35,8 +35,8 @@ export async function autocompleteTanks(
{
keys: [
...SUPPORTED_LOCALES.map((locale) => [
`searchableName.${locale}`,
`searchableNameDeburr.${locale}`,
`searchableName.{locale}`,
`searchableNameDeburr.{locale}`,
]).flat(),
'camouflages',
],
@@ -33,7 +33,7 @@ export function createLocalizedCommand(
.setName(command)
.setNameLocalizations(
localizationObject(
(strings) => strings.bot.commands[commandPathItem].$,
(strings) => strings.bot.commands[commandPathItem].name,
undefined,
true,
),
@@ -52,9 +52,9 @@ export function createLocalizedCommand(
(strings) =>
(
strings.bot.commands[commandPathItem] as unknown as {
subcommands: Record<string, { $: string }>;
subcommands: Record<string, { name: string }>;
}
).subcommands[subItem.subcommand].$,
).subcommands[subItem.subcommand].name,
undefined,
true,
);
@@ -87,9 +87,9 @@ export function createLocalizedCommand(
(strings) =>
(
strings.bot.commands[commandPathItem] as unknown as {
groups: Record<string, { $: string }>;
groups: Record<string, { name: string }>;
}
).groups[subItem.group].$,
).groups[subItem.group].name,
undefined,
true,
);
+119 -116
View File
@@ -1,6 +1,6 @@
{
"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.",
"fox": "The quick brown fox jumps over the lazy dog."
},
@@ -202,11 +202,11 @@
"bot": {
"common": {
"errors": {
"clan_not_found": "# Could not find clan\nCouldn't find \"%s\". 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.",
"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 \"%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!",
"tank_name_not_found": "# Tank not found\nCould not find tank by the name \"%s\".",
"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_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 \"%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.",
"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.",
@@ -216,51 +216,54 @@
},
"wn8": {
"$": "WN8",
"very_bad": "Very bad",
"bad": "Bad",
"below_average": "Below average",
"average": "Average",
"above_average": "Above average",
"good": "Good",
"very_good": "Very good",
"great": "Great",
"unicum": "Unicum",
"super_unicum": "Super unicum"
"name": "WN8",
"types": {
"very_bad": "Very bad",
"bad": "Bad",
"below_average": "Below average",
"average": "Average",
"above_average": "Above average",
"good": "Good",
"very_good": "Very good",
"great": "Great",
"unicum": "Unicum",
"super_unicum": "Super unicum"
}
},
"subcommands": {
"today": {
"$": "today",
"name": "today",
"description": "Today"
},
"30": {
"$": "30",
"name": "30",
"description": "30 days"
},
"60": {
"$": "60",
"name": "60",
"description": "60 days"
},
"90": {
"$": "90",
"name": "90",
"description": "90 days"
},
"career": {
"$": "career",
"name": "career",
"description": "Career"
},
"custom": {
"$": "custom",
"name": "custom",
"description": "Custom range",
"options": {
"start": {
"$": "start",
"name": "start",
"description": "Start in number of days ago from today"
},
"end": {
"$": "end",
"name": "end",
"description": "End in number of days ago from today"
}
}
@@ -269,46 +272,46 @@
"options": {
"clan": {
"$": "clan",
"name": "clan",
"description": "The clan name or tag"
},
"tank": {
"$": "tank",
"name": "tank",
"description": "The tank to get stats for"
},
"username": {
"$": "username",
"name": "username",
"description": "The Blitz username of the player"
},
"filters": {
"nation": {
"$": "nation",
"name": "nation",
"description": "Nation"
},
"class": {
"$": "class",
"name": "class",
"description": "Class"
},
"type": {
"$": "type",
"name": "type",
"description": "Type"
}
},
"region": {
"$": "region",
"name": "region",
"description": "Region"
},
"tier": {
"$": "tier",
"name": "tier",
"description": "Tier",
"choices": {
"tier": "Tier %s - %s"
"tier": "Tier %s1 - %s2"
}
}
},
@@ -316,13 +319,13 @@
"periods": {
"career": "Career",
"today": "Today",
"days": "%s days",
"custom": "%s - %s days"
"days": "%s1 days",
"custom": "%s1 - %s2 days"
},
"filters": {
"none": "No filters",
"tier": "Tier %s"
"tier": "Tier %s1"
},
"no_data": {
@@ -350,14 +353,14 @@
"commands": {
"auction": {
"$": "auction",
"name": "auction",
"description": "Tanks available right now in the auction",
"body": {
"title": "Blitz Auction",
"subtitle": "%s available • next prices %s\nBid now: %s",
"next": "Next price: %s",
"available": "Available: %s / %s"
"subtitle": "%s1 available • next prices %s2\nBid now: %s3",
"next": "Next price: %s1",
"available": "Available: %s1 / %s2"
},
"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)."
@@ -368,21 +371,21 @@
},
"replay": {
"$": "replay",
"name": "replay",
"description": "Display replay results"
},
"research": {
"$": "research",
"name": "research",
"description": "Lists the expenses in researching a line",
"options": {
"target_tank": {
"$": "target-tank",
"name": "target-tank",
"description": "The final tank to research in the line"
},
"starting_tank": {
"$": "starting-tank",
"name": "starting-tank",
"description": "The starting tank in the line (inferred automatically if not provided)"
}
},
@@ -390,57 +393,57 @@
"body": {
"subtitle": "Research",
"total": "Total",
"research": "Research: %s",
"upgrades": "Upgrades: %s",
"purchase": "Purchase: %s",
"equipment": "Equipment: %s",
"research": "Research: %s1",
"upgrades": "Upgrades: %s1",
"purchase": "Purchase: %s1",
"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."
},
"errors": {
"non_tech_tree": "# %s 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.",
"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.",
"start_end_equal": "# %s 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.",
"unordered": "# %s higher tiered to %s\n\nMake sure to provide %s as the `starting-tank` instead as it is the lower tiered tank."
"non_tech_tree": "# %s1 is not on the tech tree\n\nYou cannot research a premium/collector tank.",
"tier_1": "# %s1 is a tier I\n\nTier I tanks are always unlocked for free for all players.",
"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": "# %s1 was provided twice\n\nMake sure `starting-tank` and `target-tank` are different.",
"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": "# %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",
"name": "about",
"description": "All the info you need about the bot",
"subcommands": {
"commands": {
"$": "commands",
"name": "commands",
"description": "List of all commands and their descriptions",
"body": "# Commands\n\nBlitzKit offers the following commands:\n\n"
},
"embeds": {
"$": "embeds",
"name": "embeds",
"description": "How embeds work"
},
"introduction": {
"$": "introduction",
"name": "introduction",
"description": "About the bot"
},
"invite": {
"$": "invite",
"name": "invite",
"description": "How to invite the bot"
},
"timezones": {
"$": "timezones",
"name": "timezones",
"description": "How BlitzKit infers and uses your timezone"
},
"credits": {
"$": "credits",
"name": "credits",
"description": "People who have helped BlitzKit"
}
}
},
"breakdown": {
"$": "breakdown",
"name": "breakdown",
"description": "A period's breakdown by tanks played",
"body": {
@@ -449,19 +452,19 @@
"wn8": "WN8",
"winrate": "Winrate",
"damage": "Damage",
"unknown_tank": "Unknown tank %s"
"unknown_tank": "Unknown tank %s1"
}
},
"debug": {
"$": "debug",
"name": "debug",
"description": "Debug information about the bot",
"body": {
"title": "# Debug\n\n",
"version": "Version",
"shard": {
"$": "Shard",
"label": "Shard",
"default": "default"
},
"uptime": "Uptime"
@@ -469,66 +472,66 @@
},
"evolution": {
"$": "evolution",
"name": "evolution",
"description": "Evolution of statistics",
"groups": {
"player": {
"$": "player",
"name": "player",
"description": "Player statistics"
},
"tank": {
"$": "tank",
"name": "tank",
"description": "Tank statistics"
}
}
},
"inactive": {
"$": "inactive",
"name": "inactive",
"description": "Lists all inactive players in a clan above a threshold",
"options": {
"threshold": {
"$": "threshold",
"description": "The number of days inactive (default: %s days)"
"name": "threshold",
"description": "The number of days inactive (default: %s1 days)"
}
},
"body": {
"subtitle": "Inactive for %s+ days",
"listing": "%s days"
"subtitle": "Inactive for %s1+ days",
"listing": "%s1 days"
}
},
"full_stats": {
"$": "full-stats",
"name": "full-stats",
"description": "Full in-game statistics",
"body": {
"cards": {
"games": {
"$": "Games",
"title": "Games",
"winrate": "Winrate",
"battles": "Battles",
"wins_losses": "Wins / losses"
},
"efficiency": {
"$": "Efficiency",
"title": "Efficiency",
"wn8": "WN8",
"survival": "Survival",
"accuracy": "Accuracy"
},
"lethality": {
"$": "Lethality",
"title": "Lethality",
"average_damage": "Average damage",
"damage_per_tier": "Damage per tier",
"damage_ratio": "Damage ratio",
"average_kills": "Average kills"
},
"miscellaneous": {
"$": "Miscellaneous",
"title": "Miscellaneous",
"average_tier": "Average tier",
"average_spots": "Average spots",
"average_xp": "Average XP",
@@ -539,13 +542,13 @@
},
"link": {
"$": "link",
"name": "link",
"description": "Links your Blitz and Discord account",
"body": {
"accounts_linked": "Accounts linked",
"no_role_permissions": {
"$": "%s failed to verify",
"title": "%s1 failed to verify",
"description": "I don't have the permission to manage roles."
}
},
@@ -557,111 +560,111 @@
},
"search_clans": {
"$": "search-clans",
"name": "search-clans",
"description": "Search clans",
"options": {
"limit": {
"$": "limit",
"description": "The max number of clan results (default: %s)"
"name": "limit",
"description": "The max number of clan results (default: %s1)"
}
},
"body": {
"title": "Clan search for %s in region %s",
"title": "Clan search for %s1 in region %s2",
"no_results": "No clans found"
}
},
"search_players": {
"$": "search-players",
"name": "search-players",
"description": "Search players",
"options": {
"limit": {
"$": "limit",
"description": "The max number of player results (default: %s)"
"name": "limit",
"description": "The max number of player results (default: %s1)"
}
},
"body": {
"title": "Player search for %s in region %s",
"title": "Player search for %s1 in region %s2",
"no_results": "No players found"
}
},
"rating_leaderboard": {
"$": "rating-leaderboard",
"name": "rating-leaderboard",
"description": "Rating battles statistics",
"subcommands": {
"neighbors": {
"$": "neighbors",
"name": "neighbors",
"description": "Neighboring players on the leaderboard"
},
"league": {
"$": "league",
"name": "league",
"description": "Top players of a league"
}
},
"options": {
"limit": {
"$": "limit",
"description": "How many neighbors to display (default: %s)"
"name": "limit",
"description": "How many neighbors to display (default: %s1)"
},
"season": {
"$": "season",
"name": "season",
"description": "Season number (default: current)",
"choices": {
"current": "%s (current)"
"current": "%s1 (current)"
}
},
"league": {
"$": "league",
"name": "league",
"description": "The league to display"
}
},
"body": {
"top_players": "Top %s 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.",
"top_players": "Top %s1 players",
"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.",
"deleted_player": "Deleted %s",
"deleted_player": "Deleted %s1",
"neighbors": "Rating neighbors",
"more": "+ %s more"
"more": "+ %s1 more"
}
},
"today": {
"$": "today",
"name": "today",
"description": "Today's played tanks and statistics"
},
"stats": {
"$": "stats",
"name": "stats",
"description": "Quick statistics for a period"
},
"owned_tanks": {
"$": "owned-tanks",
"name": "owned-tanks",
"description": "Shows all own tanks in a tier",
"body": {
"title": "# %s's owned tier %s tanks\n\n"
"title": "# %s1's owned tier %s2 tanks\n\n"
}
},
"permissions": {
"$": "permissions",
"name": "permissions",
"description": "Checks wether the bot has the required permissions to function",
"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",
"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",
@@ -670,32 +673,32 @@
},
"ping": {
"$": "ping",
"name": "ping",
"description": "Check wether the bot is alive.",
"body": {
"pong": "Pong 🏓",
"pong_with_time": "Pong 🏓 - %sms"
"pong_with_time": "Pong 🏓 - %s1ms"
},
"subcommands": {
"blitzkit": {
"$": "blitzkit",
"name": "blitzkit",
"description": "Ping BlitzKit"
},
"wotb": {
"$": "wotb",
"name": "wotb",
"description": "Ping World of Tanks Blitz"
}
}
},
"player_info": {
"$": "player-info",
"name": "player-info",
"description": "Basic information about a player",
"body": {
"title": "%s's information",
"title": "%s1's information",
"nickname": "Nickname",
"battles": "Battles",
"winrate": "Winrate",
@@ -706,16 +709,16 @@
},
"rating": {
"$": "rating",
"name": "rating",
"description": "Rating player's statistics",
"subcommands": {
"today": {
"$": "today",
"name": "today",
"description": "Today's rating statistics"
},
"season": {
"$": "season",
"name": "season",
"description": "This season's rating statistics"
}
},
@@ -728,7 +731,7 @@
},
"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."
}
}