# GDD-29 聊天与信息传递系统设计

> 文档类型：游戏设计文档（Game Design Document）
> 版本：1.1
> 日期：2026-07-02
> 关联文档：GDD-02（✅46 区域聊天与广播）、GDD-07（帮派门派社交四系统）、GDD-08（✅D07 每层独立频道 / ✅D17 附近的人）、GDD-09（✅60-62 祖地传音/追杀令通报）、GDD-13（佣兵悬赏）、GDD-14（✅68 全服通报与情报购买）、GDD-16（✅S09 传音与社交表达 / 师徒道侣结义关系链）、TDD-04（数据库表结构）、TDD-05（API接口设计）

> **定位**：聊天与信息传递是洪荒大陆玩家社交的底层基础设施。本文档在 GDD-16 ✅S09（区域频道+私聊+传音符+表情称号）的基础上，系统性地设计完整的频道层级、消息类型、安全防护、存储策略与社交联动机制，为师徒/道侣/结义/帮派/门派/家族等社交关系提供通信载体，落实「玩家互动优先」(✅97) 的设计哲学。

---

## 已确认决策记录（GDD-29 本地，跨文档引用写 `GDD-29 ✅C0X`）

| # | 决策 |
|---|------|
| ✅C01 | **频道七层架构**：种族频道 / 区域频道 / 世界频道 / 帮派频道 / 门派频道 / 家族频道 / 队伍频道 + 私聊 + 传音符，共 9 类通信通道 |
| ✅C02 | **世界层级与频道映射**：区域频道按 `world_tier` 隔离（✅D07），跨层通信需消耗「传音符」道具 |
| ✅C03 | **消息类型六类**：文字 / 表情 / 系统广播 / 战报分享 / 物品链接 / 位置分享 |
| ✅C04 | **敏感词三级过滤**：实时拦截（违法/广告）+ 延迟审核（谐音/变体）+ 人工复核队列 |
| ✅C05 | **刷屏防护四件套**：频率限制 + 自动禁言 + 举报机制 + 新人静默期 |
| ✅C06 | **屏蔽/黑名单双轨**：个人屏蔽（单向，对方无感）+ 帮派/组织黑名单（帮主/长老操作，影响频道权限） |
| ✅C07 | **系统消息差异化呈现**：天启广播（全服金光横幅）/ 拍卖广播（频道内嵌卡片）/ 世界事件（区域弹幕）/ 渡劫成功（全服通报+特效） |
| ✅C08 | **聊天记录存储**：本地缓存最近 200 条/频道 + 服务端保留 7 天历史 + 过期自动清理 |
| ✅C09 | **聊天社交联动**：从聊天消息可直接发起组队邀请 / 交易请求 / 好友申请 / 师徒邀请，消息体携带操作按钮元数据 |
| ✅C10 | **表情系统**：基础表情免费 + 高阶表情通过成就/商城获取；表情消息与文字消息同等存储 |
| ✅C11 | **称号展示**：聊天消息携带当前称号前缀，称号可在聊天设置中切换/隐藏 |
| ✅C12 | **传音符跨层规则**：传音符可跨世界层级发送私聊消息；消耗数量随层级差距递增（跨 1 层 = 1 张，跨 2 层 = 3 张，跨 3 层 = 5 张） |

---

## 第一章 频道层级体系

### 1.1 频道总览

洪荒大陆的通信体系由 **9 类频道** 构成，按作用范围从窄到宽排列：

| 频道类型 | 作用范围 | 解锁条件 | 消息可见性 | 频道颜色（客户端） |
|----------|----------|----------|-----------|-------------------|
| **队伍频道** | 当前队伍成员（2-5 人） | 创建/加入队伍 | 仅队伍成员 | 绿色 |
| **家族频道** | 当前家族成员（5-15 人） | 加入家族 | 仅家族成员 | 粉色 |
| **门派频道** | 当前系统门派全体成员 | 加入门派 | 仅门派成员 | 蓝色 |
| **帮派频道** | 当前帮派全体成员 | 加入帮派 | 仅帮派成员 | 紫色 |
| **区域频道** | 同一世界层级同一区域的所有玩家 | 进入该区域 | 同区域可见 | 白色 |
| **种族频道** | 同一种族同一世界层级的所有玩家 | 创角选择种族 | 同族同层可见 | 金色 |
| **世界频道** | 当前服务器所有在线玩家 | 筑基期（层级 2）解锁 | 全服可见 | 红色 |
| **私聊** | 两名指定玩家 | 无限制 | 仅双方 | 橙色 |
| **传音符** | 跨层级的两名指定玩家 | 消耗传音符道具 | 仅双方（跨层） | 青色 |

### 1.2 频道详细规则

#### 1.2.1 队伍频道

| 维度 | 规则 |
|------|------|
| 成员上限 | 5 人（组队上限） |
| 消息保留 | 本地缓存，队伍解散后清除 |
| 特殊功能 | 支持物品链接分享、位置分享、战报快捷分享 |
| 语音 | 不支持（纯文字游戏，不设语音频道） |

#### 1.2.2 家族频道

| 维度 | 规则 |
|------|------|
| 成员上限 | 15 人（家族满级上限，GDD-07 §4.2） |
| 消息保留 | 本地缓存 + 服务端保留 7 天 |
| 特殊功能 | 家族事件通知、义团共享委托进度播报 |
| 权限 | 家族族长可设置「仅管理可发言」模式（应对家族内部纠纷） |

#### 1.2.3 门派频道

| 维度 | 规则 |
|------|------|
| 成员上限 | 按系统门派设定（数百至数千） |
| 消息保留 | 本地缓存 + 服务端保留 3 天 |
| 特殊功能 | 门派委托播报、功法库更新通知、同门求助标记 |
| 权限 | 掌门/长老可禁言普通弟子；频道内可发布「同门求助」标记（黄色感叹号） |

#### 1.2.4 帮派频道

