Discord.py пытается удалить все роли у пользователя

У меня проблема: я пытаюсь удалить все роли пользователя для какой-то немой роли, но выдает эту ошибку 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 = ctx.guild.get_role(728203394673672333). Я предлагаю вам попробовать получить роль с таким названием, как muteRole = discord.utils.get(member.guild.roles, name='rolename').

Onur 22.12.2020 23:12

переменная muteRole не влияет на цикл, который используется для добавления, а не удаления, и она работала до того, как я добавил for i in member.roles: await member.remove_roles(i) цикл

Double 22.12.2020 23:14

Согласно здесь. Вы можете использовать await member.remove_roles(member.roles), чтобы удалить все роли пользователя. Может быть, вы можете попробовать это.

Onur 22.12.2020 23:21
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
1
3
3 600
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Проблема в том, что у всех пользователей есть «невидимая роль», @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=[]) Заменяет все текущие роли ролями, которые есть у вас в списке. Оставьте список пустым, чтобы удалить все роли пользователя.

discord.Member.edit

Хотя, если вы хотите сделать это с помощью 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 23.12.2020 09:06

@Double Отсутствует разрешение для бота, если вы проверите настройки и роли сервера, убедитесь, что бот находится вверху. Он может вносить изменения только в те роли, которые ниже его в этом списке ролей.

AbdurJ 23.12.2020 09:17

Другие вопросы по теме