- Add a 'Voice channel tally' group to /help with the three commands.
- Add a Voice Channel Tally section to the website docs (docs.ejs).
- Translate the commands.tally bot strings + help_group_tally into all 10
other bot locales, and the new docs.* web strings into all 10 web locales.
- Fix stale need_one_input string (ign/squadron_short -> username/squadron).
Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>
* chore(tally): remove /dev-tally testing command
Feature is verified working; drop the dev-only manual win/loss command and its now-unused apply_manual_result helper and test.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
* refactor(tally): rename /tally-wipe to /tally-clear
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
---------
Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>
Rename /tally-claim and /tally-transfer options to username/squadron with
clearer descriptions. Fix /dev-tally to only apply a win/loss when the
passed username/squadron actually matches what the VC is tracking, instead
of bumping any active tally.
Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>
* feat(tally): /tally-claim, /tally-transfer, /tally-wipe commands
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
* feat(tally): idle sweep, startup load, and empty-VC expiry
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
* style(tally): parenthesize voice-state guard for clarity
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
* feat(tally): update live tallies when sessions finish
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
* fix(tally): robust winner matching + cleanup of deleted-VC tallies
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
* feat(tally): /dev-tally to manually attribute a win/loss in your VC
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
---------
Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>
Squads with dash or underscore tags (e.g. -DSPLA-, _APS_) had their raw
replay team.squadron value written directly to COMPS filenames, producing
-DSPLA-.json / _APS_.json. The /comp autocomplete returns the clean DB
short_name (DSPLA) so the file lookup never matched.
Fix: strip leading/trailing non-alphanumeric characters and uppercase in
both the writer and the /comp command lookup. Also renamed the 8 existing
decorated COMPS files to their clean equivalents on disk.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Per-squadron WeeklyBR reports are distinct from the global wildcard
report and should always send even when both point at the same channel.
Removed the dedup block that was silently dropping squadron-specific
embeds whenever the channel matched the wildcard channel.
Adds /resend-weekly-br (dev-only) to force-resend the most recently
ended BR window to all configured channels, clearing the idempotency
marker first.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
PR #1223 + fixup moved data_parser into BOTS/SHARED, but five BOT modules
(analytics, autologging, botscript, lux_apis, meta_manager) still used
`from .data_parser import ...`. That relative form looks inside the BOT
package, which no longer contains data_parser, so the bot crashed at
startup with ModuleNotFoundError.
Add BOT/__init__.py to put BOTS/SHARED on sys.path at package import,
then switch all five files to absolute `from data_parser import ...`.
Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
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>