| 维度 | 规则 |
|------|------|
| 成员上限 | 按帮派等级（数百至数千） |
| 消息保留 | 本地缓存 + 服务端保留 7 天 |
| 特殊功能 | 帮派领地播报、竞标通知、帮派副本组队、分红通知 |
| 权限 | 帮主/副帮主/长老可禁言；可设置「精英频道」子频道（仅精英以上可见） |
| 子频道 | `#帮派-公告`（仅管理可发言）、`#帮派-精英`（精英以上可见）、`#帮派-全体` |

#### 1.2.5 区域频道

| 维度 | 规则 |
|------|------|
| 范围 | 当前 `world_tier` + 当前区域 `zone_id` 内所有在线玩家 |
| 消息保留 | 仅本地缓存（服务端不持久化区域消息） |
| 消息上限 | 显示最近 100 条，超出滚动清除 |
| 特殊功能 | 区域事件播报（妖潮、世界 Boss、混沌裂隙等）、附近玩家求助 |
| 限制 | 炼气期（层级 1）区域频道仅本种族可见（✅D03 出生地隔离） |

#### 1.2.6 种族频道

| 维度 | 规则 |
|------|------|
| 范围 | 同一 `race_id` + 同一 `world_tier` 的所有在线玩家 |
| 消息保留 | 本地缓存 + 服务端保留 3 天 |
| 特殊功能 | 祖地追杀令通报（✅61）、祖地入侵预警（✅60）、种族事件播报 |
| 限制 | 层级 1（出生地）种族频道为默认频道；层级 2+ 种族频道需手动切换 |

#### 1.2.7 世界频道

| 维度 | 规则 |
|------|------|
| 范围 | 当前服务器所有在线玩家 |
| 解锁条件 | 筑基期（层级 2）及以上 |
| 消息保留 | 本地缓存 + 服务端保留 1 天 |
| 频率限制 | 每 30 秒可发 1 条（防止刷屏） |
| 特殊功能 | 全服通报（天启/渡劫/稀有宝物获取）、情报购买入口（✅68） |
| 消耗 | 每条消息消耗 100 铜钱（小额经济 sink） |

#### 1.2.8 私聊

| 维度 | 规则 |
|------|------|
| 范围 | 两名指定玩家，不受世界层级限制（同层） |
| 消息保留 | 本地缓存 + 服务端保留 14 天 |
| 特殊功能 | 支持所有消息类型；可发起组队/交易/好友/师徒邀请（✅C09） |
| 限制 | 对方可屏蔽私聊（✅C06）；被屏蔽后发送方显示「消息已发送」但对方不可见 |

#### 1.2.9 传音符（跨层私聊）

| 维度 | 规则 |
|------|------|
| 范围 | 跨世界层级的两名指定玩家 |
| 消耗 | 传音符道具，数量随层级差距递增（✅C12） |
| 获取途径 | 生活技能制作 / 商城购买 / 世界事件掉落 / 坊市交易 |
| 消息保留 | 同私聊（14 天） |
| 限制 | 炼气期玩家不可使用传音符（层级 1 禁跨层通信） |

**传音符消耗表**：

| 层级差距 | 消耗数量 | 示例 |
|----------|----------|------|
| 同层 | 0 张（普通私聊即可） | 层级 2 → 层级 2 |
| 跨 1 层 | 1 张 | 层级 2 → 层级 3 |
| 跨 2 层 | 3 张 | 层级 1 → 层级 3 |
| 跨 3 层 | 5 张 | 层级 1 → 层级 4 |
| 跨 4 层 | 8 张 | 层级 1 → 层级 5 |

> 传音符消耗递增设计意图：鼓励玩家在同层级内自然社交，跨层通信为稀缺资源消耗型交互，与「层级越高官方存在感越低」(✅D18) 一致。

---

## 第二章 频道与世界层级的映射

### 2.1 层级频道隔离规则

世界层级（`world_tier`）是频道可见性的核心过滤维度：

| 频道类型 | 层级隔离规则 | 说明 |
|----------|-------------|------|
| 队伍频道 | 不隔离 | 跨层组队时队伍频道正常工作 |
| 家族频道 | 不隔离 | 家族成员可跨层通信 |
| 门派频道 | 按层级隔离 | 层级 2 的门派频道与层级 3 的门派频道独立 |
| 帮派频道 | 不隔离 | 帮派成员可跨层通信 |
| 区域频道 | 严格隔离 | 仅同层同区域可见 |
| 种族频道 | 按层级隔离 | 同种族不同层级各有独立频道 |
| 世界频道 | 按层级隔离 | 各层级有独立世界频道（层级 1 无世界频道） |
| 私聊 | 不隔离 | 同层私聊无限制 |
| 传音符 | 跨层 | 专门用于跨层通信，消耗道具 |

### 2.2 各层级频道可用性矩阵

| 层级 | 队伍 | 家族 | 门派 | 帮派 | 区域 | 种族 | 世界 | 私聊 | 传音符 |
|------|------|------|------|------|------|------|------|------|--------|
| 1 出生地 | ✅ | ✅ | ❌ | ❌ | ✅（仅本族） | ✅ | ❌ | ✅ | ❌ |
| 2 洪荒边境 | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
| 3 太古秘境 | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
| 4 混沌之渊 | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
| 5 界域 | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |

> 层级 1（出生地）无门派/帮派/世界频道，强化「种族摇篮」的沉浸感（✅D03）；门派与帮派系统在层级 2（洪荒边境）才激活（✅D04）。

### 2.3 频道切换规则

| 规则 | 说明 |
|------|------|
| 默认频道 | 进入游戏后默认显示「区域频道」+「队伍频道」（如有队伍） |
| 频道切换 | 玩家可手动切换活跃发送频道，聊天输入框左侧显示当前频道标识 |
| 多频道接收 | 玩家可同时接收所有已加入频道的消息，通过标签页或颜色区分 |
| 频道折叠 | 玩家可折叠/隐藏不关注的频道（不影响接收，仅影响显示） |
| 频道通知 | 可设置各频道的消息通知级别：全部 / 仅 @我 / 仅系统消息 / 静音 |

