Skip to main content
指南
指南RolesBasics

Discord 身份组与权限:为什么你的 Bot 无法分配那个身份组

身份组层级是 Discord 里某些功能不起作用的最常见原因。理解一次,就能为你省下好几个小时的排查时间。

发布于 作者 AlphaCloud4 分钟阅读

每个服务器所有者迟早都会遇到这种情况:Bot 本该分配一个身份组,却没有分配。Bot 有管理员权限。设置已经保存。可就是什么都没发生。

原因几乎总是同一个,而且和权限无关。

两套系统,而不是一套

Discord 会分两个独立步骤来判断某人能否做某件事:

  1. **权限。**这个身份组到底能不能管理身份组?
  2. **位置。**这个身份组的位置是否高到足以操作目标身份组?

大多数人只知道第一步。出问题的是第二步。

一句话说清规则

一个成员,包括 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 频道 移动成员
给昵称加前缀 管理昵称
知道是谁触发了操作 查看审核日志

**如果你用的功能很多,管理员权限依然是务实的选择。**不是因为它更安全,而是因为否则每个新功能都会让你去找那一项缺失的权限。无论哪种方式,层级都是更重要的杠杆。

排查问题的简短版本

当某件事不起作用时,按顺序问这四个问题:

  1. Bot 的身份组是否在相关身份组的上面?
  2. Bot 的身份组是否在相关成员的上面?
  3. Bot 在服务器层面是否拥有对应权限?
  4. 这项权限是否在这个频道里被明确拒绝了?

十有八九是第 1 或第 2 个问题。

更多文章