add SREBOT, SHARED, TSSBOT contents (fixup for #1223)

PR #1223 only staged the deletions of the old paths because the new
top-level directories were still untracked when the commit was authored.
This commit adds the actual restructured tree: SREBOT/ (existing bot),
SHARED/ (vromfs, data_parser, ICONS/MAPS/FONTS, DAGOR_FILES,
update_game_files), and TSSBOT/ (skeleton).

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
FURRO404
2026-05-13 23:17:02 -07:00
commit 2b399fdb81
186 changed files with 96596 additions and 0 deletions
+857
View File
@@ -0,0 +1,857 @@
{
"common": {
"error_title": "Error",
"no_data_title": "No Data",
"access_denied_title": "Access Denied",
"access_denied_desc": "This server has been blacklisted.",
"no_players_selected": "No players selected. Please select at least one player.",
"must_use_in_server": "This command must be used in a server.",
"could_not_resolve_channel": "Could not resolve the selected channel.",
"failed_update_setting": "❌ Failed to update setting.",
"configuration_not_found": "Configuration not found.",
"no_channel_selected": "No channel selected.",
"no_selection_received": "No selection received.",
"database_error": "❌ Database error: {error}",
"enabled": "Enabled",
"disabled": "Disabled",
"not_configured": "Not configured",
"unknown": "Unknown",
"rating_field": "Rating",
"battles_field": "Battles",
"wins_field": "Wins",
"losses_field": "Losses",
"win_rate_field": "Win Rate",
"kills_field": "Kills",
"deaths_field": "Deaths",
"kd_field": "K/D",
"members_field": "Members",
"placement_field": "Placement",
"points_field": "Points",
"ground_kills_field": "Ground Kills",
"air_kills_field": "Air Kills",
"total_kills_field": "Total Kills",
"assists_field": "Assists",
"captures_field": "Captures",
"none_option": "None"
},
"buttons": {
"skip": "Skip",
"previous": "Previous",
"next": "Next",
"prev": "Prev",
"prev_arrow": "◀ Previous",
"next_arrow": "Next ▶",
"prev_arrow_only": "◀",
"next_arrow_only": "▶",
"generate_chart": "📊 Generate Chart",
"show_graph": "Show Graph",
"view_player_stats": "📊 View Player Stats",
"compare_nearby": "📈 Compare Nearby Squadrons",
"confirm_swap": "Yes, swap it",
"cancel_swap": "No, keep the old one",
"set_squadron": "Set Squadron",
"same_as_logs": "Same as Logs",
"require_password": "🔒 Require Password",
"password_required": "🔒 Password Required",
"lock_data": "🔐 Bind Squadron Data",
"data_locked": "🔐 Data Bound to Server",
"allow_public": "👥 Allow Public Meta",
"public_enabled": "👥 Public Meta Enabled",
"update_accounts": "📋 Update Meta Accounts",
"change_password": "🔑 Change Password",
"help": "❓ Help",
"add_player": " Add Player",
"update_all": "🔄 Update All Members",
"back_to_settings": "⬅ Back to Settings",
"manage_notifications": "Manage Notifications",
"diagnose_permissions": "Diagnose Permissions",
"enable": "Enable",
"disable": "Disable",
"change_channel": "Change Channel",
"view_replay": "View Replay",
"view_website": "View on Website",
"view_video": "View Video",
"view_log": "View Log",
"view_chat": "View Chat",
"subscribe_website": "Subscribe via Website",
"yes_disband": "Yes, Disband",
"cancel": "Cancel",
"transfer_leave": "Transfer & Leave",
"accept_selected": "Accept Selected",
"accept_all": "Accept All",
"decline_selected": "Decline Selected",
"back": "Back",
"remove_all": "Remove All",
"remove_active": "Remove Active",
"remove_queued": "Remove Queued",
"remove_selected": "Remove Selected",
"ping_all": "Ping All",
"ping_active": "Ping Active",
"ping_queued": "Ping Queued",
"ping_selected": "Ping Selected",
"accept_members": "Accept Members",
"remove_members": "Remove Members",
"ping_members": "Ping Members",
"rename_stack": "Rename Stack",
"request_to_join": "Request to Join",
"leave_withdraw": "Leave / Withdraw",
"manage_stack": "Manage Stack ⚙️",
"disband_stack": "Disband Stack",
"force_disband_create": "Force Disband & Create New"
},
"events": {
"guild_join_title": "Thanks for adding me!",
"guild_join_desc": "Run `/setup` to configure the bot for this server."
},
"comp": {
"not_found_title": "Comps Not Found",
"not_found_desc": "No data for **{squadron}**, try again later.",
"error_loading_title": "Error Loading Comps",
"error_loading_desc": "Failed to load comp data: {error}",
"title": "Comps for {squadron}",
"desc": "Comps seen in the last {minutes} minutes",
"no_recent_title": "No Recent Comps",
"no_recent_desc": "No comps in the last {minutes} minutes.",
"comp_title": "COMP {index}",
"last_seen_label": "**Last seen** : {timestamp}{warning}",
"comp_label": "**Comp**: {notation}",
"no_players_recorded": "No players recorded.",
"limit_reached_title": "Comp Limit Reached",
"limit_reached_desc": "This server has used all {limit} comp lookups for this timeslot. Subscribe (with /unlock) for unlimited access or wait for the next timeslot.",
"remaining_footer": "{remaining}/{limit} comp lookups remaining this timeslot"
},
"quick_log": {
"invalid_type": "Type can only be set to Logs, Points, Leaderboard, Weekly BR, or Both.",
"squadron_required": "You must provide a squadron name for Logs, Points, or Both alarms.",
"wildcard_logs_only": "Only Logs can be set to wildcard squadron.",
"squadron_not_resolved": "Squadron `{squadron}` could not be resolved.",
"save_failed": "Failed to save preferences. Please try again later.",
"premium_warning": "\n\n> ⚠️ **Game logs require Premium.** Run `/unlock` to subscribe ($2.99/mo) — logs won't post until then.",
"leaderboard_set": "Global Leaderboard alarm set to this channel.",
"both_set": "Logs and Points alarms for {squadron} set to this channel.{premium_note}",
"alarm_set": "{alarm_type} alarm for {squadron} set to this channel.{premium_note}",
"weekly_br_wildcard_set": "Weekly BR Report (top-20 squadrons) set to this channel. Fires at the end of every BR rotation.",
"weekly_br_squadron_set": "Weekly BR Report for {squadron} (top-15 players) set to this channel. Fires at the end of every BR rotation."
},
"diagnostics": {
"title": "Autolog Diagnostics",
"channel_permissions_header": "**Channel Permissions** (<#{channel_id}>)",
"perms_needed": " ^ Autologging needs all of the above to send scoreboards.",
"server_squadron_header": "**Server Squadron** (`/set-squadron`)",
"server_squadron_short": " Short: `{short}`",
"server_squadron_long": " Long: `{long}`",
"server_squadron_not_set": " Not set (scoreboard bar color will show as 'not_set')",
"autolog_prefs_header": "**Autolog Preferences** (`/quick-log`)",
"autolog_none_configured": " ❌ NONE configured - autologging will NOT send anything to this server.",
"autolog_setup_hint": " Use `/quick-log <squadron_short> Logs` in the target channel to set up.",
"autolog_no_logs_channels": " ❌ No Logs channels configured. Only Points/Leaderboard found.",
"autolog_enable_hint": " Use `/quick-log <squadron_short> Logs` to enable autologging.",
"selected_channel_tag": " **(selected channel)**",
"missing_send_attach": " (missing send/attach)",
"channel_not_found": " (channel not found)",
"invalid_channel_id": " (invalid channel ID)",
"premium_status_header": "**Premium Status** (`/unlock`)",
"premium_active": " ✅ This server has an active Premium subscription.",
"premium_not_subscribed": " ❌ This server does **not** have a Premium subscription.",
"premium_autolog_required": " Autologging requires Premium. Use `/unlock` to subscribe.",
"premium_not_subscribed_free": " ⚪ Not subscribed — use `/unlock` to subscribe ($2.99/mo).",
"premium_free_note": " *(Autologs are free for all servers right now.)*"
},
"sq_info": {
"title": "Squadron Info: {squadron}",
"placement_field": "Placement",
"total_points_field": "Total Points",
"total_members_field": "Total Members",
"members_field": "Members",
"fetch_failed": "Failed to fetch squadron info."
},
"sq_info_graph": {
"title": "{squadron} — SQ-INFO (Season {season})",
"embed_title": "{squadron} — Roster Composition",
"embed_desc": "Season **{season}** · Median games: **{median}** · Core: **{core}** · Active: **{active}** · Weak: **{weak}**\nBars sorted by games desc; height = WR%. Core = top 30% WR rank & games ≥ median. Active = top 3045% WR rank & games ≈ median. Weak = everyone else.",
"core_threshold_line": "CORE ≥ {wr}%",
"weak_threshold_line": "WEAK < {wr}%",
"y_label": "Win Rate",
"core_header": "CORE — {count} · WR {avg}%",
"active_header": "ACTIVE — {count} · WR {avg}%",
"weak_header": "WEAK — {count} · WR {avg}%",
"no_active_season": "No active season was found. Try again once the next season starts.",
"no_members": "No current members were found for {squadron}."
},
"recap_card": {
"unknown_season": "Unknown season: `{season}`.",
"no_clan_id": "Could not resolve a squadron ID for `{squadron}`.",
"render_failed": "Failed to generate the season recap card. Please try again later."
},
"sq_stats": {
"no_data_title": "No Data",
"no_data_desc": "No historical data found for squadron: {squadron}",
"title": "{squadron} // SQUADRON",
"desc": "Total Score Trend (Last {count} data points)",
"previous_score_field": "Previous Score",
"current_score_field": "Current Score",
"change_field": "Change",
"player_title": "{squadron} // PLAYERS",
"player_desc": "Individual player point trends",
"comparison_title": "{squadron} // LEADERBOARD COMPARISON",
"comparison_desc": "Comparing with squadrons ranked {range}",
"current_position_field": "Current Position",
"squadrons_shown_field": "Squadrons Shown",
"squadron_not_found_error": "Squadron not found in leaderboard",
"no_nearby_error": "No nearby squadrons found",
"no_historical_error": "No historical data found for nearby squadrons",
"comparison_chart_failed": "Failed to generate comparison chart",
"select_players_placeholder": "Select players (Page {page})"
},
"loss_calc": {
"title": "Point Loss — {squadron}",
"players_leaving_field": "Players Leaving",
"share_of_total_field": "% Share of Total",
"points_lost_real_field": "Points Lost (Real)",
"points_lost_raw_field": "Points Lost (Raw)",
"squadron_rating_field": "Squadron Rating",
"squadron_position_field": "Squadron Position",
"positions_lost_field": "Positions Lost",
"not_found_footer": "Not found in squadron: {players}",
"fetch_failed": "Failed to fetch squadron data: {error}",
"no_point_data": "No point data available for this squadron.",
"no_matching_players": "No matching players found in **{squadron}**."
},
"player": {
"select_player_placeholder": "Select a player",
"no_stats_found": "❌ No stats found for UID: {uid}",
"no_vehicle_stats": "❌ No vehicle stats found for this player.",
"vehicles_found": "Found **{count}** vehicles for **{nick}**\nSelect a vehicle to view detailed stats:",
"vehicle_select_placeholder": "Select a vehicle (Page {page}/{total})",
"combat_stats_header": "**__COMBAT STATS__**",
"ground_kills_label": "**Ground Kills:** {value}",
"air_kills_label": "**Air Kills:** {value}",
"total_kills_label": "**Total Kills:** {value}",
"assists_label": "**Assists:** {value}",
"deaths_label": "**Deaths:** {value}",
"kd_label": "**K/D:** {value}",
"captures_label": "**Captures:** {value}",
"battle_record_header": "**__BATTLE RECORD__**",
"total_battles_label": "**Total Battles:** {value}",
"wins_label": "**Wins:** {value}",
"losses_label": "**Losses:** {value}",
"win_rate_label": "**Win Rate:** {value}%",
"stats_desc": "Stats for **{nick}** (**{squadron}**)\nUID: `{uid}`",
"not_found_title": "Player Not Found",
"not_found_desc": "No game history found for `{player}`.",
"no_players_found": "No players found matching **{username}**\nTry using `/website` to search on the website.",
"multiple_matches": "Multiple matches found, choose the correct one below:",
"must_provide_input": "You must provide at least a UID or username."
},
"player_games": {
"no_recent_title": "No Recent Games",
"no_recent_desc": "No games found for **{player}** in the last 8 hours.",
"squadron_label": "**Squadron:** {squadron}",
"record_label": "**W:** {wins} **L:** {losses} **WR:** {wr}%",
"comps_played_header": "\n\n**Comps Played**"
},
"match": {
"missing_input_title": "Missing Input",
"missing_input_desc": "Provide either a `match_id` or a `player_name`.",
"not_found_title": "Match Not Found",
"not_found_desc": "Could not find a match with ID `{match_id}`.",
"invalid_data_title": "Invalid Match Data",
"invalid_data_desc": "The replay data could not be parsed.",
"scoreboard_error_title": "Scoreboard Error",
"scoreboard_error_desc": "Failed to generate the scoreboard image.",
"no_games_title": "No Games Found",
"no_games_desc": "No game history found for **{player}**.",
"recent_matches_title": "Recent matches for {player}",
"recent_matches_desc": "Showing up to {count} recent games. Select one to view the full scoreboard.",
"select_match_placeholder": "Select a match to view..."
},
"compare": {
"no_players_found": "No players found matching **{name}**.",
"multiple_matches": "Multiple matches for **{name}**: {matches}\nPlease use a more specific name (the autocomplete suggestions are exact).",
"could_not_resolve": "Could not resolve players.",
"could_not_fetch": "❌ Could not fetch stats for **{name}**.",
"no_graph_data": "No data available for the last 90 days.",
"no_squadron_points_data": "No squadron points data for {names} (player not found in tracked squadron history).",
"graph_title": "Player Points — Last 90 Days",
"battles_label": "Battles",
"wins_label": "Wins",
"losses_label": "Losses",
"win_rate_label": "Win Rate",
"ground_kills_label": "Ground Kills",
"air_kills_label": "Air Kills",
"total_kills_label": "Total Kills",
"assists_label": "Assists",
"deaths_label": "Deaths",
"kd_label": "K/D",
"captures_label": "Captures"
},
"squadron": {
"not_found_desc": "Squadron `{squadron}` not found.",
"set_title": "✅ Squadron Set",
"set_desc": "Squadron **{squadron}** has been set for this server.",
"short_name_field": "Short Name",
"long_name_field": "Long Name",
"swap_title": "✅ Squadron Swapped",
"swap_desc": "Replaced **{old}** with **{new}** for this server.",
"already_set_title": "⚠️ Squadron Already Set",
"already_set_desc": "This server is currently set to **{old}**.\nSwap it to **{new}**?",
"swap_cancelled": "❌ Squadron change cancelled."
},
"setup": {
"step1_title": "Server Setup — Step 1 of 3",
"step1_desc": "This wizard will walk you through configuring the bot for your server.\n\n**Step 1** — Set your squadron\n**Step 2** — Choose a logs channel\n**Step 3** — Choose a points channel\n",
"step1_current_sq": "\nCurrently configured squadron: **[{short}] {long}**",
"step2_title": "Server Setup — Step 2 of 3",
"step2_desc": "Squadron set to **[{short}] {long}**.\n\nWhere should **battle logs** be posted?\nSelect a text channel below, or skip this step.",
"step3_title": "Server Setup — Step 3 of 3",
"step3_desc": "Where should **points notifications** be posted?\nSelect a text channel below, or skip this step.",
"step3_same_as_logs": "\n\nYou can also click \"Same as Logs\" to reuse the logs channel.",
"summary_title": "Setup Complete",
"summary_desc": "You can use `/autolog-management` to change these settings later.",
"squadron_field": "Squadron",
"logs_channel_field": "Logs Channel",
"points_channel_field": "Points Channel",
"premium_required_field": "⚠️ Game Logs Require Premium",
"premium_required_value": "Automatic game scoreboards won't post until this server has an active subscription. Run `/unlock` to subscribe ($2.99/mo).",
"modal_title": "Set Squadron",
"modal_label": "Squadron Short Name",
"modal_placeholder": "e.g. AXYS",
"squadron_not_found": "Squadron `{squadron}` not found. Please try again.",
"logs_channel_placeholder": "Select a logs channel...",
"points_channel_placeholder": "Select a points channel..."
},
"meta_management": {
"squadron_not_found_title": "❌ Squadron Not Found",
"squadron_not_found_desc": "Could not find clan ID for squadron: **{squadron}**",
"access_denied_title": "❌ Access Denied",
"access_denied_desc": "Incorrect password. This squadron's meta data is protected.",
"data_locked_title": "🔐 Squadron Data Bound",
"data_locked_desc": "**{squadron}** has data binding enabled and cannot be transferred to another server.\n\nThe squadron owner must disable **Bind Squadron Data** before it can be moved.",
"error_retrieving_settings": "❌ Error retrieving guild settings after transfer. Please try again.",
"error_retrieving_settings_retry": "❌ Error retrieving guild settings. Please try running the command again.",
"authenticated_title": "✅ Authenticated",
"authenticated_desc": "Password verified. Managing settings for **{squadron}**.",
"claimed_title": "✅ Squadron Claimed",
"claimed_desc": "**{squadron}** has been successfully claimed for this server!",
"password_requirement_field": "🔒 Password Requirement",
"data_lock_field": "🔐 Squadron Data Binding",
"public_meta_field": "👥 Public Meta Access",
"access_password_field": "🔑 Access Password",
"enabled_value": "✅ Enabled",
"disabled_value": "❌ Disabled",
"settings_title": "🔐 Meta Management Settings",
"settings_desc": "**Squadron:** {squadron}\n**Clan ID:** {clan_id}",
"first_time_title": "🔐 Meta Management - First Time Setup",
"first_time_owner_desc": "**Squadron:** {squadron}\n**Clan ID:** {clan_id}\n\n🔑 Your access password has been generated. **Save this password** — you'll need it to authenticate meta data access in the future.\n\n**Password:** `{password}`",
"first_time_non_owner_desc": "**Squadron:** {squadron}\n**Clan ID:** {clan_id}\n\nSquadron has been set up. Ask the server owner for the access password.",
"settings_field": "Settings",
"settings_hint": "Use the buttons below to configure access settings.",
"password_toggled": "✅ Password requirement: **{state}**",
"lock_toggled": "✅ Squadron data binding: **{state}**",
"public_meta_toggled": "✅ Public meta access: **{state}**\n{detail}",
"public_meta_enabled_detail": "Non-admins can now use `/meta` command.",
"public_meta_disabled_detail": "Only admins can use `/meta` command.",
"owner_only_password": "❌ Only the server owner can change the squadron password.",
"help_title": "📖 Meta Management Help",
"help_desc": "Explanation of each setting and feature:",
"help_password_field": "🔑 Access Password",
"help_password_value": "Your squadron's access password. Only the **server owner** can see the password in the settings panel. Anyone with the password can claim your squadron's meta data on their server, so keep it secure.",
"help_require_field": "🔒 Require Password",
"help_require_value": "When enabled, even admins on this server must enter the squadron password to access `/meta-management`. Adds an extra layer of security to prevent accidental changes.",
"help_lock_field": "🔐 Bind Squadron Data",
"help_lock_value": "When enabled, prevents the squadron from being transferred to other servers, even with the correct password. Must be disabled before the squadron can be transferred.",
"help_public_field": "👥 Allow Public Meta",
"help_public_value": "When enabled, allows non-admin members to use the `/meta` command to search squadron vehicles. When disabled, only server administrators can use `/meta`.",
"help_accounts_field": "📋 Update Meta Accounts",
"help_accounts_value": "Opens the player roster manager where you can add or remove players from your squadron's meta roster. Use **Update All Members** to sync your entire squadron at once.",
"help_change_pw_field": "🔑 Change Password",
"help_change_pw_value": "**Server owner only.** Change the squadron's access password and set an optional hint. The hint is shown in the password prompt to help remember it.",
"password_modal_title": "Squadron Access Password",
"password_modal_label": "Enter Squadron Password",
"password_modal_placeholder": "XXXX-XXXX-XXXX",
"change_pw_modal_title": "Change Squadron Password",
"current_password_label": "Current Password",
"current_password_placeholder": "Enter your current password",
"new_password_label": "New Password",
"new_password_placeholder": "Enter your new password",
"confirm_password_label": "Confirm New Password",
"confirm_password_placeholder": "Re-enter your new password",
"hint_label": "Password Hint (Optional)",
"hint_placeholder": "A hint to help remember the password",
"pw_incorrect": "❌ Current password is incorrect.",
"pw_mismatch": "❌ New passwords do not match. Please try again.",
"pw_empty": "❌ New password cannot be empty.",
"pw_changed": "✅ Password updated successfully for **{squadron}**.\n**New Password:** `{password}`",
"pw_changed_hint": "\n**Hint:** {hint}",
"player_add_modal_title": "Add Player to Meta Roster",
"player_add_label": "Player UID or Nickname",
"player_add_placeholder": "Enter player's UID (e.g., 12345678) or nickname",
"player_not_found": "❌ Player `{player}` not found in Players_Global database.\n",
"roster_title": "📋 Meta Roster Management - {squadron}",
"roster_desc": "**Squadron Clan ID:** {clan_id}\n**Total Players:** {count}",
"roster_page_field": "Players (Page {page}/{total})",
"no_players_field": "No Players",
"no_players_hint": "No players added to meta roster yet. Click **Add Player** to get started.",
"remove_player_placeholder": "Select player to remove...",
"fetch_members_failed": "❌ Failed to fetch squadron members: {error}",
"no_members_found": "❌ No members found in squadron or API call failed.",
"roster_synced": "✅ Synced roster with squadron.",
"roster_added": "**+{count}** added",
"roster_removed": "**-{count}** removed (left squadron)",
"roster_up_to_date": "**{count}** already up to date",
"refreshing_vehicles": "Refreshing vehicle data in background..."
},
"meta": {
"not_configured": "❌ Meta data not configured for this server. Run `/meta-management` first.",
"no_permission": "❌ You need administrator permissions to use this command.\nAdmins can enable public access via `/meta-management`.",
"no_results": "❌ No players in your squadron roster have **{vehicle}**.",
"no_results_admin_hint": "\n*Expecting someone to have this? Click the update members button in `/meta-management` and double check.*",
"search_title": "🔍 Search Results - {vehicle}",
"matches_found": "**Matches Found:** {count} player(s)",
"spawns_label": "Spawns",
"deaths_label": "Deaths",
"gk_label": "GK",
"ak_label": "AK",
"points_label": "Points",
"kdr_label": "KDR",
"games_label": "Games",
"no_points": "—"
},
"top": {
"title": "**Top 20 Squadrons**",
"rating_label": "**Rating:** {value}",
"air_kills_label": "**Air Kills:** {value}",
"ground_kills_label": "**Ground Kills:** {value}",
"deaths_label": "**Deaths:** {value}",
"kd_label": "**K/D:** {value}",
"win_rate_label": "**Win Rate:** {value}",
"playtime_label": "**Playtime:** {value}",
"fetch_failed": "Failed to retrieve squadron data."
},
"analytics": {
"no_data_title": "No Data",
"no_matches_desc": "No matches found.",
"no_comp_desc": "No composition data found.",
"no_consistency_desc": "Not enough player data (minimum 50 matches).",
"no_time_desc": "No time data found.",
"unknown_view": "Unknown view.",
"map_title": "Map Win Rates: {squadron}",
"comp_title": "Team Compositions: {squadron}",
"consistency_title": "Player Consistency: {squadron}",
"consistency_desc": "Sorted by K/D ratio",
"time_title": "Time of Day Performance: {squadron}",
"eu_timeslot": "\n**EU Timeslot**",
"na_timeslot": "\n**NA Timeslot**",
"off_peak": "\n**Off-Peak**",
"matchups_title": "📜 {squadron} — Matchup History",
"matchups_won_field": "🏆 Most Won Against",
"matchups_lost_field": "💀 Most Lost To",
"no_matchups_desc": "No recorded matches against other squadrons yet."
},
"recent": {
"title": "Recent Matches: {squadron}",
"no_matches_desc": "No matches found for this squadron."
},
"h2h": {
"two_required_title": "Two Squadrons Required",
"two_required_desc": "Provide at least one squadron, or use `/set-squadron` and provide the opponent.",
"provide_a_desc": "Provide `squadron_a` or use `/set-squadron` first.",
"provide_b_desc": "Provide `squadron_b` or use `/set-squadron` first.",
"squadron_not_found_title": "Squadron Not Found",
"same_squadron_title": "Same Squadron",
"same_squadron_desc": "You can't check head-to-head against yourself.",
"record_desc": "**Record:** {a_wins}W - {b_wins}L ({total} games)",
"no_matches_desc": "No recorded matches between **{a}** and **{b}**."
},
"autolog": {
"premium_active_line": "✅ **Premium:** Active — autologging is enabled for this server.",
"premium_not_subscribed_line": "❌ **Premium:** Not subscribed — use `/unlock` to enable autologging.",
"premium_free_line": "⚪ **Premium:** Not subscribed — use `/unlock` to subscribe ($2.99/mo). *(Autologs are free for all servers right now.)*",
"what_to_do": "\n\nWhat would you like to do?",
"select_notif_type": "Select the notification type to manage:",
"select_notif_placeholder": "Select notification type",
"logs_option": "Logs",
"logs_option_desc": "Manage Logs notifications",
"points_option": "Points",
"points_option_desc": "Manage Points notifications",
"leaderboard_option": "Leaderboard",
"leaderboard_option_desc": "Manage Leaderboard notifications",
"selected_type": "Selected **{type}**. Now choose the squadron to manage:",
"select_squadron_placeholder": "Select a squadron",
"select_squadron_page_placeholder": "Select a squadron (Page {page})",
"no_squadrons_available": "No squadron available for this notification type.",
"managing_global": "Managing **{type}** (global) in channel **{channel}**.",
"managing_squadron": "Managing **{type}** for squadron **{squadron}** in channel **{channel}**.",
"select_channel": "Select a new channel:",
"select_channel_placeholder": "Select a channel",
"select_channel_page_placeholder": "Select a channel (Page {page})",
"global_toggled": "{type} (global) is now {state}.",
"squadron_toggled": "{type} for **{squadron}** is now {state}.",
"channel_updated_global": "Updated {type} (global) to {channel}",
"channel_updated_squadron": "Updated {type} for **{squadron}** to {channel}",
"diagnose_channel_placeholder": "Select a channel to diagnose...",
"select_channel_diagnose": "Select the channel to diagnose:",
"game_not_logged_title": "Game Not Logged",
"game_not_logged_desc": "Use `/unlock` to subscribe to the **Standard** tier (or higher) to receive automatic game scoreboards.",
"server_not_upgraded_title": "⚠️ Server Not Upgraded",
"server_not_upgraded_autolog_desc": "This server does not have an active Premium subscription.\n\n**Automatic game scoreboards will stop being sent to non-upgraded servers after <t:{deadline}:D>.**\n\nUse `/unlock` to subscribe and keep receiving automatic game logs.",
"replay_not_available": "Replay data isn't available yet — wait a bit then try again!",
"too_many_videos": "Too many videos rendering right now — please try again in a moment.",
"video_gen_failed": "Error generating video: `{error}`",
"video_missing": "Failed to generate replay video - output file missing or empty.",
"video_too_large": "Replay video too large to upload ({file_mb:.1f} MB). Server limit is {limit_mb:.0f} MB.",
"video_web_fallback": "You can also view this match at {url}",
"video_upload_failed": "Video too large to upload — view it on the website:\n{url}",
"video_unexpected_error": "Unexpected error generating replay video: `{error}`",
"replay_not_found": "Replay data not found for session `{session_id}` on disk.",
"chat_log_title": "**Chat Log for Game [{session_id}]({url})**",
"chat_log_part_title": "**Chat Log for Game [{session_id}]({url}) (Part {part}/{total})**",
"chat_log_part_only": "**Chat Log (Part {part}/{total})**",
"no_chat_log": "No chat log found for session `{session_id}`.",
"chat_log_error": "Unexpected error loading chat log: `{error}`",
"battle_log_title": "**Battle Log for Game [{session_id}]({url})**",
"battle_log_part_title": "**Battle Log for Game [{session_id}]({url}) (Part {part}/{total})**",
"battle_log_part_only": "**Battle Log (Part {part}/{total})**",
"no_battle_log": "No combat events found for session `{session_id}`.",
"battle_log_error": "Unexpected error loading battle log: `{error}`",
"points_update_title": "**{squadron} {region} Points Update**",
"points_update_desc": "# {old_total} -> {new_total} {chart}{wl_line}{placement_line}\n\n**Player Changes:**",
"points_table_header": "Name Change Now\n",
"wl_line": "\n**{squadron}** went **{wins}W-{losses}L** this session",
"placement_rose": "\n**{squadron}** rose to **{new_place}** from **{old_place}**",
"placement_fell": "\n**{squadron}** fell to **{new_place}** from **{old_place}**",
"points_not_logged_title": "Points Not Logged",
"points_not_logged_desc": "Use `/unlock` to subscribe to the **Standard** tier (or higher) to receive automatic points updates.",
"server_not_upgraded_points_desc": "This server does not have an active Premium subscription.\n\n**Automatic updates will stop being sent to non-upgraded servers after <t:{deadline}:D>.**\n\nUse `/unlock` to subscribe and keep receiving automatic updates.",
"leave_title": "⚠️ Player Left {squadron}",
"leave_desc": "**{nick}** ({uid}) has left the squadron.\n\nLast recorded points: **{points}**",
"no_squadrons_desc": "No squadrons configured",
"no_channels_desc": "No channels available",
"over_cap_title": "Squadron over your tier cap",
"over_cap_desc": "Your server is on the **{tier}** tier, which allows **{cap} {notif}** squadrons. The squadron **{squadron}** is currently over that limit and not being logged. Upgrade to a higher tier to restore it.",
"over_cap_footer": "Upgrade at srebot-meow.ing/premium or via /unlock",
"wildcard_blocked_title": "Wildcard logging requires a higher tier",
"wildcard_blocked_desc": "Wildcard squadron entries (*, all, everything) are only available on Pro or Max tiers. Your server is on **{tier}** for {notif}. Upgrade to re-enable wildcard logging.",
"cap_header": "{used}/{cap} {notif} enabled — {tier} tier"
},
"track": {
"squadron_not_found": "Squadron not found.",
"fetch_failed": "Failed to fetch squadron info."
},
"unlock": {
"title": "SRE Bot Premium",
"desc": "**Unlock premium features for this server.**\n\nPremium includes:\n> • Auto scoreboard posts\n> • Chat & battle logs\n> • Replay lookups\n> • Unlimited /comp lookups\n> • Priority support\n\n**$2.99 / month · per server · cancel anytime**\n\n⚠️ Discord billing is only available in select countries. If the button below shows **\"Product Unavailable\"**, this may be due to an unsupported country or using a **mobile device**. Use the **Subscribe via Website** button instead.",
"already_subscribed_title": "SRE Bot Premium",
"already_subscribed_desc": "✅ **This server is already subscribed!**",
"manage_discord_field": "Manage Subscription",
"manage_discord_value": "Your subscription is through **Discord**.\nTo cancel, go to **User Settings → Subscriptions** in Discord.",
"manage_website_field": "Manage Subscription",
"manage_website_value": "Your subscription is through the **website**.\nManage it at [whop.com/billing](https://whop.com/billing).",
"coming_soon_field": "Coming Soon",
"coming_soon_value": "Premium subscriptions are not yet available. Check back soon!",
"current_tier": "You're on the **{tier}** plan.",
"upgrade_to": "Upgrade to {tier}",
"upgrade_to_value": "Get a higher squadron cap and more features by upgrading to **{tier}**."
},
"language": {
"prompt": "Please select your server language:",
"select_placeholder": "Choose your server language",
"language_set": "Language set to {language}.",
"translate_prompt": "Select a target language below 👇",
"translate_placeholder": "Choose a target language…",
"translate_result": "**{author} → {language}:**\n{text}",
"translation_unavailable": "Translation unavailable (DeepL not configured)",
"translation_failed": "Translation failed"
},
"misc": {
"credits_title": "Credits",
"credits_desc": "**Meowww**\n\n> **NotSoToothless** - Lead Developer, Bot Manager, Community Manager\n> **Z3R0** - Developer, Optimization Developer, Database Engineer\n> **Clippii (Heidi) ** - Developer, Website Developer, Community Manager\n> **LivingTheDagor** - Developer, Parser Developer, Consultant\n> **Lux_** - API Engineer, Spectra Developer\n> **Konigallerwaffen** - Feedback and Feature Consultant\n> **Žralok Tonda** - Czech Translator\n> **Styevy**, **Lopais** - German Translators\n> **Susogus**, **playforfun698** - Polish Translators\n> **Bobr** - Russian Translator\n\n\n[Feel like joining us?](https://discord.gg/BCvkK8JhPe)",
"schedule_title": "SEASON SCHEDULE",
"schedule_timeslot_label": "{region} TIMESLOT",
"schedule_not_found_title": "Schedule Not Found",
"schedule_not_found_desc": "No schedule data is available yet.",
"news_no_news_title": "No News",
"news_no_news_desc": "There are no announcements right now. Check back later!",
"news_footer": "Thank you for your support! ᕙᘘᗢ",
"help_title": "Bot Guide",
"donate_title": "Support SRE Bot",
"donate_desc": "If you enjoy using SRE Bot and want to support its development, consider buying me a coffee!\n\n**[Donate on Ko-fi](https://ko-fi.com/notsotoothless)**\n\nEvery contribution helps keep the bot running and supports new features. Thank you!",
"status_title": "Bot Status",
"status_last_received": "Last Game Received",
"status_avg_ttl": "Avg TTL (Last 30)",
"status_no_data": "No data yet",
"status_gaijin_slow": "⚠️ Gaijin servers slow",
"help_commands_header": "**Commands Overview**",
"help_links": "For detailed information, read the documentation [here]({docs}) or get support [here]({support}).",
"help_terms": "[Terms of Service]({terms}) • [Privacy Policy]({terms})"
},
"dev": {
"restricted_dev_team": "This command is restricted to the dev team.",
"restricted_bot_owner": "❌ This command is restricted to the bot owner.",
"invalid_server_id": "❌ Invalid server ID. Must be a 17-19 digit Discord server ID.",
"expiry_too_soon": "❌ Expiry timestamp must be at least 1 month from now.\n> Now: <t:{now}:F>\n> Minimum: <t:{min}:F>\n> You provided: <t:{provided}:F>",
"entitlement_write_failed": "❌ Failed to write entitlement: {error}",
"entitlement_created_title": "✅ Manual Entitlement Created",
"entitlement_created_desc": "**Server:** {guild_name} (`{server_id}`)\n**Expires:** <t:{unix_ts}:F> (<t:{unix_ts}:R>)\n**Created:** <t:{now}:F>",
"query_failed": "Query failed: {error}",
"health_title": "Bot Health Dashboard",
"health_uptime": "Uptime",
"health_guilds": "Guilds",
"health_games_processed": "Games Processed",
"health_tasks": "Tasks",
"health_websocket": "WebSocket",
"health_never": "never",
"health_errors": "({count} errors)",
"health_last_msg": "last msg {ago} ({count} total)",
"health_avg_ttl": "Avg TTL (Last 30)",
"entitlements_title": "Active Entitlements ({count} total)",
"entitlements_no_entries": "No entitlements.",
"entitlements_empty_title": "Active Entitlements",
"entitlements_empty_desc": "No active entitlements found.",
"entitlements_tag_discord": "Discord",
"entitlements_tag_whop": "Whop",
"entitlements_tag_manual": "Manual",
"query_prefix": "Query: {name}"
},
"leaderboard_alarm": {
"title": "🏆 Squadron Leaderboard",
"top15_desc": "Top 15 squadrons with statistics, sent 35 minutes after timeslot close.\nThis one sent <t:{timestamp}:R>.",
"top30_desc": "Squadrons 16-30 with statistics.",
"not_logged_title": "Leaderboard Not Logged",
"not_logged_desc": "Use `/unlock` to subscribe to the **Standard** tier (or higher) to receive automatic leaderboard updates.",
"server_not_upgraded_title": "⚠️ Server Not Upgraded",
"server_not_upgraded_desc": "This server does not have an active Premium subscription.\n\n**Automatic updates will stop being sent to non-upgraded servers after <t:{deadline}:D>.**\n\nUse `/unlock` to subscribe and keep receiving automatic updates."
},
"stacks": {
"stack_title": "{leader}'s Stack",
"stack_named_title": "{name}",
"no_members": "No members yet.",
"members_field": "Members ({count}/{max})",
"queue_field": "Queue ({count}/{max})",
"manage_title": "Manage Stack",
"no_pending_requests": "No pending requests.",
"disbanded_title": "Stack [Disbanded]",
"disbanded_desc": "This stack was disbanded by the leader.",
"expired_title": "Stack [Expired]",
"expired_desc": "This stack has expired.",
"join_modal_title": "Apply to Join Stack",
"join_vehicle_label": "What will you play?",
"join_vehicle_placeholder": "e.g. F-16C, WZ305...",
"ping_modal_title": "Ping Message",
"ping_message_label": "Custom message (optional)",
"ping_message_placeholder": "e.g. Come now! Stack starting!",
"rename_modal_title": "Rename Stack",
"rename_label": "Stack name",
"rename_placeholder": "e.g. Night Owls, Alpha Squad...",
"select_new_leader": "Select new leader…",
"select_applicants": "Select applicants…",
"no_pending_applications": "No pending applications.",
"select_to_remove": "Select people to remove…",
"no_members_or_applicants": "No members or applicants.",
"select_to_ping": "Select people to ping individually…",
"stack_not_found": "❌ Stack not found.",
"no_longer_exists": "❌ This stack no longer exists.",
"member_not_exists": "❌ That member no longer exists.",
"already_has_stack": "❌ That player already has an active stack.",
"already_member": "❌ You are already a member of this stack.",
"already_applied": "❌ You already have a pending application for this stack.",
"queue_full": "❌ The queue is full ({max}/{max}). Try again later.",
"application_sent": "✅ Application sent! The stack leader will review it.",
"stack_disbanded": "✅ Stack disbanded.",
"cancelled": "Cancelled.",
"select_member_transfer": "❌ Please select a member to transfer ownership to.",
"ownership_transferred": "✅ Ownership transferred to {nick}. You have left the stack.",
"select_applicant_first": "❌ Please select at least one applicant first.",
"stack_full": "❌ Stack is already full ({max}/{max} members).",
"select_person_first": "❌ Please select at least one person first.",
"no_one_to_ping": "❌ No one to ping.",
"ping_footer": "Pinged by {leader} for {stack}.",
"pinged": "✅ Pinged!",
"select_from_dropdown": "❌ Please select at least one person from the dropdown first.",
"stack_renamed": "✅ Stack renamed to **{name}**.",
"only_member_use_disband": "❌ You are the only member. Use **Disband Stack** to end it.",
"select_transfer_prompt": "Select a member to transfer ownership to before leaving:",
"left_stack": "✅ You have left the stack.",
"application_withdrawn": "✅ Your application has been withdrawn.",
"not_member_or_applicant": "❌ You are not a member of or applicant to this stack.",
"leader_only_manage": "❌ Only the stack leader can manage this stack.",
"leader_only_disband": "❌ Only the stack leader can disband this stack.",
"confirm_disband": "Are you sure you want to disband this stack? This cannot be undone.",
"already_active_stack": "⚠️ You already have an active stack. If the original embed is gone (e.g. after a bot restart), you can force disband it and start fresh.",
"force_created": "✅ Previous stack disbanded. New stack created.",
"no_active_stack": "❌ You don't have an active stack. Use `/stack-create` to start one.",
"could_not_parse_channel": "⚠️ Couldn't parse stored channel ID."
},
"commands": {
"common": {
"season": "The season to generate the card for",
"theme": "Card color theme",
"squadron_short": "The short name of the squadron",
"player_username": "The player's username",
"choice_dark": "Dark",
"choice_light": "Light"
},
"comp": {
"description": "Find the last known comps for a given team",
"squadron_short": "The shortname of the enemy team"
},
"quick_log": {
"description": "Quickly set an alarm for this squadron in this channel",
"squadron_name": "The SHORT name of the squadron to monitor",
"type": "Choose Logs, Points, Leaderboard, Weekly BR, or Both",
"choice_logs": "Logs",
"choice_points": "Points",
"choice_leaderboard": "Leaderboard",
"choice_both": "Both (Logs + Points)",
"choice_weekly_br": "Weekly BR"
},
"sq_info": {
"description": "Fetch information about a squadron"
},
"sq_info_graph": {
"description": "Show a roster composition graph by activity and WR (current season)"
},
"sq_card": {
"description": "Generate a season recap card for a squadron",
"squadron": "The short name of the squadron"
},
"sq_stats": {
"description": "Display a squadron's points over time"
},
"loss_calculator": {
"description": "Calculate the point loss if players leave a squadron",
"player1": "Player leaving",
"player_optional": "Player leaving (optional)"
},
"website": {
"description": "Get a link to the SRE Bot website"
},
"card": {
"description": "Generate a season recap card for a player"
},
"player_stats": {
"description": "View detailed vehicle statistics for a player",
"username": "The WT username for stats request",
"uid": "The WT UID for stats request"
},
"view_player_games": {
"description": "View the last 20 games for a player"
},
"view_match": {
"description": "View a match scoreboard by ID or player",
"match_id": "The session hex ID of the match to view",
"player_name": "A player's username to browse recent matches"
},
"compare": {
"description": "Compare aggregate SQB stats between players",
"player1": "First player username",
"player2": "Second player username",
"player_optional": "Additional player username (optional)"
},
"leaderboard": {
"description": "Get the SRE Bot global leaderboard"
},
"set_squadron": {
"description": "Set the squadron tag for this server",
"abbreviated_name": "The short name of the squadron to set"
},
"setup": {
"description": "Set up the bot for this server"
},
"meta_management": {
"description": "Manage meta data access settings for this server"
},
"meta": {
"description": "Search squadron meta roster by vehicle name",
"vehicle": "Vehicle name to search for"
},
"top": {
"description": "Get the top 20 squadrons with detailed stats"
},
"language": {
"description": "Change the bot's language."
},
"translate_message": {
"name": "Translate Message"
},
"sq_track": {
"description": "Track a squadron and compare stats against the last check",
"squadron_short_name": "Short name of the squadron to track"
},
"analytics": {
"description": "View advanced SQB analytics for a squadron",
"view": "Which analytics view to show",
"choice_maps": "Map Win Rates",
"choice_comps": "Team Compositions",
"choice_consistency": "Player Consistency",
"choice_time": "Time of Day",
"choice_matchups": "Matchup History"
},
"recent": {
"description": "Show recent squadron battles for a squadron",
"length": "Number of matches to show"
},
"vs": {
"description": "Head-to-head record between two squadrons",
"squadron_a": "First squadron",
"squadron_b": "Second squadron"
},
"autolog_management": {
"description": "Manage autolog notifications and diagnose permissions"
},
"diagnose_perms": {
"description": "Diagnose autolog permissions for this channel"
},
"unlock": {
"description": "Unlock premium features for this server"
},
"credits": {
"description": "View the team credited for building this"
},
"schedule": {
"description": "View the current season BR schedule"
},
"news": {
"description": "View the latest SRE Bot news and announcements"
},
"help": {
"description": "View the guide, ToS, and support links"
},
"donate": {
"description": "Support the development of SRE Bot"
},
"stack_create": {
"description": "Create a new player stack",
"vehicle": "What vehicle will you start with?"
},
"stack_manage": {
"description": "Re-post your active stack embed to this channel"
},
"bot_status": {
"description": "View bot status: last game received and average TTL"
}
},
"permission": {
"blacklisted_title": "❌ Blacklisted",
"blacklisted_desc": "You are blacklisted from using this command.",
"reason_line": "**Reason:** {reason}",
"access_denied_title": "⛔ Access Denied",
"no_permission_desc": "You do not have permission to use this command.",
"unexpected_error_title": "❗ Error, report this...."
},
"weekly_br": {
"title_wildcard": "Weekly BR Report — {br} BR",
"title_squadron": "Weekly BR Report — [{tag}] {long} • {br} BR",
"window_label": "Window: {start} → {end}",
"wildcard_desc_first": "Top {count} squadrons by ELO • Ranks {low}{high}",
"wildcard_desc_second": "Top {count} squadrons by ELO • Ranks {low}{high}",
"squadron_stats_line": "- {games} games • K/D {kdr} • WR {wr}%",
"top_players_inline_header": "🥇 Top players:",
"player_line_short": " {rank}. {nick} ⭐ {score} ({games}g)",
"top_players_header": "**Top {count} players by ELO:**",
"player_line_full": "{rank}. **{nick}** ⭐ {score} • {games} games • K/D {kdr}",
"squadron_header_line": "Squadron ELO: {score} • {games} games • WR {wr}% • K/D {kdr}",
"squadron_header_no_aggregate": "Squadron ELO: not enough team activity to score this week.",
"no_data": "No matches recorded for [{tag}] this BR rotation."
}
}