Есть ли способ включить пробелы в мой аргумент? - PullRequest
0 голосов
/ 06 мая 2019

В моем боре разногласий у меня есть 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, но вместо этого я получаю ошибку "Недопустимый пользователь". Можно ли как-то поддержать пробелы в названии роли? Заранее спасибо!

1 Ответ

1 голос
/ 06 мая 2019

У вас есть несколько вариантов:

  1. Использовать конвертер ролей и требовать упоминания роли:

    async def giverole(ctx, role: discord.Role, member: discord.Member):
    
  2. Требуется, чтобы роль была заключена в кавычки:

    k!giverole "Bot Tester" @user
    
  3. Поменяйте местами два аргумента, чтобы преобразованный пользователь был первым, а потенциально разнесенное имя - в качестве аргумента только для ключевого слова.

    async def giverole(ctx, member: discord.Member, *, rname):
    

Я бы порекомендовал первый вариант, но вы можете попробовать и другие, чтобы увидеть, какой из них вы предпочитаете.

...