Отсутствует разрешение при попытке удалить роль со строковой переменной в качестве аргумента в имени параметра - PullRequest
0 голосов
/ 21 апреля 2020

У меня есть функция, которая удаляет роль у пользователя на определенное время. Он отлично работает с предопределенными именами ролей, такими как:

role_to_remove = discord.utils.get(ctx.guild.roles, name="placeholder")

Но он не работает, когда я устанавливаю роли с помощью команд, которые сохраняют пользовательский ввод в строковую переменную. Вот функция, которая удаляет роли:

role1_name = ''
role2_name = ''
roleDefault_name = ''

@client.command()
@commands.has_role('VIP')
async def deleterole(ctx, member: discord.Member, *, reason=None):
    role_to_remove = roleDefault_name
    for role in member.roles:
        if role == role2_name:
            role_to_remove = discord.utils.get(ctx.guild.roles, name=role2_name)
        elif role == role1_name:
            role_to_remove = discord.utils.get(ctx.guild.roles, name=role1_name)
        else:
            await ctx.send(f"None of the roles specified in config are assigned to {member}")
            role_to_remove = discord.utils.get(ctx.guild.roles, name=roleDefault_name)
    await member.remove_roles(role_to_remove)
    await asyncio.sleep(60.0)
    await member.add_roles(role_to_remove)

Это функции, которые используются для установки имен ролей пользователем:

@client.command()
@commands.has_permissions(administrator=True)
async def set_role1_name(ctx, role1):
    global role1_name
    role1_name = role1

@client.command()
@commands.has_permissions(administrator=True)
async def set_role2_name(ctx, role2):
    global role2_name
    role2_name = role2

@client.command()
@commands.has_permissions(administrator=True)
async def set_role_default(ctx, roledefault):
    global roleDefault_name
    roleDefault_name = roledefault

Когда я использую команду deleteterole, я получаю следующее ошибка (несмотря на то, что бот имеет права администратора):

discord.errors. Запрещено: 403 Запрещено (код ошибки: 50013): Отсутствуют разрешения

1 Ответ

0 голосов
/ 21 апреля 2020

Вы уверены, что на самом деле получаете правильную роль для удаления, а не None?

discord.utils.get возвращает None, если не находит роль с указанным именем и пытается удалить роль, которая не существует, может вызвать 403 Запрещено.

...