You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Discord Bot调用message.channel.send需管理员权限?权限配置排查

Discord Bot发送消息报403权限错误(错误码50013)排查方案

问题背景

使用Python开发Discord Bot时,调用await message.channel.send()或message.reply()均返回403 Forbidden (error code: 50013): Missing Permissions错误,仅当Bot角色设置为管理员时可正常发送消息。已配置除管理员外的所有服务器角色权限,疑惑是否必须管理员权限,或遗漏了某项配置(原以为仅需「发送消息」权限)。

示例代码:

@bot.event
async def on_message(message):
    if message.author == bot.user: # 忽略Bot自身发送的消息
        return

    if message.content.startswith('$hello'):
        await message.channel.send('Hello to you too!')

    if message.content.startswith('$inspire'):
        await message.channel.send(get_quote())

    # 检查是否为用户首次发帖并设置角色
    result=await set_to_prospect_roles_on_first(message)
    if result is not None:
        print ("Sending, "+result)
        try:
            await message.channel.send(result)
        except Exception as e:
            print ("Failed to send response, " + str(e))

排查要点(无需管理员权限,必是权限配置遗漏)

1. 检查频道级权限覆盖

服务器角色权限不等于频道权限,很多时候频道单独设置会覆盖全局:

  • 打开目标频道的「编辑频道」→「权限」
  • 找到Bot的角色,确认以下权限为允许状态,且未被「拒绝」:
    • 查看频道
    • 发送消息
    • (若消息含嵌入内容)发送嵌入链接

2. 确认角色层级优先级

Discord权限按角色层级生效:

  • 若Bot角色层级低于服务器内其他角色,或频道内存在更高层级角色设置了拒绝权限,会覆盖Bot的允许权限
  • 调整Bot角色位置至所有相关角色之上(服务器设置→角色→拖动排序)

3. 检查特殊内容所需权限

如果消息包含以下内容,需额外开启对应权限:

  • 嵌入消息/链接:需「发送嵌入链接」权限
  • 自定义表情:需「使用外部表情」权限(若表情来自其他服务器)
  • @所有人/角色:需「提及所有人」权限

4. 启用必要的网关意图

在Discord开发者门户的Bot设置中,开启以下特权网关意图:

  • Server Members Intent(成员意图)
  • Message Content Intent(消息内容意图)
    注:使用on_message读取消息内容必须开启此项,否则可能导致权限校验异常

5. 排查代码返回内容

确认get_quote()或result返回的内容是否包含需要特殊权限的元素,比如嵌入对象、大文件、受限表情等,这类内容会触发额外权限校验。

内容的提问来源于stack exchange,提问作者Quadgnim

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.26 06:06:29