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

Discord机器人报错:'NoneType' object has no attribute 'add_roles'求助

解决'NoneType' object has no attribute 'add_roles'报错问题

你遇到的报错确实是因为member变量获取失败(返回了None),以下是常见原因和对应的解决办法:

1. 未启用服务器成员意图(Member Intent)

Discord API从v1.5版本开始,需要明确启用服务器成员意图才能正常获取服务器成员数据,否则guild.get_member()会返回None。

  • 操作步骤:
    • 登录Discord开发者平台,进入你的机器人应用页面,切换到「Bot」标签。
    • 在「Privileged Gateway Intents」区域,开启「Server Members Intent」。
    • 修改代码中客户端初始化的部分,添加意图配置:
      intents = discord.Intents.default()
      intents.members = True
      client = discord.Client(intents=intents)
      

2. 缓存未命中,改用API直接获取成员

guild.get_member()是从机器人本地缓存读取数据,如果缓存中没有该用户的信息,就会返回None。这种情况下,改用fetch_member()直接从Discord API拉取数据即可:
修改代码中获取成员的逻辑:

if payload.emoji.name == "🌊" and payload.message_id == 1095071488282992831:
    role = discord.utils.get(guild.roles, id=1094731340383002694)
    try:
        member = await guild.fetch_member(payload.user_id)
        await member.add_roles(role)
    except discord.NotFound:
        print("该用户不在当前服务器中")
    except discord.Forbidden:
        print("机器人没有权限获取成员或添加角色")

3. 机器人缺少必要权限

确保你的机器人在目标服务器中拥有以下权限:

  • 「管理角色」权限:用于给用户添加角色
  • 「服务器成员」权限:用于获取服务器成员信息
    可以在服务器的「设置」→「角色」面板中,给机器人对应的角色分配这些权限。

调试建议

可以在代码中添加打印语句,进一步确认问题:

member = guild.get_member(payload.user_id)
print(f"获取到的member对象:{member}")

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 03:52:38