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

discord.py机器人无法给持有指定角色的多个用户发送私信问题求助

问题排查与修复方案

1. 启用成员网关意图(90%以上是该原因导致)

discord.py v2.0及以上版本默认不获取服务器完整成员列表,需要在两处开启成员权限:

  • 进入Discord开发者后台的对应机器人设置页,找到「Privileged Gateway Intents」板块,打开Server Members Intent开关
  • 在代码初始化client的位置添加意图配置,示例:
intents = discord.Intents.default()
intents.members = True # 开启成员获取权限
client = discord.Client(intents=intents)
# 如果使用commands.Bot,写法为:
# bot = commands.Bot(command_prefix='你的指令前缀', intents=intents)

2. 补充容错逻辑与异常捕获

原代码无错误处理逻辑,角色不存在、私信被拒等问题都不会输出报错,修改后的代码如下:

@client.command()
async def eventsoon(ctx):
    # 先校验角色是否存在
    role = discord.utils.get(ctx.guild.roles, name='Golden God')
    if not role:
        await ctx.send("未找到Golden God角色")
        return
    success_count = 0
    fail_count = 0
    # 直接遍历角色绑定的成员列表,不需要遍历全服成员再判断,效率更高
    for member in role.members:
        try:
            await member.send("ur mom")
            success_count += 1
        except discord.Forbidden:
            # 触发场景:用户拒收服务器私信、拉黑机器人、机器人无私信发送权限
            fail_count += 1
        except Exception as e:
            print(f"给成员{member.name}发信失败,错误信息:{e}")
            fail_count += 1
    await ctx.send(f"私信发送完成:成功{success_count}人,失败{fail_count}人")

3. 其他排查点

  • 确认输入的指令和设置的前缀匹配,比如前缀设置为!时,需要输入!eventsoon才能触发指令
  • 确认Golden God角色名的大小写、空格和服务器内实际配置完全一致,discord角色名匹配为大小写敏感
  • 确认目标用户没有关闭「允许来自服务器成员的私信」设置

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 10:06:03