跳转至

群组管理员移除合同

适用版本:当前开发版。

群组详情页的“踢出管理员”不是通用按用户名踢人接口的别名。它必须通过 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 和明确中文提示; 前端无论响应成功还是冲突都刷新管理员列表,不能把该状态显示为普通全失败后立即重试。

该操作不改变数据库结构,但会同步目标属于本系统账号时的已有群组关联:踢出成功或目标已不在群组时 删除对应关联;仅降权成功时保留成员关联,并将 IsCreatorIsAdmin 都更新为 false。同步仅更新已 匹配 Telegram 用户 ID 的关联,不会为外部管理员创建账号或关联记录。

验收前提是使用非生产测试群,至少覆盖:创建者没有操作按钮且服务端拒绝、无用户名管理员可被 成功移除、缺少权限的执行账号被拒绝、成功后管理员列表消失,以及降权后踢出失败时的部分成功 提示。失败排查先看管理员实时状态和执行账号权限,再检查 Telegram 限流、Session 和代理;不要 退回到通用 batch/kick 接口绕过 access_hash 与创建者保护。

该功能没有数据库迁移。回滚只会撤回专用端点和界面按钮,无法自动恢复 Telegram 侧已经完成的 降权或踢出,也不会自动还原已同步的本系统账号群组关联;操作前后的管理员列表和 Telegram 审计结果 应作为人工回滚依据。