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
相关产品推荐
相关产品推荐