---

## 第三章 消息类型

### 3.1 消息类型总览

| 消息类型 | 标识 | 支持频道 | 说明 |
|----------|------|----------|------|
| **文字消息** | `TEXT` | 全部 | 纯文本内容，最大 200 字符 |
| **表情消息** | `EMOJI` | 全部 | 系统预设表情，发送后以动画形式展示 |
| **系统广播** | `SYSTEM` | 由系统决定 | 天启/渡劫/拍卖/世界事件等系统级通知 |
| **战报分享** | `BATTLE_REPORT` | 队伍/家族/帮派/区域 | 点击可查看完整战报详情 |
| **物品链接** | `ITEM_LINK` | 全部 | 点击可查看物品详情，支持对比 |
| **位置分享** | `LOCATION` | 队伍/家族/帮派 | 点击可打开地图并标记位置 |

### 3.2 消息体结构

```json
{
  "msg_id": "uuid",
  "channel_type": "REGION | FACTION | WORLD | GUILD | SECT | FAMILY | TEAM | WHISPER | VOICE_SCROLL",
  "channel_id": "zone_id | guild_id | sect_id | family_id | team_id | target_character_id",
  "world_tier": 2,
  "sender": {
    "character_id": "uuid",
    "name": "玩家名",
    "race_id": "human",
    "realm_tier": 3,
    "title": "金丹修士",
    "guild_name": "青云帮",
    "sect_name": "青云剑宗"
  },
  "msg_type": "TEXT | EMOJI | SYSTEM | BATTLE_REPORT | ITEM_LINK | LOCATION",
  "content": "消息文本内容",
  "extra_data": {},
  "timestamp": "2026-07-02T10:30:00Z",
  "is_muted": false
}
```

### 3.3 各消息类型详细设计

#### 3.3.1 文字消息

| 维度 | 规则 |
|------|------|
| 最大长度 | 200 字符（UTF-8，含表情字符） |
| 最小长度 | 1 字符 |
| 空格限制 | 不允许纯空格消息 |
| @功能 | 支持 `@玩家名` 提及（私聊不支持 @） |
| 链接 | 自动识别为纯文本（不渲染为超链接，防钓鱼） |

#### 3.3.2 表情消息

| 维度 | 规则 |
|------|------|
| 基础表情 | 免费，约 30 个（洪荒主题：抱拳、飞剑、打坐、渡劫等） |
| 高阶表情 | 通过成就解锁 / 商城购买 / 活动获取（如「龙族之怒」「凤妖涅槃」等种族专属表情） |
| 展示方式 | 聊天框内以动画形式播放（约 1-2 秒），不影响其他消息阅读 |
| 发送频率 | 与文字消息共享频率限制 |

#### 3.3.3 系统广播

系统广播由服务端自动触发，玩家不可手动发送。详细差异化呈现见第七章。

#### 3.3.4 战报分享

| 维度 | 规则 |
|------|------|
| 触发方式 | 战斗结束后点击「分享战报」按钮 |
| 展示内容 | 战斗双方名称/境界/种族、战斗结果、关键回合摘要、战报链接 |
| 点击行为 | 点击打开战报详情弹窗，显示完整ATB战报日志（GDD-03 v2.1） |
| 限制 | 每场战斗只能分享 1 次；同一战报不可重复分享到同一频道 |

#### 3.3.5 物品链接

| 维度 | 规则 |
|------|------|
| 触发方式 | 背包界面长按物品 → 「分享到聊天」 |
| 展示内容 | 物品名称（品色标记）、品阶、品质、基础属性摘要 |
| 点击行为 | 点击打开物品详情弹窗，可与自身装备对比 |
| 限制 | 绑定物品可分享但对方不可交易；已上架交易行的物品不可分享 |

#### 3.3.6 位置分享

| 维度 | 规则 |
|------|------|
| 触发方式 | 地图界面点击「分享位置」 |
| 展示内容 | 区域名称、坐标、世界层级 |
| 点击行为 | 点击打开地图并标记该位置（仅同层可见） |
| 限制 | 层级 1 玩家不可分享位置给跨层玩家 |

---

## 第四章 敏感词过滤与反诈骗机制

### 4.1 敏感词三级过滤体系

| 过滤级别 | 触发时机 | 处理方式 | 覆盖范围 |
|----------|----------|----------|----------|
| **L1 实时拦截** | 消息发送时 | 消息不发送，客户端提示「包含违规内容」 | 违法词汇、政治敏感、广告引流、色情 |
| **L2 延迟审核** | 消息发送后异步审核 | 审核期间消息正常显示；若命中则标记为「已折叠」+ 发送者警告 | 谐音变体、拆字、图片文字识别、新型诈骗话术 |
| **L3 人工复核** | L2 标记为可疑的消息 | 进入人工审核队列，24 小时内处理；处理前消息可见但带「待审核」标记 | 误判申诉、新型违规模式 |

### 4.2 敏感词库结构

| 分类 | 示例 | 处理 |
|------|------|------|
| **违法类** | 涉政/涉暴/涉恐 | L1 直接拦截 |
| **广告类** | 外挂/代练/私服/微信号/QQ群 | L1 直接拦截 |
| **色情类** | 明确色情词汇 | L1 直接拦截 |
| **诈骗类** | 充值返利/中奖通知/账号交易 | L1 拦截 + 客户端弹窗防诈骗提示 |
| **变体类** | 谐音/拆字/拼音首字母 | L2 延迟审核 |
| **游戏内违规** | 恶意辱骂/种族歧视/人身攻击 | L2 延迟审核 + 玩家举报 |

### 4.3 反诈骗机制

