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

拥有有效权限时Discord API发送DM返回403错误的排查求助

Discord机器人在客户服务器发DM全返回403的排查方案

核心背景

开发的PyCord机器人(Python3.11)在测试服可正常给指定角色用户发DM,仅用户关闭DM时返回403;但部署到客户服务器后,所有DM请求均返回403 - Invalid Permissions。机器人已拥有管理员权限,角色优先级仅次于服务器所有者,且已确认intents配置正确、目标用户DM功能开启、代码与测试服一致。

排查与解决步骤

1. 检查服务器隐私安全设置

客户服务器可能开启了限制成员私信的全局设置:

  • 进入客户服务器设置 → 「隐私与安全」
  • 确认「允许来自服务器成员的直接消息」选项处于开启状态
  • 若服务器为社区服务器,需额外检查社区专属的隐私限制,部分社区设置会强制禁止非好友的跨服务器私信

2. 重新验证Intents配置

即使已检查过,仍需双重确认:

  • 在Discord开发者平台的Bot页面,确保「Server Members Intent」已启用
  • 代码中正确初始化Intents:
    intents = discord.Intents.default()
    intents.members = True  # 必须启用才能获取完整成员列表
    bot = discord.Bot(intents=intents)
    
    注意:若未启用members intent,ctx.guild.members可能仅返回机器人自己,导致发DM时触发权限错误。

3. 确认角色匹配逻辑的正确性

代码中roles = [role, role2, role3]的角色对象获取方式可能存在问题:

  • 检查role、role2、role3是否通过服务器正确获取(如ctx.guild.get_role(角色ID)),避免使用测试服的硬编码角色ID
  • 临时添加日志,确认遍历的成员是否为目标角色用户:
    for member in ctx.guild.members:
        if any(item in roles for item in member.roles):
            print(f"Attempting to DM member: {member.name} ({member.id})")
            # 后续发DM代码
    
    若输出的成员包含机器人自身,发DM时会触发403,需添加排除逻辑:if member != bot.user:

4. 细化异常捕获,定位具体错误

当前代码except:捕获所有异常,无法得知具体错误类型,修改为:

try:
    await member.send(embed=embed)
    successes += 1
except discord.Forbidden:
    failures += 1
    print(f"Forbidden to DM {member.name} ({member.id}) - 可能用户设置仅好友可发DM,或服务器限制")
except discord.HTTPException as e:
    failures += 1
    print(f"HTTP Error sending to {member.name} ({member.id}): {str(e)}")
except Exception as e:
    failures += 1
    print(f"Unexpected error: {str(e)}")

通过日志可明确是用户层面的限制,还是服务器/机器人的权限问题。

5. 检查机器人账户状态

  • 确认机器人账户未被Discord标记为垃圾账号:若机器人短时间内发送大量DM,可能触发自动限制,需暂停发送并等待一段时间
  • 若为新创建的机器人,需确认已完成开发者平台的基础验证(部分新机器人会有初始发送限制)

6. 验证用户隐私设置

即使用户确认开启DM,仍需检查部分细节:

  • 用户是否设置了「仅好友可以给我发送直接消息」,而机器人未添加用户为好友
  • 用户是否在「隐私设置」中屏蔽了该机器人账户

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 09:37:47