Discord机器人开发求助:添加Verified角色时遇参数错误
解决Discord机器人
get()函数报错问题 错误原因
你遇到的TypeError: get() got an unexpected keyword argument 'id',核心问题在于:
- 未正确导入discord.py提供的
get工具函数,或错误使用了get()的调用方式 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
相关产品推荐
相关产品推荐

