如何修复discord.py报错discord.ext.commands.errors.MissingRequiredArgument
问题原因
- 你定义的命令函数要求必须传入
member参数,触发?getroles命令时没有附带任何参数,所以触发缺失必填参数的报错。 - 函数名存在拼写错误:你代码里的函数名为
getoroles(多了一个字母o),和你实际要触发的?getroles命令名称不匹配,就算你传了参数也无法触发对应逻辑。 - 代码使用了discord.py过时API:v1.0及以上版本中
server属性已重命名为guild,client.add_roles方法已改为成员实例的add_roles方法。
修复方案
方案1:无需传参,触发命令直接给本人分配角色
最符合你需求的写法,用户直接输入?getroles就可以给自己加test角色:
@client.command() async def getroles(ctx): # 直接取命令触发者作为分配对象 member = ctx.author # 获取服务器角色 grabtherole = discord.utils.get(ctx.guild.roles, name="test") # 分配角色 await member.add_roles(grabtherole) await ctx.send(f'{ctx.author.display_name} 已获得 {grabtherole.name} 角色')
方案2:支持给自己/其他成员分配角色
如果需要支持给指定用户分配角色,可以给member参数设置默认值,没传参时默认使用触发者本人:
@client.command() async def getroles(ctx, member: discord.Member = None): member = member or ctx.author grabtherole = discord.utils.get(ctx.guild.roles, name="test") await member.add_roles(grabtherole) await ctx.send(f'{member.display_name} 已获得 {grabtherole.name} 角色')
使用时可以直接输入?getroles给自己加角色,也可以输入?getroles @某用户给其他用户加角色。
注意事项
- 机器人必须拥有管理角色权限,且机器人的角色在服务器角色列表中的排序要高于
test角色,否则会出现权限不足无法分配角色的问题。
内容的提问来源于stack exchange,提问作者user14696101
相关产品推荐
相关产品推荐

