feat(telegram,game): single bot + per-user variant preferences #90

Merged
developer merged 1 commits from feature/single-bot-variant-preferences into development 2026-06-20 12:48:11 +00:00
Owner

What

Collapse the two per-language Telegram bots into one unified bot, and replace language-based variant gating with explicit per-user variant preferences.

Highlights

  • Single bot: drop service_language + supported_languages everywhere (DB, account, auth, FlatBuffers Session, gateway, connector proto). The one bot renders chat + out-of-app push in the recipient's preferred_language; the game-language push routing is removed.
  • Variant preferences: new accounts.variant_preferences (text[], DB default {erudit_ru}, CHECK non-empty + subset). Gates New Game (auto / vs-AI / friend-create), enforced server-side; an invited friend may accept any variant. Edited in Settings; Erudit-first everywhere.
  • Admin: drop the per-bot language selectors + feedback channel_lang.
  • Env/CI: collapse to single unsuffixed names (TELEGRAM_BOT_TOKEN, TELEGRAM_GAME_CHANNEL_ID, VITE_TELEGRAM_LINK, VITE_TELEGRAM_GAME_CHANNEL_NAME); drop GATEWAY_DEFAULT_SUPPORTED_LANGUAGES.
  • Docs updated (ARCHITECTURE, FUNCTIONAL +_ru, READMEs, PRERELEASE).

Verified locally

go build/vet/test (all modules) · backend integration (-tags=integration) · UI check + 294 unit + build + 150 e2e (Chromium+WebKit) · proto/fbs/ui codegen clean.

Action required before relying on the test contour

  1. Rename the Gitea TEST_/PROD_ Telegram secrets/vars to the unsuffixed names (TEST_TELEGRAM_BOT_TOKEN, TEST_TELEGRAM_GAME_CHANNEL_ID, TEST_VITE_TELEGRAM_LINK, TEST_VITE_TELEGRAM_GAME_CHANNEL_NAME); drop TEST_GATEWAY_DEFAULT_SUPPORTED_LANGUAGES.
  2. Schema + wire change → after deploy, DROP SCHEMA backend CASCADE + restart backend so goose re-migrates and the robot pool re-provisions.

Deferred

The migration squash is intentionally left to a focused follow-up PR (high-blast-radius schema baseline; the incremental 00014 is kept here).

## What Collapse the two per-language Telegram bots into one unified bot, and replace language-based variant gating with explicit per-user variant preferences. ## Highlights - **Single bot**: drop `service_language` + `supported_languages` everywhere (DB, account, auth, FlatBuffers Session, gateway, connector proto). The one bot renders chat + out-of-app push in the recipient's `preferred_language`; the game-language push routing is removed. - **Variant preferences**: new `accounts.variant_preferences` (`text[]`, DB default `{erudit_ru}`, CHECK non-empty + subset). Gates New Game (auto / vs-AI / friend-create), enforced server-side; an invited friend may accept any variant. Edited in Settings; Erudit-first everywhere. - **Admin**: drop the per-bot language selectors + feedback `channel_lang`. - **Env/CI**: collapse to single unsuffixed names (`TELEGRAM_BOT_TOKEN`, `TELEGRAM_GAME_CHANNEL_ID`, `VITE_TELEGRAM_LINK`, `VITE_TELEGRAM_GAME_CHANNEL_NAME`); drop `GATEWAY_DEFAULT_SUPPORTED_LANGUAGES`. - Docs updated (ARCHITECTURE, FUNCTIONAL +_ru, READMEs, PRERELEASE). ## Verified locally go build/vet/test (all modules) · backend integration (`-tags=integration`) · UI check + 294 unit + build + 150 e2e (Chromium+WebKit) · proto/fbs/ui codegen clean. ## Action required before relying on the test contour 1. Rename the Gitea `TEST_`/`PROD_` Telegram secrets/vars to the unsuffixed names (`TEST_TELEGRAM_BOT_TOKEN`, `TEST_TELEGRAM_GAME_CHANNEL_ID`, `TEST_VITE_TELEGRAM_LINK`, `TEST_VITE_TELEGRAM_GAME_CHANNEL_NAME`); drop `TEST_GATEWAY_DEFAULT_SUPPORTED_LANGUAGES`. 2. Schema + wire change → after deploy, `DROP SCHEMA backend CASCADE` + restart backend so goose re-migrates and the robot pool re-provisions. ## Deferred The migration squash is intentionally left to a focused follow-up PR (high-blast-radius schema baseline; the incremental `00014` is kept here).
developer added 1 commit 2026-06-20 12:24:25 +00:00
feat(telegram,game): single bot + per-user variant preferences
CI / changes (pull_request) Successful in 2s
CI / unit (pull_request) Successful in 10s
CI / integration (pull_request) Successful in 13s
CI / ui (pull_request) Successful in 54s
CI / gate (pull_request) Successful in 0s
CI / deploy (pull_request) Successful in 57s
57c778f9b2
Collapse the two per-language Telegram bots into one unified bot and
replace language-based variant gating with explicit per-user variant
preferences.

- Telegram: one bot; drop service_language and the supported_languages
  set everywhere (DB, account, auth, FlatBuffers Session wire, gateway,
  connector proto). The single bot renders chat and out-of-app push in
  the recipient's preferred_language; remove the game-language push
  routing override (notify Intent.Language / push Event.language).
- Preferences: new accounts.variant_preferences (text[], DB default
  {erudit_ru}, CHECK non-empty + subset of the three variants). Gates
  the New Game picker, vs-AI and the friend invitation the player
  creates, enforced server-side (HTTP 400 otherwise); an invited friend
  may still accept any variant. Edited on the Settings screen; variants
  are Erudit-first everywhere.
- Admin: drop the per-bot language selectors (broadcast / send-to-user)
  and the feedback channel_lang column/field.
- Env/CI: collapse TELEGRAM_BOT_TOKEN_{EN,RU}, TELEGRAM_GAME_CHANNEL_ID_{EN,RU},
  VITE_TELEGRAM_LINK{,_EN,_RU} and VITE_TELEGRAM_GAME_CHANNEL_NAME_{EN,RU}
  to single unsuffixed names; drop GATEWAY_DEFAULT_SUPPORTED_LANGUAGES.
- Docs updated (ARCHITECTURE, FUNCTIONAL + _ru, platform/telegram, gateway,
  backend, ui, UI_DESIGN, PRERELEASE).

The migration squash is deferred to a follow-up PR.
owner approved these changes 2026-06-20 12:47:54 +00:00
developer merged commit a21ba23e5e into development 2026-06-20 12:48:11 +00:00
developer deleted branch feature/single-bot-variant-preferences 2026-06-20 12:48:11 +00:00
Sign in to join this conversation.
No Reviewers
No Label
2 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: developer/scrabble-game#90