| 机制 | 说明 |
|------|------|
| **关键词预警** | 消息中出现「转账」「汇款」「支付宝」「微信支付」等关键词时，客户端弹窗提醒「谨防诈骗」 |
| **链接拦截** | 所有消息中的 URL 自动转为纯文本，不可点击；官方链接由系统消息单独推送 |
| **新号静默** | 新注册账号（≤ 3 天）在世界频道发言频率额外限制为每 60 秒 1 条 |
| **举报奖励** | 成功举报诈骗行为的玩家获得小额铜钱奖励（每日上限 3 次） |
| **黑名单同步** | 被系统判定为诈骗的账号自动加入全服黑名单，所有频道禁言 |

### 4.4 敏感词库更新策略

| 策略 | 说明 |
|------|------|
| **Nacos 动态下发** | 敏感词库存储在 Nacos 配置中心，服务端热加载，无需重启 |
| **每日增量更新** | 运营团队每日审核新增敏感词，通过 Nacos 推送 |
| **玩家举报采集** | 有效举报自动采集上下文，辅助 L2 审核模型训练 |
| **多语言支持** | 支持中文/英文/拼音/emoji 组合过滤 |

---

## 第五章 刷屏/骚扰防护

### 5.1 频率限制

| 频道 | 频率限制 | 超限处理 |
|------|----------|----------|
| 世界频道 | 30 秒/条 | 提示「发言过快，请稍后再试」 |
| 区域频道 | 5 秒/条 | 同上 |
| 种族频道 | 5 秒/条 | 同上 |
| 门派/帮派/家族频道 | 3 秒/条 | 同上 |
| 队伍频道 | 1 秒/条 | 同上 |
| 私聊/传音符 | 2 秒/条 | 同上 |

### 5.2 自动禁言规则

| 触发条件 | 禁言时长 | 说明 |
|----------|----------|------|
| 1 分钟内发送 10 条相同/近似消息 | 10 分钟 | 基础防刷屏 |
| 10 分钟内被 3 名不同玩家举报 | 30 分钟 | 社区自治 |
| 1 小时内累计自动禁言 3 次 | 24 小时 | 升级惩罚 |
| 被系统判定为广告机器人 | 永久禁言 | 需人工审核解除 |
| 24 小时内累计被举报 10 次 | 进入人工审核队列 | 审核期间禁言 |

### 5.3 举报机制

| 维度 | 规则 |
|------|------|
| 举报方式 | 长按消息 → 「举报」→ 选择原因（辱骂/广告/诈骗/骚扰/其他） |
| 举报冷却 | 同一玩家每 5 分钟可举报 1 次（防止恶意刷举报） |
| 举报上限 | 每日最多举报 20 名不同玩家 |
| 举报处理 | L2 自动审核 + L3 人工复核；处理结果通过系统邮件通知举报者 |
| 误举报 | 若举报被判定为恶意，举报者扣除信誉分（接 GDD-16 ✅S05 声望系统） |

### 5.4 新人静默期

| 维度 | 规则 |
|------|------|
| 静默期 | 新账号创角后 1 游戏天（= 现实 8 小时）内，世界频道不可发言 |
| 可用频道 | 区域频道 + 种族频道 + 私聊（可接收不可发送受限） |
| 解除条件 | 完成新手引导事件链 / 炼气期突破至筑基期 |
| 设计意图 | 防止批量注册小号刷屏/诈骗，与「炼气期禁充值」(✅D19) 理念一致 |

---

## 第六章 屏蔽/黑名单系统

### 6.1 个人屏蔽

| 维度 | 规则 |
|------|------|
| 屏蔽方式 | 长按消息 → 「屏蔽该玩家」；或在对方资料页点击「屏蔽」 |
| 屏蔽上限 | 最多屏蔽 200 名玩家 |
| 屏蔽效果 | 对方所有频道消息不可见；对方私聊消息不接收；对方无法查看你的位置分享 |
| 对方感知 | **无感**（对方消息正常发送，仅自己不可见） |
| 解除 | 在设置 → 屏蔽列表中手动解除 |
| 屏蔽持久化 | 服务端存储，换设备同步 |

### 6.2 帮派/组织黑名单

| 维度 | 规则 |
|------|------|
| 操作权限 | 帮主/副帮主/长老可操作帮派黑名单 |
| 黑名单效果 | 被列入黑名单的玩家无法加入该帮派；若已在帮派中则被踢出（需帮主确认） |
| 门派黑名单 | 系统门派由 NPC 掌门自动管理；自建门派无黑名单（个人私有） |
| 家族黑名单 | 家族族长可踢人，无独立黑名单（家族人数少，直接管理即可） |

### 6.3 义团/道侣关系中的屏蔽

| 场景 | 规则 |
|------|------|
| 道侣屏蔽 | 道侣关系中不可屏蔽对方（需先和离，GDD-16 §1.4.1） |
| 义团屏蔽 | 义团成员可屏蔽其他成员，但义团频道消息仍可见（仅私聊被屏蔽） |
| 师徒屏蔽 | 师父可屏蔽徒弟，徒弟可屏蔽师父；师徒频道消息仍可见 |

---

## 第七章 系统消息格式规范

### 7.1 系统消息分类与差异化呈现

