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

使用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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 09:13:12