使用discord.py的on_raw_reaction_add触发TypeError错误求助
解决Discord.py
on_raw_reaction_add 中的角色添加错误 问题原因
你遇到的TypeError是因为不能直接通过discord.User(payload.user_id)实例化用户对象。Discord.py的User类构造函数不需要传入ID参数,而且add_roles()方法需要的是Member(服务器成员)对象——只有服务器成员才具备角色属性,全局User对象无法执行角色操作。
修复方案
通过服务器对象获取成员实例,再调用add_roles()方法:
修改后的完整代码:
@Client.event async def on_raw_reaction_add(payload): if payload.user_id == Client.user.id: return if str(payload.emoji) == "🍪" and payload.channel_id == 1078702317386524170: guild = Client.get_guild(1075533700804530239) role = guild.get_role(1078715150363795417) # 替换原错误代码,通过服务器获取成员对象 member = await guild.fetch_member(payload.user_id) await member.add_roles(role)
补充说明
guild.fetch_member()会从Discord API拉取最新成员数据,能规避机器人重启后缓存缺失的问题,确保正确找到目标用户。- 若要处理用户已退出服务器的极端情况,可添加判断逻辑:
if member: await member.add_roles(role)
内容的提问来源于stack exchange,提问作者Tousend1000
相关产品推荐
相关产品推荐