| 消息类型 | 呈现方式 | 频道范围 | 持续时间 | 示例 |
|----------|----------|----------|----------|------|
| **天启广播** | 全服金光横幅 + 音效 | 全服所有频道 | 10 秒 | 「天启降临！[玩家名] 突破至筑基期，洪荒边境大门已开启！」 |
| **渡劫成功** | 全服通报 + 特效 | 全服世界频道 + 区域频道 | 5 秒 | 「[玩家名] 渡劫成功，晋升为元婴修士！」 |
| **稀有宝物获取** | 全服通报 + 情报入口 | 全服世界频道 | 5 秒 | 「[玩家名] 获取了[宝物名]！」（附「情报购买」按钮，✅68） |
| **拍卖广播** | 频道内嵌卡片 | 世界频道 + 区域频道 | 持续至拍卖结束 | 「[物品名] 正在拍卖，当前出价 [价格]」（附「前往拍卖」按钮） |
| **世界事件** | 区域弹幕 + 小地图标记 | 区域频道 | 事件持续期间 | 「妖潮来袭！[区域名] 正在遭受妖兽入侵！」 |
| **帮派通知** | 帮派频道内嵌通知 | 帮派频道 | 持续至事件结束 | 「帮派领地竞标已开始，当前最高出价 [金额]」 |
| **祖地追杀令** | 种族频道高亮公告 | 种族频道（同层） | 24 游戏小时 | 「[入侵者名] 闯入[种族]祖地，追杀令已发布！」（✅61） |
| **维护公告** | 全服横幅 + 邮件 | 全服 | 持续至维护开始 | 「服务器将于 [时间] 进行维护，预计 [时长]」 |

### 7.2 系统消息样式规范

#### 7.2.1 天启广播

```
[系统] 天启降临！
[玩家名]（[种族]·[境界]）突破至[新境界]，[世界名称]的大门已向所有修士敞开！
—— 天道昭昭，大道无穷 ——
```

- 客户端渲染：金色渐变横幅，从屏幕顶部滑入，停留 10 秒后淡出
- 音效：钟鸣音效（低沉庄严）
- 频率限制：同一玩家 24 小时内仅触发 1 次天启广播

#### 7.2.2 渡劫成功通报

```
[系统] 天劫已渡！
[玩家名]（[种族]·[境界]）成功渡过[天劫名]，修为大涨，晋升[新境界]！
```

- 客户端渲染：雷电特效横幅，停留 5 秒
- 音效：雷鸣音效
- 频率限制：大境界突破触发，小境界突破不触发

#### 7.2.3 拍卖广播

```
[拍卖] [物品名]（[品阶]·[品质]）
当前出价：[价格] [货币类型]
剩余时间：[时长]
[前往竞拍]
```

- 客户端渲染：频道内嵌卡片，带「前往竞拍」按钮
- 频率限制：同一物品每 30 分钟广播 1 次

#### 7.2.4 祖地追杀令

```
[追杀令] [种族]祖地告急！
入侵者：[玩家名]（[种族]·[境界]）
位置：[区域名]·[坐标范围]
悬赏：[赏金金额] [货币类型]
[接取追杀令] （限 [N] 人）
```

- 客户端渲染：红色高亮公告，带「接取追杀令」按钮
- 限制：接取人数上限按区域承载动态调整

### 7.3 系统消息发送规则

| 规则 | 说明 |
|------|------|
| 不可屏蔽 | 系统消息不可被个人屏蔽（但可设置通知级别为「仅重要」） |
| 不可举报 | 系统消息不可被举报 |
| 不可回复 | 系统消息不可直接回复 |
| 带操作按钮 | 部分系统消息可携带操作按钮（情报购买、前往竞拍、接取追杀令等） |
| 多语言 | 系统消息根据客户端语言设置自动切换语言版本 |

---

## 第八章 聊天记录存储

### 8.1 存储架构

| 存储层 | 技术方案 | 保留时长 | 用途 |
|--------|----------|----------|------|
| **客户端本地** | SQLite / IndexedDB | 最近 200 条/频道 | 离线查看、快速加载 |
| **服务端缓存** | Valkey（Sorted Set） | 最近 1000 条/频道 | 实时消息分发、历史回溯 |
| **服务端持久化** | PostgreSQL（chat_messages 表） | 7 天 | 审计、举报复核、数据恢复 |

### 8.2 过期清理策略

| 维度 | 策略 |
|------|------|
| 客户端本地 | 超过 200 条自动清除最旧消息；频道 30 天无活动自动清除本地缓存 |
| Valkey 缓存 | 超过 1000 条自动淘汰最旧消息（LRU）；频道 7 天无活动自动清除 |
| PostgreSQL | 7 天前的消息由定时任务（pg_cron）批量归档到冷存储（可选），主表删除 |
| 特殊消息 | 系统广播消息保留 30 天（用于运营分析）；举报相关消息保留至举报处理完毕 |

### 8.3 数据库表设计（chat_messages）

| 字段 | 类型 | 约束 | 说明 |
|------|------|------|------|
| id | uuid | PK | 消息唯一 ID |
| channel_type | varchar(16) | IX | REGION / FACTION / WORLD / GUILD / SECT / FAMILY / TEAM / WHISPER / VOICE_SCROLL |
| channel_id | varchar(64) | IX | 频道标识（zone_id / guild_id / target_character_id 等） |
| world_tier | smallint | IX | 发送时的世界层级 |
| sender_id | uuid | FK → characters.id, IX | 发送者角色 ID |
| msg_type | varchar(16) | IX | TEXT / EMOJI / SYSTEM / BATTLE_REPORT / ITEM_LINK / LOCATION |
| content | text | | 消息文本内容 |
| extra_data | jsonb | | 扩展数据（物品链接属性、战报 ID、位置坐标等） |
| is_muted | boolean | | 是否被过滤/折叠 |
| created_at | timestamptz | IX | 发送时间 |

**索引策略**：
- `(channel_type, channel_id, created_at DESC)` — 频道历史查询
- `(sender_id, created_at DESC)` — 玩家发言记录
- `created_at` — 过期清理（BRIN 索引）

**分区策略**：按 `created_at` 使用 pg_partman 按周分区，自动清理 7 周前的分区。

### 8.4 Valkey 缓存结构

```
# 频道消息缓存（Sorted Set）
chat:{channel_type}:{channel_id} → Sorted Set<timestamp, msg_json>

# 玩家未读消息计数
chat:unread:{character_id} → Hash<channel_key, unread_count>

# 玩家屏蔽列表
chat:blocklist:{character_id} → Set<blocked_character_id>
```

---

## 第九章 聊天与社交的联动

