Как дать кому-то роль с идентификатором роли?

#python-3.x #discord.py

#python-3.x #discord.py

Вопрос:

Я пытался

     @bot.command(pass_context=True)
    @commands.has_role(764795150424866836)
    async def removerole(ctx, user: discord.Member, role: 763045556200931348):
        await user.remove_roles(role)
 

Но я получаю сообщение об ошибке:

 discord.ext.commands.errors.MissingRequiredArgument: role is a required argument that is missing.
 

Надеюсь, вы сможете мне помочь.

Ответ №1:

Вы должны попытаться переписать свою функцию следующим образом:

 @bot.command(pass_context=True)
@commands.has_role(764795150424866836)
async def removerole(ctx, user: discord.Member, role=763045556200931348):
    role = ctx.guild.get_role(role)
    await user.remove_roles(remove_role)
 

Причина, по которой вы получали эту ошибку, заключается в том, что вы не определяли role переменную заранее. Это делается следующим образом: role=763045556200931348 . Вместо этого вы определяли тип переменной it is ( discord.Member ) , выполняя это: role: 763045556200931348 , что является неправильной реализацией переменной роли.

Комментарии:

1. теперь я получаю сообщение об ошибке: discord.ext.commands.errors. CommandInvokeError: команда вызвала исключение: AttributeError: объект ‘int’ не имеет атрибута ‘id’

2. Какие аргументы вы даете команде, когда вводите ее в чат Discord? Вы упоминаете роль, когда делаете это? Или вы просто не приводите никаких аргументов вообще?

3. я ввожу $(мой префикс)removerole @user

4. Хорошо, попробуйте упомянуть роль после упоминания пользователя.

5. это работает, но это не то, что я хочу. я хочу, чтобы эта команда удаляла только роль с идентификатором, который я ввел

Ответ №2:

Вы используете : in parameters при указании class параметра . Если вы хотите присвоить значение, вы должны использовать = like async def removerole(ctx, user: discord.Member, role=763045556200931348): . Но я думаю, что это не то, что вы хотите. Вы хотите удалить роль у пользователя. Вы можете сделать это, указав роль.

 @bot.command(pass_context=True)
@commands.has_role(764795150424866836)
async def removerole(ctx, user: discord.Member, role: discord.Role):
    if role in user.roles:
        await user.remove_roles(role)
 

При этом вам просто нужно указать, что вы хотите удалить у пользователя.

Но если вы просто хотите ввести идентификатор роли, чтобы удалить роль, вы можете использовать guild.get_role(id) .

 @bot.command(pass_context=True)
@commands.has_role(764795150424866836)
async def removerole(ctx, user: discord.Member, role=763045556200931348):
    remove_role = ctx.guild.get_role(role)
    if remove_role in user.roles:
        await user.remove_roles(remove_role)