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

如何修复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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 11:57:02