mirror of
https://github.com/moeacgx/Telegram-Panel.git
synced 2026-09-07 01:10:02 +08:00
39 lines
2.5 KiB
Markdown
39 lines
2.5 KiB
Markdown
# 群组管理员移除合同
|
||
|
||
适用版本:当前开发版。
|
||
|
||
群组详情页的“踢出管理员”不是通用按用户名踢人接口的别名。它必须通过
|
||
`POST /api/panel/groups/{id}/admins/{userId}/kick` 调用专用服务,并且只对群组生效。
|
||
前端只传本地群组记录 ID 和 Telegram 用户 ID;不得把 Telegram `access_hash`、用户名或
|
||
永久封禁选项暴露为该行内操作的合同。
|
||
|
||
服务端必须先由 `GroupManagementService` 选择执行账号,再由 `IGroupService` 实时读取
|
||
管理员列表和目标用户的 `access_hash`。在任何写入前必须拒绝:
|
||
|
||
- 目标是创建者;
|
||
- 目标已经不是管理员;
|
||
- 目标就是执行账号本人;
|
||
- 无法取得目标的 `access_hash`;
|
||
- 执行账号不是管理员,或在超级群中缺少“添加管理员”和“封禁用户”权限。
|
||
|
||
对基础群组按 `撤销管理员 -> 删除成员` 执行;对超级群按
|
||
`Channels_EditAdmin(空权限) -> Channels_EditBanned(60 秒)` 执行。两步都必须使用已有的
|
||
Telegram 请求超时控制,禁止因第一次请求超时而自动重放整个流程。
|
||
|
||
两步操作不是 Telegram 原子事务。若降权成功、踢出失败,
|
||
`GroupAdminRemovalResult` 必须保留 `AdminRightsRemoved=true`,端点返回 `409` 和明确中文提示;
|
||
前端无论响应成功还是冲突都刷新管理员列表,不能把该状态显示为普通全失败后立即重试。
|
||
|
||
该操作不改变数据库结构,但会同步目标属于本系统账号时的已有群组关联:踢出成功或目标已不在群组时
|
||
删除对应关联;仅降权成功时保留成员关联,并将 `IsCreator`、`IsAdmin` 都更新为 `false`。同步仅更新已
|
||
匹配 Telegram 用户 ID 的关联,不会为外部管理员创建账号或关联记录。
|
||
|
||
验收前提是使用非生产测试群,至少覆盖:创建者没有操作按钮且服务端拒绝、无用户名管理员可被
|
||
成功移除、缺少权限的执行账号被拒绝、成功后管理员列表消失,以及降权后踢出失败时的部分成功
|
||
提示。失败排查先看管理员实时状态和执行账号权限,再检查 Telegram 限流、Session 和代理;不要
|
||
退回到通用 `batch/kick` 接口绕过 `access_hash` 与创建者保护。
|
||
|
||
该功能没有数据库迁移。回滚只会撤回专用端点和界面按钮,无法自动恢复 Telegram 侧已经完成的
|
||
降权或踢出,也不会自动还原已同步的本系统账号群组关联;操作前后的管理员列表和 Telegram 审计结果
|
||
应作为人工回滚依据。
|