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

Discord机器人开发求助:添加Verified角色时遇参数错误

解决Discord机器人get()函数报错问题

错误原因

你遇到的TypeError: get() got an unexpected keyword argument 'id',核心问题在于:

  1. 未正确导入discord.py提供的get工具函数,或错误使用了get()的调用方式
  2. on_raw_reaction_add事件的payload.member可能为空,部分成员、角色的获取写法不符合discord.py规范

修正后的代码

from discord.utils import get
# 必须导入discord官方的工具函数get

@client.event
async def on_raw_reaction_add(payload):
    guild = client.get_guild(payload.guild_id)
    # 用guild内置方法获取成员,比get函数更可靠
    member = guild.get_member(payload.user_id)
    if not member:
        # 成员不在缓存时,从API拉取数据
        member = await guild.fetch_member(payload.user_id)
    
    # 限定仅指定频道触发逻辑
    if payload.channel_id == 812510632360149066:
        if str(payload.emoji) == "✅":
            # 通过guild内置方法直接按ID获取角色
            role = guild.get_role(1030951866370113599)
        else:
            # 将表情对象转为字符串后匹配角色名
            role = get(guild.roles, name=str(payload.emoji))
        
        if role is not None and member is not None:
            await member.add_roles(role)
            print(f"Added role {role.name} to {member.name}")

关键修改点

  • 导入正确工具函数:从discord.utils导入get,避免误用其他函数导致参数错误
  • 替换成员/角色获取逻辑:
    • 用guild.get_member(payload.user_id)替代get(guild.members, id=payload.user_id),guild内置方法更高效且规避参数问题
    • 用guild.get_role(角色ID)替代get(...),直接按ID获取角色更简洁可靠
  • 处理缓存缺失场景:增加fetch_member逻辑,避免用户不在缓存时member为空
  • 使用可靠变量操作:用获取到的member变量替代payload.member,raw事件中payload.member可能为空
  • 统一字符串匹配:匹配角色名时将payload.emoji转为字符串,避免对象直接匹配失败

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 07:40:20