У меня проблема: я пытаюсь удалить все роли пользователя для какой-то немой роли, но выдает эту ошибку discord.ext.commands.errors.CommandInvokeError: Command raised an exception: NotFound: 404 Not Found (error code: 10011): Unknown Role
Вот мой код
@client.command(aliases=['m'])
@commands.has_permissions(kick_members = True)
async def mute(ctx,member : discord.Member):
muteRole = ctx.guild.get_role(728203394673672333)
for i in member.roles:
await member.remove_roles(i)
await member.add_roles(muteRole)
await ctx.channel.purge(limit = 1)
await ctx.send(str(member)+' has been muted!')
Я знаю, что такой вопрос уже задавался здесь: Как удалить все роли сразу (Discord.py 1.4.1). Но на него не ответили и совсем мне не помогли
переменная muteRole не влияет на цикл, который используется для добавления, а не удаления, и она работала до того, как я добавил for i in member.roles: await member.remove_roles(i)
цикл
Согласно здесь. Вы можете использовать await member.remove_roles(member.roles)
, чтобы удалить все роли пользователя. Может быть, вы можете попробовать это.
Проблема в том, что у всех пользователей есть «невидимая роль», @everyone
. Вы увидите, как это появится, если вы попробуете
for i in member.roles:
print(i)
remove_roles
— это функция высокого уровня, и она попытается удалить @everyone
, которая вызывает вашу ошибку.
Чтобы очистить все текущие роли от пользователя, вы можете сделать:
@client.command(aliases=['m'])
@commands.has_permissions(kick_members = True)
async def mute(ctx, member : discord.Member):
muteRole = ctx.guild.get_role(775449115022589982)
await member.edit(roles=[muteRole]) # Replaces all current roles with roles in list
await ctx.channel.purge(limit = 1)
await ctx.send(str(member)+' has been muted!')
await member.edit(roles=[])
Заменяет все текущие роли ролями, которые есть у вас в списке. Оставьте список пустым, чтобы удалить все роли пользователя.
Хотя, если вы хотите сделать это с помощью for loop
, вы можете использовать try
@client.command(aliases=['m'])
@commands.has_permissions(kick_members = True)
async def mute(ctx, member : discord.Member):
muteRole = ctx.guild.get_role(775449115022589982)
for i in member.roles:
try:
await member.remove_roles(i)
except:
print(f"Can't remove the role {i}")
await member.add_roles(muteRole)
await ctx.channel.purge(limit = 1)
await ctx.send(str(member)+' has been muted!')
это сработало, но теперь выдает ошибку discord.ext.commands.errors.CommandInvokeError: Command raised an exception: Forbidden: 403 Forbidden (error code: 50013): Missing Permissions
, хотя я владелец сервера и у меня есть роль, которая имеет буквально все разрешения
@Double Отсутствует разрешение для бота, если вы проверите настройки и роли сервера, убедитесь, что бот находится вверху. Он может вносить изменения только в те роли, которые ниже его в этом списке ролей.
Как говорится «Неизвестная роль», я думаю, проблема в
muteRole = ctx.guild.get_role(728203394673672333)
. Я предлагаю вам попробовать получить роль с таким названием, какmuteRole = discord.utils.get(member.guild.roles, name='rolename')
.