TempMute | NotFound: 404 Не найдено (код ошибки: 10011): Неизвестная роль

#python #discord #discord.py

#python #Discord #discord.py

Вопрос:

Я пытаюсь сделать что-то вроде команды ‘tempmute’, но продолжает появляться ошибка :

 Traceback (most recent call last):
  File "/opt/virtualenvs/python3/lib/python3.8/site-packages/discord/ext/commands/bot.py", line 939, in invoke
    await ctx.command.invoke(ctx)
  File "/opt/virtualenvs/python3/lib/python3.8/site-packages/discord/ext/commands/core.py", line 863, in invoke
    await injected(*ctx.args, **ctx.kwargs)
  File "/opt/virtualenvs/python3/lib/python3.8/site-packages/discord/ext/commands/core.py", line 94, in wrapped
    raise CommandInvokeError(exc) from exc
discord.ext.commands.errors.CommandInvokeError: Command raised an exception: NotFound: 404 Not Found (error code: 10011): Unknown Role
 

И вот код команды

 @commands.command()
    @commands.has_permissions(ban_members=True)
    async def tempmute(self, ctx, member: discord.Member = None, * time):
        if not member:
            await ctx.send(embed=discord.Embed(title='Вы должны указать участника!', color=random.choice(colors)))
        else:
            LMUTED = discord.utils.get(ctx.message.guild.roles, name='LMUTED')
            if not LMUTED:
                perms=discord.Permissions(send_messages=False)
                await ctx.guild.create_role(name='LMUTED', 
                colour=discord.Colour(0x0000FF),
                permissions = perms)
                await ctx.send(f'Я создал роль `{LMUTED}`!')
            await member.add_roles(member, LMUTED)
            await ctx.send(f'Я замьютил {member} на {time}!')
            await s(time * 60)
            await ctx.remove_roles(member, LMUTED)
 

Ответ №1:

Убедитесь, что вы знаете, как читать ошибки python.

Но основная проблема здесь в том, что вы не присваиваете LMUTED значение после создания новой роли, поэтому оно остается None неизменным и, таким образом discord.py не удается добавить роль.

Кроме того, имейте в виду, что когда вы выполняете действия, срок действия которых истекает со временем, просто спящий режим / ожидание в методе не является хорошим способом справиться с этим, поскольку поток может быть заблокирован. Вместо этого вы должны использовать какой-то планировщик. В основном вещь, которая ожидает определенное количество времени перед запуском некоторого кода.