#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)