### 9.1 从聊天发起社交操作

聊天消息支持携带操作元数据，玩家点击消息中的操作按钮可直接发起社交交互：

| 操作 | 触发方式 | 前置条件 | 效果 |
|------|----------|----------|------|
| **组队邀请** | 点击消息中的「邀请组队」按钮 | 发送者有队伍且未满员；目标未在其他队伍 | 向目标发送组队邀请弹窗 |
| **交易请求** | 点击消息中的「发起交易」按钮 | 双方在同一区域；双方均非战斗状态 | 向目标发送交易请求弹窗 |
| **好友申请** | 点击消息中的「加为好友」按钮 | 双方不在对方屏蔽列表 | 向目标发送好友申请 |
| **师徒邀请** | 点击消息中的「收徒/拜师」按钮 | 满足师徒系统条件（GDD-16 §1.2） | 向目标发送师徒邀请 |
| **位置导航** | 点击位置分享中的「前往」按钮 | 双方在同一世界层级 | 在小地图标记目标位置 |

### 9.2 社交操作消息格式

```
# 组队邀请消息
[队伍] [玩家名] 邀请你加入队伍
队伍人数：3/5
目标：[副本名 / 游历]
[接受] [拒绝]

# 交易请求消息
[交易] [玩家名] 请求与你交易
[接受] [拒绝]

# 好友申请消息
[社交] [玩家名] 请求加你为好友
[同意] [拒绝]

# 师徒邀请消息
[师徒] [玩家名]（[境界]）邀请你成为其弟子
[同意] [拒绝]
```

### 9.3 社交操作频率限制

| 操作 | 频率限制 | 说明 |
|------|----------|------|
| 组队邀请 | 同一目标每 5 分钟 1 次 | 防骚扰 |
| 交易请求 | 同一目标每 10 分钟 1 次 | 防骚扰 |
| 好友申请 | 每日最多 20 个 | 防刷好友 |
| 师徒邀请 | 每日最多 5 个 | 精准收徒 |

### 9.4 聊天与声望系统联动

| 联动点 | 说明 |
|--------|------|
| 交易好评 | 通过聊天发起的交易完成后，双方可互评（接 GDD-16 ✅S05 声望系统） |
| 师徒评价 | 师徒关系解除后，双方可互评师父/徒弟质量 |
| 举报扣分 | 恶意举报被驳回，举报者声望 -5 |
| 帮派贡献 | 帮派频道内的活跃发言可累计微量帮派贡献（每日上限 10 点） |

---

## 第十章 数据模型与接口

### 10.1 数据库表总览

| 表名 | 用途 | 关联 |
|------|------|------|
| `chat_messages` | 聊天消息持久化 | §8.3 |
| `chat_channels` | 频道配置（帮派/门派/家族频道的创建与管理） | 自动创建 |
| `chat_block_list` | 玩家屏蔽列表 | FK → characters.id |
| `chat_mute_records` | 禁言记录 | FK → characters.id |
| `chat_report_records` | 举报记录 | FK → characters.id |
| `chat_voice_scroll_usage` | 传音符使用记录 | FK → characters.id + items.id |

### 10.2 chat_channels 表

| 字段 | 类型 | 约束 | 说明 |
|------|------|------|------|
| id | uuid | PK | 频道 ID |
| channel_type | varchar(16) | IX | GUILD / SECT / FAMILY / TEAM |
| owner_id | uuid | IX | 所属组织 ID（guild_id / sect_id / family_id） |
| name | varchar(64) | | 频道名称 |
| config | jsonb | | 频道配置（禁言列表、发言权限等） |
| created_at | timestamptz | | |
| dissolved_at | timestamptz | | 组织解散时标记 |

### 10.3 chat_block_list 表

| 字段 | 类型 | 约束 | 说明 |
|------|------|------|------|
| id | uuid | PK | |
| character_id | uuid | FK → characters.id, IX | 屏蔽者 |
| blocked_id | uuid | FK → characters.id, IX | 被屏蔽者 |
| reason | varchar(64) | | 屏蔽原因（可选） |
| created_at | timestamptz | | |

**唯一约束**：`(character_id, blocked_id)`

### 10.4 chat_mute_records 表

| 字段 | 类型 | 约束 | 说明 |
|------|------|------|------|
| id | uuid | PK | |
| character_id | uuid | FK → characters.id, IX | 被禁言者 |
| channel_type | varchar(16) | | 禁言频道类型（NULL = 全频道禁言） |
| reason | varchar(128) | | 禁言原因 |
| mute_type | varchar(16) | | AUTO（自动禁言）/ GM（管理员禁言）/ REPORT（举报禁言） |
| mute_until | timestamptz | IX | 禁言截止时间 |
| created_at | timestamptz | | |

### 10.5 chat_report_records 表

| 字段 | 类型 | 约束 | 说明 |
|------|------|------|------|
| id | uuid | PK | |
| reporter_id | uuid | FK → characters.id, IX | 举报者 |
| target_id | uuid | FK → characters.id, IX | 被举报者 |
| message_id | uuid | FK → chat_messages.id | 被举报消息 ID |
| reason | varchar(32) | | ABUSE / SPAM / FRAUD / HARASSMENT / OTHER |
| status | varchar(16) | IX | PENDING / APPROVED / REJECTED |
| resolved_at | timestamptz | | 处理时间 |
| created_at | timestamptz | | |

### 10.6 核心接口（TDD-05 扩展）

