Discord 身份组与权限:为什么你的 Bot 无法分配那个身份组
身份组层级是 Discord 里某些功能不起作用的最常见原因。理解一次,就能为你省下好几个小时的排查时间。

每个服务器所有者迟早都会遇到这种情况:Bot 本该分配一个身份组,却没有分配。Bot 有管理员权限。设置已经保存。可就是什么都没发生。
原因几乎总是同一个,而且和权限无关。
两套系统,而不是一套
Discord 会分两个独立步骤来判断某人能否做某件事:
- **权限。**这个身份组到底能不能管理身份组?
- **位置。**这个身份组的位置是否高到足以操作目标身份组?
大多数人只知道第一步。出问题的是第二步。
一句话说清规则
一个成员,包括 Bot,只能授予和移除位于其自身最高身份组之下的身份组。也只能管理那些最高身份组位于其自身之下的成员。
这一点即使拥有管理员权限也同样适用。管理员权限凌驾于权限之上,但不凌驾于层级之上。一个拥有管理员权限、但身份组排在列表最底部的 Bot,基本上什么也做不了。
一个例子
你的身份组列表从上到下是这样的:
Owner
Administrator
Moderator
AlphaCloud <- the bot's role
Verified
Member
Bot 能做的:
- 授予和移除
Verified和Member - 管理最高身份组为
Verified或Member的成员
Bot 不能做的:
- 授予
Moderator,因为这个身份组在它上面 - 踢出、封禁或改名一位管理员
- 动任何一位 Administrator
如果你想让 Bot 能授予管理员身份组,就必须把它的身份组拖到 Moderator 上面。而不是反过来。
实用建议
**把 Bot 的身份组放在你最高团队身份组的正下方。**像这样:
Owner
Administrator
AlphaCloud <- here
Moderator
Verified
Member
这样 Bot 就能管理管理层以下的一切,却碰不到管理层本身。这几乎总是你想要的效果。
你可以在服务器设置、身份组中通过拖动来调整顺序。
仍然行不通的三种特殊情况
即使层级完美,也有三件事 Discord 永远不允许 Bot 做:
**改名或管理服务器所有者。**所有者不在层级之内。任何身份组和权限都改变不了这一点。
**编辑同一位置的身份组。**同样高度的两个身份组无法互相操作。必须真正在上面,而不是平级。
**授予 @everyone 身份组。**每个人都自动拥有它,无法分配。
频道权限优先于服务器权限
第二常见的情况:按身份组来说 Bot 可以发送消息,却偏偏在某一个频道里发不了。
Discord 允许在每个频道里对服务器权限设置例外。如果某个频道里对 @everyone 或 Bot 的某个身份组明确拒绝了发送消息,那么无论服务器身份组怎么设置,都以它为准。
你可以直接检查:频道设置,权限,然后在顶部的查看权限中选择 Bot。Discord 会准确显示它在这个频道里能做什么。
哪项权限对应什么
如果你不想给 Bot 全部的管理员权限,这是一份实际可行的清单:
| 任务 | 权限 |
|---|---|
| 分配身份组 | 管理身份组 |
| 工单、临时频道 | 管理频道 |
| 删除垃圾消息 | 管理消息 |
| 禁言 | 禁言成员 |
| 移除 | 踢出成员、封禁成员 |
| 移到 AFK 频道 | 移动成员 |
| 给昵称加前缀 | 管理昵称 |
| 知道是谁触发了操作 | 查看审核日志 |
**如果你用的功能很多,管理员权限依然是务实的选择。**不是因为它更安全,而是因为否则每个新功能都会让你去找那一项缺失的权限。无论哪种方式,层级都是更重要的杠杆。
排查问题的简短版本
当某件事不起作用时,按顺序问这四个问题:
- Bot 的身份组是否在相关身份组的上面?
- Bot 的身份组是否在相关成员的上面?
- Bot 在服务器层面是否拥有对应权限?
- 这项权限是否在这个频道里被明确拒绝了?
十有八九是第 1 或第 2 个问题。