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

如何让Discord Bot根据命令参数创建指定角色并授予调用者?

如何让Discord Bot根据命令参数创建自定义角色并授予调用者

嘿,我来帮你搞定这个需求!你的现有代码已经能创建固定角色了,咱们只需要做几个小调整,就能让Bot根据你输入的参数创建对应名称的角色,还能自动把这个角色授予发出命令的你。

原代码的局限

你的当前代码里,rolecreate命令没有接收任何参数,所以角色名硬编码成了TEST。要实现自定义名称,首先得让命令能捕获用户输入的角色名参数。

修改后的完整代码

@client.command(pass_context=True)
async def rolecreate(ctx, *role_name_parts):
    # 把多个参数拼接成完整的角色名(支持带空格的名称,比如!rolecreate My Cool Role)
    role_name = ' '.join(role_name_parts)
    author = ctx.message.author
    server = ctx.message.guild  # 注意:新版本discord.py里用guild代替了旧版的server

    # 创建指定名称的蓝色角色
    new_role = await server.create_role(name=role_name, colour=discord.Colour(0x0000FF))
    
    # 把创建好的角色授予命令调用者
    await author.add_roles(new_role)
    
    # 可选:给用户发送确认消息
    await ctx.send(f"已成功创建角色「{role_name}」并授予你!")

关键修改点说明

  • 添加参数支持:把函数定义改成async def rolecreate(ctx, *role_name_parts):,*表示接收任意数量的参数,这样用户输入带空格的角色名(比如!rolecreate My Test Role)也能正常识别,之后用' '.join(role_name_parts)把这些参数拼接成完整的角色名。
  • 替换硬编码的角色名:把name='TEST'改成name=role_name,这样就会用用户输入的名称创建角色。
  • 添加角色授予逻辑:创建角色后用await author.add_roles(new_role)把新角色添加给命令的调用者,记得要先保存create_role返回的角色对象。
  • 适配新版本discord.py:如果你的discord.py是较新版本,author.server已经被弃用,改用ctx.message.guild来获取服务器对象。

注意事项

  • 确保你的Bot在服务器里拥有创建角色和管理角色的权限,否则会报错。
  • 如果想限制只有特定权限的用户才能使用这个命令,可以添加权限检查装饰器:
    @commands.has_permissions(manage_roles=True)
    
    把它加在@client.command装饰器的下面即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 09:35:43