Делаю комманду мута! Немогу найти ошибку
Когда пишу 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 шт):
Вы добавили обработку ошибки команды
@мьют.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):
Конечно, я мог бы сразу указать на ошибку, но затем последовали бы другие. А теперь, когда вы знаете, как правильно обрабатывать их, любую другую вы сможете решить самостоятельно :)