Делаю комманду мута! Немогу найти ошибку

Когда пишу k!мьют должно писать" введите ник учасника" а оно не пишет( помогите Вот сам код

@commands.has_any_role(863812064169164830, 863812595663896587, 863812764941680651, 863812678354993198, 863791521823719425,
863812051750617150,863889397685682206,
863811504561061889)
async def мьют(ctx, member: discord.Member, time: str=None, reason=None):
   if not member:
       return await ctx.send(
           embed=discord.Embed(
               title="Ошибочка...",
               description="Вы не ввели участника! k!мьют @ник",
               color=discord.Colour.red()
           )
       )
   if not time:
       return await ctx.send(
           embed=discord.Embed(
               title="Ошибочка...",
               description="Вы не ввели участника! k!мьют @ник время(1м)",
               color=discord.Colour.red()
           )
       )

   time_in_s = 0

   if time[len(time)-1:] == "с":
       time_in_s = int(time[:len(time)-1])

   elif time[len(time)-1:] == "м":
       time_in_s = int(time[:len(time)-1]) * 60

   elif time[len(time)-1:] == "ч":
       time_in_s = int(time[:len(time)-1]) * 60 * 60

   elif time[len(time)-1:] == "д":
       time_in_s = int(time[:len(time)-1]) * 60 * 60 * 24

   else:
       time_in_s = int(time[:len(time)-1])

   role = discord.utils.get(ctx.guild.roles,id=864088962851012650)

   emb = discord.Embed(title='Вердикт', color=discord.Colour.gold())

   emb.add_field(name='Великий модератор', value=ctx.message.author.mention, inline=False)
   emb.add_field(name='Замьютил', value=member.mention, inline=False)
   emb.add_field(name='По причине', value=reason, inline=False)
   emb.add_field(name='На', value=time, inline=False)

   await member.add_roles(role)

   msg = await ctx.send(embed=emb)

   await msg.add_reaction("✅")

   await asyncio.sleep(time_in_s)

   await member.remove_roles(role)
@мьют.error
async def мьют_error(ctx, error):
  author = ctx.message.author
  embed = discord.Embed(title="Ошибочка!❌", description=' У вас нету прав на использование данной комманды!',colour=  discord.Colour.from_rgb(255, 255, 0)) ```

Ответы (1 шт):

Автор решения: denisnumb

Вы добавили обработку ошибки команды

@мьют.error
async def мьют_error(ctx, error):
    author = ctx.message.author
    embed = discord.Embed(title="Ошибочка!❌", description=' У вас нету прав на использование данной комманды!',colour=  discord.Colour.from_rgb(255, 255, 0))

Но при этом все, что вы делаете - это создаете объект author, а также объект embed, но само сообщение никуда не выводите. Как минимум нужно добавить строку

await ctx.send(embed = embed)

Но это не решит проблему.


В данном случае вы обрабатываете ВСЕ возможные ошибки команды как отсутствие прав на использование команды. Правильным решением будет обработка отдельных случаев.

Конкретно отсутствие прав называется MissingPermissions и находится в модуле discord.ext.commands.errors

Обработать эту ошибку можно через встроенную функцию isinstance(error, commands.errors.MissingPermissions), которая первым аргументом принимает объект ошибки, а вторым тот объект, с которым ее нужно сравнить. По сути это эквивалентно операции error == commands.errors.MissingPermissions.

Засовываем проверку в условие if, иначе, если получаем другую ошибку, выводим полный её текст используя raise:

@мьют.error
async def мьют_error(ctx, error):
    if isinstance(error, commands.errors.MissingPermissions):
        author = ctx.message.author
        embed = discord.Embed(title="Ошибочка!❌", description=' У вас нету прав на использование данной комманды!',colour=  discord.Colour.from_rgb(255, 255, 0))
        await ctx.send(embed = embed)
    else:
        raise error

После этих действий я получил в консоль следующую ошибку:

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

Если коротко - ваша ошибка "Вы не ввели участника! k!мьют @ник" не обрабатывается, потому что вы не задали для аргумента member значение по умолчанию.

Эта проблема решается так: member: discord.Member = None

@bot.command()
async def мьют(ctx, member: discord.Member = None, time: str=None, reason=None):

Конечно, я мог бы сразу указать на ошибку, но затем последовали бы другие. А теперь, когда вы знаете, как правильно обрабатывать их, любую другую вы сможете решить самостоятельно :)

→ Ссылка