| 接口 | 方法 | 路径 | 说明 |
|------|------|------|------|
| 发送消息 | WebSocket | `nakama.rt.chat.send` | 通过 Nakama 实时连接发送 |
| 接收消息 | WebSocket | `nakama.rt.chat.receive` | 通过 Nakama 实时连接接收 |
| 获取历史消息 | GET | `/api/v1/chat/history` | 分页获取频道历史消息 |
| 屏蔽玩家 | POST | `/api/v1/chat/block` | 添加屏蔽 |
| 解除屏蔽 | DELETE | `/api/v1/chat/block/{id}` | 解除屏蔽 |
| 举报消息 | POST | `/api/v1/chat/report` | 举报消息 |
| 获取屏蔽列表 | GET | `/api/v1/chat/blocklist` | 获取个人屏蔽列表 |
| 频道配置 | PUT | `/api/v1/chat/channel/{id}/config` | 修改频道配置（帮主/族长） |

### 10.7 Nakama 实时消息协议

基于 Nakama 3.x 的实时消息系统（WebSocket）：

```protobuf
// 聊天消息（客户端 → 服务端）
message ChatSend {
  string channel_type = 1;  // REGION / WHISPER / ...
  string channel_id = 2;    // zone_id / target_character_id
  string msg_type = 3;      // TEXT / EMOJI / ...
  string content = 4;
  bytes extra_data = 5;     // Protobuf serialized extra data
}

// 聊天消息（服务端 → 客户端）
message ChatReceive {
  string msg_id = 1;
  string channel_type = 2;
  string channel_id = 3;
  ChatSender sender = 4;
  string msg_type = 5;
  string content = 6;
  bytes extra_data = 7;
  int64 timestamp = 8;
}

message ChatSender {
  string character_id = 1;
  string name = 2;
  string race_id = 3;
  int32 realm_tier = 4;
  string title = 5;
  string guild_name = 6;
}
```

---

## 第十A章 邮件/信件系统

> **定位**：邮件系统是聊天系统的补充，提供**异步通信**能力。离线玩家可通过邮件接收物品、货币、系统通知等。

### 10A.1 邮件类型

| 类型 | 来源 | 说明 |
|------|------|------|
| **系统邮件** | 系统自动发送 | 活动奖励、补偿、公告、拍卖成交通知 |
| **玩家邮件** | 玩家手动发送 | 问候、交易、邀请（需消耗邮票道具） |
| **帮派/门派邮件** | 组织管理发送 | 帮派公告、门派通知 |
| **交易邮件** | 交易系统自动发送 | 交易行售出物品、拍卖获得物品 |

### 10A.2 邮件功能

| 功能 | 说明 |
|------|------|
| **发送邮件** | 玩家可向其他玩家发送邮件，需消耗「邮票」道具 |
| **接收邮件** | 离线期间的邮件在上线时统一展示 |
| **附件系统** | 邮件可附带物品和货币（最多6格附件） |
| **领取附件** | 收件人可领取附件中的物品和货币 |
| **批量操作** | 支持批量删除、批量领取附件 |
| **过期清理** | 邮件保留30天，过期自动删除（附件一并删除） |

### 10A.3 邮件限制

| 限制 | 说明 |
|------|------|
| **发送冷却** | 每日最多发送20封玩家邮件 |
| **附件限制** | 每封邮件最多6格附件（物品或货币） |
| **邮票消耗** | 发送玩家邮件需消耗「邮票」道具（生活技能制作或商店购买） |
| **系统邮件** | 系统邮件无需邮票，自动发送 |
| **防滥用** | 新角色24小时内不可发送邮件（防工作室） |

### 10A.4 邮件数据模型

```sql
CREATE TABLE mails (
    id              uuid PRIMARY KEY DEFAULT gen_random_uuid(),
    sender_id       uuid REFERENCES characters(id),      -- 发送者（系统邮件为NULL）
    receiver_id     uuid NOT NULL REFERENCES characters(id), -- 接收者
    mail_type       varchar(16) NOT NULL,                -- SYSTEM/PLAYER/GUILD/TRADE
    subject         varchar(128) NOT NULL,               -- 主题
    content         text,                                -- 内容
    attachments     jsonb DEFAULT '[]',                  -- 附件（物品/货币）
    is_read         boolean DEFAULT false,               -- 已读状态
    is_collected    boolean DEFAULT false,               -- 附件已领取
    expires_at      timestamptz NOT NULL,                -- 过期时间
    created_at      timestamptz DEFAULT now()
);

CREATE INDEX idx_mails_receiver ON mails(receiver_id, is_read, created_at DESC);
CREATE INDEX idx_mails_expires ON mails(expires_at) WHERE NOT is_collected;
```

### 10A.5 邮件与各系统的联动

| 系统 | 联动方式 |
|------|----------|
| **交易行** | 售出物品后，系统邮件发送货币收入 |
| **拍卖行** | 拍得物品后，系统邮件发送物品 |
| **佣兵系统** | 委托完成后，系统邮件发送报酬 |
| **帮派系统** | 帮派公告通过帮派邮件发送 |
| **活动系统** | 活动奖励通过系统邮件发放 |
| **补偿系统** | 维护补偿、BUG修复补偿通过系统邮件发放 |

---

## 第十一章 已确认决策记录表

| 编号 | 决策 | 关联 |
|------|------|------|
| ✅C01 | 频道七层架构（9 类通信通道） | GDD-02 ✅46、GDD-16 ✅S09 |
| ✅C02 | 世界层级与频道映射（区域频道按 world_tier 隔离） | GDD-08 ✅D07 |
| ✅C03 | 消息类型六类（文字/表情/系统广播/战报分享/物品链接/位置分享） | — |
| ✅C04 | 敏感词三级过滤（L1 实时拦截 + L2 延迟审核 + L3 人工复核） | — |
| ✅C05 | 刷屏防护四件套（频率限制 + 自动禁言 + 举报机制 + 新人静默期） | — |
| ✅C06 | 屏蔽/黑名单双轨（个人屏蔽 + 帮派/组织黑名单） | — |
| ✅C07 | 系统消息差异化呈现（天启金光横幅/拍卖卡片/区域弹幕/渡劫特效） | GDD-02 ✅46、GDD-14 ✅68 |
| ✅C08 | 聊天记录存储（本地 200 条 + Valkey 1000 条 + PG 7 天） | TDD-04 |
| ✅C09 | 聊天社交联动（从消息发起组队/交易/好友/师徒邀请） | GDD-16 社交关系链 |
| ✅C10 | 表情系统（基础免费 + 高阶成就/商城获取） | GDD-16 ✅S09 |
| ✅C11 | 称号展示（消息携带称号前缀，可切换/隐藏） | GDD-16 ✅S09 |
| ✅C12 | 传音符跨层规则（消耗随层级差距递增：1/3/5/8 张） | GDD-08 ✅D15 |

