# 群组管理员移除合同 适用版本:当前开发版。 群组详情页的“踢出管理员”不是通用按用户名踢人接口的别名。它必须通过 `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 审计结果 应作为人工回滚依据。