在我的不和谐机器人中,我有2个命令来赋予和创建角色。它们工作得很好,但是如果角色名称包含空格,那么我有问题。它将第二个单词计入第二个参数,使命令产生错误。
# Giverole @client.command(name='giverole', aliases=['gr'], brief='Assgins role to a user', pass_ctx=True) async def giverole(ctx, rname, *, member: discord.Member): role = get(member.guild.roles, name=rname) await member.add_roles(role) await ctx.send(f'Role added to user {member.mention}') print('Giverole command executed\n- - -') # Createrole @client.command(name='createrole', brief='Creates a role', aliases=['cr','makerole'], pass_ctx=True) async def createrole(ctx, rname: str, clr: discord.Colour): if ctx.author.guild_permissions.manage_roles: await ctx.guild.create_role(name=rname, colour=clr) await ctx.send('Role created with name: ' + rname) print('Createrole command executed\n- - -') else: await ctx.send('You lack permission.') print('Createrole command executed\n- - -')
理想情况下,我应该能够执行类似的操作k!giverole Bot Tester @user,但会收到“无效用户”错误。我有什么办法可以在角色名称中支持空格?提前致谢!
k!giverole Bot Tester @user
您有几种选择:
使用角色转换器并要求提及角色:
async def giverole(ctx, role: discord.Role, member: discord.Member):
要求角色用引号引起来:
k!giverole "Bot Tester" @user
切换两个参数的位置,以使转换后的用户最先出现,而可能使用空格的名称作为仅关键字参数。
async def giverole(ctx, member: discord.Member, *, rname):
我建议使用第一个选项,但是您可能还想尝试其他选项,以查看您更喜欢哪个选项。