---

## 第十二章 验收标准

### 12.1 功能验收

| 编号 | 验收项 | 验收标准 |
|------|--------|----------|
| AC-01 | 频道创建 | 帮派/门派/家族创建时自动创建对应频道；队伍创建时自动创建队伍频道 |
| AC-02 | 频道消息发送 | 所有 9 类频道均可正常发送和接收文字消息 |
| AC-03 | 频道隔离 | 区域频道仅同层同区域可见；种族频道仅同族同层可见 |
| AC-04 | 跨层传音 | 使用传音符可跨层发送私聊消息，消耗数量按层级差距递增 |
| AC-05 | 消息类型 | 6 种消息类型均可正常发送、接收、展示 |
| AC-06 | 敏感词过滤 | L1 敏感词实时拦截，L2 异步审核标记折叠 |
| AC-07 | 频率限制 | 超过频率限制时提示「发言过快」并阻止发送 |
| AC-08 | 自动禁言 | 连续刷屏触发自动禁言，禁言期间不可发言 |
| AC-09 | 举报 | 举报消息正常提交，处理结果通过邮件通知 |
| AC-10 | 个人屏蔽 | 屏蔽后对方消息不可见，对方无感 |
| AC-11 | 系统广播 | 天启/渡劫/拍卖/世界事件等系统消息差异化呈现 |
| AC-12 | 聊天记录 | 本地缓存 + 服务端历史正常工作，7 天后自动清理 |
| AC-13 | 社交联动 | 从聊天消息可直接发起组队/交易/好友/师徒邀请 |
| AC-14 | 表情发送 | 基础表情正常发送和展示 |
| AC-15 | 称号展示 | 聊天消息携带称号前缀，可切换/隐藏 |

### 12.2 性能验收

| 编号 | 验收项 | 验收标准 |
|------|--------|----------|
| PERF-01 | 消息延迟 | 同层消息端到端延迟 ≤ 200ms（P99） |
| PERF-02 | 跨层消息延迟 | 传音符跨层消息延迟 ≤ 500ms（P99） |
| PERF-03 | 并发消息 | 单频道支持 1000+ 并发消息/秒 |
| PERF-04 | 历史消息加载 | 加载最近 200 条历史消息 ≤ 1 秒 |
| PERF-05 | 敏感词过滤 | L1 过滤延迟 ≤ 50ms（P99） |

### 12.3 安全验收

| 编号 | 验收项 | 验收标准 |
|------|--------|----------|
| SEC-01 | XSS 防护 | 所有消息内容在客户端渲染时转义，不执行脚本 |
| SEC-02 | 消息伪造 | 消息发送必须经过服务端鉴权，不可客户端伪造 |
| SEC-03 | 频率绕过 | 频率限制在服务端执行，客户端不可绕过 |
| SEC-04 | 屏蔽绕过 | 屏蔽列表在服务端校验，被屏蔽者消息不推送到屏蔽者 |
| SEC-05 | 数据脱敏 | 举报记录中的消息内容脱敏存储（仅保留前后各 20 字符） |

---

## 第十三章 与核心系统的接口

| 系统 | 接口点 |
|------|--------|
| GDD-02 ✅46 | 本文是「区域聊天与广播系统」的完整落地 |
| GDD-02 ✅97 | 聊天系统是「玩家互动优先」的基础设施 |
| GDD-07 四组织 | 帮派/门派/家族频道直接对接组织系统 |
| GDD-08 ✅D07 | 区域频道按世界层级隔离 |
| GDD-08 ✅D17 | 「附近的人」在区域频道中展示 |
| GDD-09 ✅60-62 | 祖地追杀令/入侵通报通过种族频道广播 |
| GDD-13 佣兵悬赏 | 帮派频道播报佣兵委托状态 |
| GDD-14 拍卖/✅68 | 拍卖广播 + 情报购买入口通过世界频道推送 |
| GDD-16 ✅S09 | 本文在 ✅S09 基础上扩展深化 |
| GDD-16 社交关系链 | 聊天社交联动（师徒/道侣/结义邀请） |
| GDD-23 能量体系 | 传音符消耗不影响能量（纯道具消耗） |
| TDD-04 数据库 | chat_messages / chat_channels / chat_block_list 等表 |
| TDD-05 API | 聊天相关 RESTful + WebSocket 接口 |

---

## 第十四章 待设计内容

- [ ] 表情包完整列表（基础 30 个 + 种族专属表情各 3-5 个）
- [ ] 敏感词库初始版本（与运营团队协作）
- [ ] 举报审核后台界面设计（运营工具）
- [ ] 聊天频道 UI/UX 原型（客户端设计）
- [ ] 传音符道具详细数值（制作材料/商城价格/掉落概率，接 GDD-06 经济联调）
- [ ] 跨服聊天方案（若后续支持多服，需评估跨服频道架构）

---

*GDD-29 v1.0 | 2026-07-02 | 初始版本：基于 GDD-16 ✅S09 扩展深化聊天与信息传递系统，覆盖频道层级、消息类型、安全防护、存储策略、社交联动五大模块 | 前序：GDD-16 v1.6 社交系统*

*GDD-29 v1.1 | 2026-07-06 | 层级命名统一：§频道权限表/天启广播示例"凡界/灵界/道界/圣界/神域"改为"出生地/洪荒边境/太古秘境/混沌之渊/界域" | 前序：v1.0*
