联系人与社交
桌面端的联系人与社交面让用户管理好友、收发好友请求、搜索用户、屏蔽或解除屏蔽。社交状态规范化在 Realm,桌面端做读取与呈现。
这个面承担什么
| 功能 | 行为 |
|---|---|
| 好友列表 | 平台规范态,由 Realm 提供 |
| 好友请求 | 发起、接收、接受、拒绝 |
| 用户搜索 | 按 handle / 显示名查找 |
| 屏蔽 / 解除屏蔽 | 按用户粒度,经由 Realm 准入 |
| 联系人页 | 侧边栏带可折叠搜索;失焦或按 Esc 自动收起 |
联系人页不是真相来源。Realm 的社交契约 R-SOC-* 才是。桌面端只读取并呈现。
好友关系是规范化的平台真相
Nimi 的好友关系是平台规范化的真相:一旦准入,它不属于某个世界、某次会话、某个应用。Alice 与 Bob 在任何同时到访的世界中可见,在他们都使用的任何 Nimi 应用中可见。
| 维度 | 取值 |
|---|---|
| 存储 | Realm R-SOC-* |
| 形态 | 有序对唯一性图 |
| 跨世界可见 | 是;同一份好友关系在每个世界 |
| 跨应用可见 | 是;同一份好友关系在每个 Nimi 应用 |
| 修改 | 经由准入的 Realm 契约 |
在世界 A 加为好友,在世界 B 与任意 Nimi 应用里这段关系直接可见,不需要再次确认。
场景:发送好友请求
你搜索一位用户并发出好友请求。
- 搜索。联系人搜索框接受 handle。
- Realm 查询。桌面端走已准入的用户搜索面查 Realm,结果按强类型返回。
- 发送请求。选中一位用户后,桌面端向 Realm 提交一份强类型好友请求。
- Realm 准入。请求被记录,对方看到。
- 对方接受。Realm 把好友关系标记为
active(在R-SOC-*下登记有序对)。 - 处处可见。从这一刻起,好友关系是平台规范态,对方在任何世界都可见。
这段关系不是桌面端的本地缓存,需要同步。它就是 Realm 的规范态,桌面端只是呈现。
场景:屏蔽某位用户
你不想再与某位用户交互,决定屏蔽。
- 屏蔽。在联系人页向 Realm 提交屏蔽请求。
- Realm 准入。屏蔽被记录,社交图更新。
- 跨世界生效。屏蔽在每个世界都生效。聊天前置条件依赖社交状态,会拒绝继续直接对话。
- 审计血缘。屏蔽事件被记录。
在任何场景下被屏蔽的用户,在所有场景下都被屏蔽。社交图只有一份,不会按应用分裂。
侧边栏行为
联系人侧边栏的搜索输入框可折叠,失焦或按 Esc 会自动收起。是个细节,但能让这块面用起来更顺手。