fix(social): robot blocks
CI / changes (pull_request) Successful in 3s
CI / unit (pull_request) Successful in 9s
CI / integration (pull_request) Successful in 17s
CI / ui (pull_request) Successful in 52s
CI / gate (pull_request) Successful in 0s
CI / deploy (pull_request) Successful in 1m21s
CI / changes (pull_request) Successful in 3s
CI / unit (pull_request) Successful in 9s
CI / integration (pull_request) Successful in 17s
CI / ui (pull_request) Successful in 52s
CI / gate (pull_request) Successful in 0s
CI / deploy (pull_request) Successful in 1m21s
Blocking an auto-match opponent who is secretly a pooled robot is recorded instead in a separate `robot_blocks` table. Now blocking behaves the same in that game (struck name, hidden composer) and lists the blocked opponent under the name you saw, but is recorded only against that game — the disguise holds, the shared robot is never globally blocked, and the matchmaker keeps pairing you with robots (so you can never block yourself out of opponents). - the shared robot account is never put in `blocks` - the matchmaker keeps it free and it is not blocked under its other per-game names - the blocked list and the in-game card still show it by joining that table; an unblock deletes the row
This commit is contained in:
@@ -520,7 +520,12 @@ in either direction (the enqueue excludes the caller's `BlockedWith` set);
|
||||
**overrides but does not delete** a friendship (an unblock cleanly restores it), so a pair may
|
||||
be friends **and** blocked at once; the admin user card shows the full truth (blocks,
|
||||
blocked-by, friends) regardless of this suppression. Block/unblock emit a `user_blocked` /
|
||||
`user_unblocked` notification to the blocker only (§10).
|
||||
`user_unblocked` notification to the blocker only (§10). Blocking an auto-match opponent who
|
||||
is secretly a pooled robot is recorded instead in a separate **`robot_blocks`** table, keyed on
|
||||
the blocker + game + seat with the seen name snapshotted (`BlockInGame`): the shared robot
|
||||
account is never put in `blocks` (so the matchmaker keeps it free and it is not blocked under
|
||||
its other per-game names), while the blocked list and the in-game card still show it by joining
|
||||
that table; an unblock deletes the row.
|
||||
- **Friend games**: formed by **invitation → accept** (an `game_invitations`
|
||||
record with one row per invitee). The 2–4 player game starts once **every**
|
||||
invitee accepts; any decline cancels the invitation, and a pending invitation
|
||||
|
||||
+6
-1
@@ -198,7 +198,12 @@ read at once), and a friend request or invitation they send you is kept but neve
|
||||
block **overrides but does not delete** an existing friendship (so you may block a friend, and
|
||||
they keep seeing you as one); active games are never interrupted — you can finish them, with
|
||||
the blocked opponent's chat composer hidden (only the log remains). Blocking from a game card
|
||||
mirrors the block in **Settings → Friends**; **unblock** and **unfriend** live there only. Per-game chat is for quick reactions: messages are short
|
||||
mirrors the block in **Settings → Friends**; **unblock** and **unfriend** live there only.
|
||||
Blocking an **auto-match opponent who is secretly a robot** behaves the same in that game
|
||||
(struck name, hidden composer) and lists the blocked opponent under the name you saw, but is
|
||||
recorded only against that game — the disguise holds, the shared robot is never globally
|
||||
blocked, and the matchmaker keeps pairing you with robots (so you can never block yourself out
|
||||
of opponents). Per-game chat is for quick reactions: messages are short
|
||||
(up to 60 characters) and may not contain links, email addresses or phone numbers,
|
||||
even disguised. You may send **one message per turn, on your own turn**; once it is sent
|
||||
the field gives way to a short caption until your next turn. Nudge the player whose turn
|
||||
|
||||
@@ -203,7 +203,12 @@ nudge) приходят от бота **этой партии** — по язы
|
||||
продолжает видеть вас в друзьях); активные игры не прерываются — их можно доигрывать, при этом у
|
||||
заблокированного соперника «подвал» чата скрыт (остаётся только лог). Блокировка с карточки в
|
||||
партии повторяет блокировку в **Настройках → Друзья**; **разблокировка** и **удаление из друзей**
|
||||
есть только там. Чат
|
||||
есть только там.
|
||||
Блокировка **авто-матч соперника, который втайне робот**, в этой партии ведёт себя так же
|
||||
(зачёркнутое имя, скрытый «подвал») и в списке заблокированных показывается под тем именем,
|
||||
которое ты видел, но записывается только для этой партии — маскировка сохраняется, общий
|
||||
аккаунт робота глобально не блокируется, и матчмейкер продолжает давать роботов (так что
|
||||
заблокировать себя без соперников нельзя). Чат
|
||||
партии — для быстрых реакций: сообщения короткие (до 60 символов) и не должны
|
||||
содержать ссылок, email и телефонов, даже завуалированных. В свой ход можно отправить
|
||||
**одно сообщение за ход**; после отправки поле сменяется короткой подписью до следующего
|
||||
|
||||
Reference in New Issue
Block a user