- /tg-admin result post-all [slot:] — posts/updates every TG result for a
slot (default 20:00) in one pass, not one at a time
- Officers can add a late-arriving player to a poll (locked or not) so
they can submit a score instead of hitting "You weren't in this TG":
/tg poll add-attendee (single, autocomplete) and /tg-admin poll
add-attendees (modal, comma/newline-separated, for adding several at
once — Discord modals can't hold select menus, only text inputs)
- fix: /tg-admin result post, leaderboard post, and leaderboard
post-highlights had no permission check at all — any guild member could
invoke them
- fix: --register never exited after registering slash commands, so it
kept running as a full second bot instance forever. Every docker exec
--register run stacked another live process on top of the container's
real one, each independently connected to Discord — root cause of /tg
poll start posting multiple polls and vote/submit state acting confused
(confirmed 3 live processes via docker top, cleaned up)
- fix: bot startup poll-restore logic had the same stale-button-
resurrection bug already fixed in /tg poll reload, in a sibling code
path that got missed — now respects scoreSubmitOpen/buttonsRemoved
there too instead of re-deriving from locked/confirmed
- rename: officer -> moderator throughout (Config.roles, hasOfficerRole,
all "officer only" text, /tg-config roles set/add/remove/reset-*
commands). Config.load() auto-migrates a legacy roles.officer key on
read so existing deployed config.json files don't silently reset.
Slash command names changed — re-register after deploying.
- data/updates v0.10.3 changelog for the above