mirror of
https://github.com/System-End/Discord-MC-Chat.git
synced 2026-04-19 19:45:14 +00:00
Update README to include account linking commands and clarify OP sync behavior
This commit is contained in:
parent
5905ad5364
commit
8f4675175c
1 changed files with 55 additions and 10 deletions
65
README.md
65
README.md
|
|
@ -27,11 +27,12 @@ Discord-MC-Chat (DMCC) 是一个 Minecraft 模组,旨在为 Discord 和 Minecr
|
|||
|
||||
### 2.3 管理功能
|
||||
|
||||
- 通过 Discord 和游戏内命令查询服务器状态。
|
||||
- 通过 Discord、游戏内命令和终端命令查询服务器状态。
|
||||
- 通过 Discord 执行 Minecraft 控制台命令。
|
||||
- 通过 Discord 查看和过滤(如玩家 IP 地址)服务器日志。
|
||||
- 重载 DMCC 配置文件。
|
||||
- 远程启动/关闭子服务器(仅限多服务器模式)。
|
||||
- 提供账户绑定管理命令(`link` / `unlink` / `links`)并支持跨端协同。
|
||||
|
||||
## 3. 系统架构
|
||||
|
||||
|
|
@ -60,21 +61,33 @@ DMCC 所有运行模式都基于一个统一的通信模型,该模型包含两
|
|||
|
||||
- **一个 Discord 账户可关联多个 Minecraft 账户**(方便玩家管理大号与小号)。
|
||||
- **一个 Minecraft 账户只能关联一个 Discord 账户**(确保游戏内身份的绝对唯一性)。
|
||||
- **数据持久化**: 绑定关系作为永久数据存储在 `Server` 端的 `links.json` 中,以 Discord ID 为主键。
|
||||
- **数据持久化**: 绑定关系作为永久数据存储在 `Server` 端的 `linked_accounts.json` 中,以 Discord ID 为主键。
|
||||
- **存储约束**: `linked_accounts.json` 中仅存储绑定关系最小必要字段(Discord ID、Minecraft UUID、添加时间),**不得额外存储**
|
||||
Discord 用户名或 Minecraft 玩家名;显示名称在查询时实时解析。
|
||||
|
||||
### 4.2 安全绑定工作流 (严格的 MC 优先原则)
|
||||
|
||||
为防止在正版/离线服务器中出现身份冒用,**严禁在 Discord 端直接输入游戏名进行绑定**。
|
||||
|
||||
1. **获取凭证**: 玩家必须成功登入 Minecraft 服务器,输入 `/dmcc link`。Client 向 Server 申请生成一个临时验证码(如 `A7X9P2`
|
||||
,存入内存 Cache,5 分钟有效)。
|
||||
2. **确认所有权**: 玩家前往 Discord,使用斜杠命令 `/link A7X9P2`。
|
||||
3. **完成绑定**: Server 验证代码有效后,将该 Discord ID 与 MC UUID 写入 `links.json`。
|
||||
1. **玩家进服自动检查**: 玩家每次进入 Minecraft 服务器时,Client 检查其 UUID 是否已绑定。
|
||||
2. **自动生成凭证**: 若未绑定,生成一个 6 位临时验证码(如 `A7X9P2`),单发消息指引玩家在 Discord 执行 `/link A7X9P2`,验证码 5 分钟有效。
|
||||
3. **手动刷新凭证**: Minecraft 端提供 `/dmcc link` 命令:
|
||||
- 若该玩家存在未过期验证码,返回同一验证码并将过期时间重置为“当前时间 + 5 分钟”;
|
||||
- 若验证码已过期或不存在,生成并返回新验证码(同样 5 分钟有效)。
|
||||
4. **确认所有权**: 玩家前往 Discord,使用斜杠命令 `/link A7X9P2`。
|
||||
5. **完成绑定**: Server 验证代码有效后,将该 Discord ID 与 MC UUID 写入 `linked_accounts.json`,并使该验证码失效。
|
||||
|
||||
### 4.3 同步与跨平台交互
|
||||
### 4.3 解绑与查询工作流
|
||||
|
||||
- **Discord `/unlink`**: 直接取消该 Discord 用户名下的所有 Minecraft 绑定(无需二次确认)。
|
||||
- **Minecraft `/dmcc unlink`**: 直接取消“当前执行玩家”对应的绑定关系(无需二次确认)。
|
||||
- **查询展示规则**: `links` 查询时实时解析显示名称,若无法解析则回退显示 UUID / Discord ID。
|
||||
|
||||
### 4.4 同步与跨平台交互
|
||||
|
||||
- 玩家在游戏内的聊天名字颜色,将自动同步为其绑定的 Discord 账户的最高角色颜色。
|
||||
- 跨平台提及 (`@`) 时,自动在游戏内通过 Action Bar 或 Title 提醒对应的玩家。
|
||||
- 当启用 OP 同步时,绑定关系将直接影响 Minecraft 原生 OP 权限分配(详见第 5.5 节)。
|
||||
|
||||
## 5. 零信任委托权限系统 (Delegated Authorization)
|
||||
|
||||
|
|
@ -109,7 +122,7 @@ Discord 用户的身份将通过以下规则在 Server 端结算为一个具体
|
|||
|
||||
### 5.4 优雅解决白名单悖论 (Whitelist Catch-22)
|
||||
|
||||
玩家因白名单进不去服务器 -> 无法执行 `/dmcc link` 证明身份 -> 无法获得白名单。
|
||||
玩家因白名单进不去服务器 -> 无法证明身份 -> 无法获得白名单。
|
||||
**解决方案**:
|
||||
|
||||
1. 原生 `/whitelist` 要求 OP 3,存在安全风险。DMCC 在 Client 端提供独立的 `whitelist` 命令,权限配置为 `0` 级。
|
||||
|
|
@ -117,7 +130,35 @@ Discord 用户的身份将通过以下规则在 Server 端结算为一个具体
|
|||
3. 玩家在 Discord 频道执行 `/execute SMP whitelist <他的ID>`。
|
||||
4. 路由将 OP 0 凭证发给 SMP,SMP 校验本地 `whitelist: 0` 通过,底层执行白名单添加。玩家即可进服完成后续绑定。
|
||||
|
||||
## 6. 命令列表与配置参考
|
||||
### 5.5 Minecraft OP 强制同步机制 (`sync_op_level_to_minecraft`)
|
||||
|
||||
`sync_op_level_to_minecraft` 默认关闭(`false`),因为开启后会覆盖服务器原有 OP 分配策略;但推荐在“以 Discord 身份治理权限”为目标的部署中开启。
|
||||
|
||||
开启后行为如下:
|
||||
|
||||
1. **全量同步原则**: 每次同步均执行“全量重算 + 全量应用”,而非增量补丁。
|
||||
2. **强制覆盖原则**: DMCC 将重置 Minecraft 服务器当前 OP 列表,并依据 DMCC 配置中的映射规则重新分配。
|
||||
3. **绑定缺失回退**: 若某玩家解除绑定后在 `linked_accounts.json` 中不再出现,则在下一次全量同步中该玩家 OP 等级将被重置为 0。
|
||||
4. **关闭时不干预**: 若 `sync_op_level_to_minecraft=false`,解绑不触发 OP 回收,服务器维持原样。
|
||||
5. **与原生 `/op` 的关系**: 开启后,管理员在游戏内使用原生命令 `/op` 手动授予的结果会在下一次 DMCC 全量同步时被覆盖,这是预期行为。
|
||||
|
||||
> 说明:由于原生 `/op` 命令无法指定 OP 等级,DMCC 同步通过 API 层直接写入权限等级,而非依赖 `/op` 命令。
|
||||
|
||||
## 6. 多服务器配置模型(Standalone + Multi Server)
|
||||
|
||||
当 DMCC 处于 `standalone + multi_server_client` 架构时,不同子服务器可使用不同 OP 映射策略(例如 SMP 权限低、CMP 权限高)。
|
||||
|
||||
### 6.1 分服映射结构
|
||||
|
||||
在 `standalone` 配置中,`user_mappings` 与 `role_mappings` 使用按服务器拆分的列表结构。
|
||||
|
||||
### 6.2 强校验规则(配置验证阶段执行)
|
||||
|
||||
- `multi_server.servers` 中定义了多少个子服务器,`user_mappings[].servers` 与 `role_mappings[].servers` 就必须为每个子服务器提供一条对应配置。
|
||||
- 不允许缺失、不允许重复、不允许引用不存在的 `server` 名称。
|
||||
- 若校验失败,配置加载应直接失败并输出明确错误,阻止系统在不一致权限模型下启动。
|
||||
|
||||
## 7. 命令列表与配置参考
|
||||
|
||||
| 命令 | 默认 OP 等级 | 模组运行 `multi_server_client` | 模组运行 `single_server` | 独立运行 `standalone` | 说明 |
|
||||
|:-------------------------|:---------|:---------------------------|:---------------------|:------------------|:-------------------------------------|
|
||||
|
|
@ -129,5 +170,9 @@ Discord 用户的身份将通过以下规则在 Server 端结算为一个具体
|
|||
| `shutdown` | `4` | ❌ | ❌ | ✅ | 关闭 Standalone 应用程序。 |
|
||||
| `stats <type> <stat>` | `-1` | ✅ | ✅ | ❌ | 查看统计数据。支持基于权限的自动补全。 |
|
||||
| `whitelist <player>` | `0` | ✅ | ✅ | ❌ | DMCC 专用的白名单命令代理。 |
|
||||
| `link` | `0` | ✅ | ✅ | ❌ | Minecraft 端生成/刷新验证码。 |
|
||||
| `link <code>` | `0` | ❌ | ✅ | ✅ | Discord 端使用验证码完成绑定。 |
|
||||
| `unlink` | `0` | ✅ | ✅ | ✅ | 解绑当前 MC 玩家 / 当前 Discord 用户的所有玩家。 |
|
||||
| `links` | `4` | ❌ | ✅ | ✅ | 查看所有绑定关系。 |
|
||||
|
||||
*(注:游戏内与终端控制台均属于 `LocalCommandSender`,终端默认为最高权限 OP 4,游戏内走原生判定。)*
|
||||
*(注:游戏内与终端控制台均属于 `LocalCommandSender`,终端默认为最高权限 OP 4,游戏内走原生判定。Terminal 不提供 `link`、`unlink`,但在 Standalone 下提供 `links`。)*
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue