@remod3

Почему не работает команда?

def get_time_string(seconds):
    minutes, seconds = divmod(seconds, 60)
    hours, minutes = divmod(minutes, 60)
    days, hours = divmod(hours, 24)
    time_parts = []
    if days > 0:
        time_parts.append(f"{days} {'день' if days == 1 else 'дня' if 2 <= days <= 4 else 'дней'}")
    if hours > 0:
        time_parts.append(f"{hours} {'час' if hours == 1 else 'часа' if 2 <= hours <= 4 else 'часов'}")
    if minutes > 0:
        time_parts.append(f"{minutes} {'минута' if minutes == 1 else 'минуты' if 2 <= minutes <= 4 else 'минут'}")
    if seconds > 0:
        time_parts.append(f"{seconds} {'секунда' if seconds == 1 else 'секунды' if 2 <= seconds <= 4 else 'секунд'}")
    return " ".join(time_parts)


def parse_time(time_str):
    time_pattern = re.compile(r'(?:(\d+)d)?(?:(\d+)h)?(?:(\d+)m)?')
    match = time_pattern.fullmatch(time_str)
    if not match:
        return None
    days = int(match.group(1)) if match.group(1) else 0
    hours = int(match.group(2)) if match.group(2) else 0
    minutes = int(match.group(3)) if match.group(3) else 0
    return timedelta(days=days, hours=hours, minutes=minutes)

@bot.command(name="mute", default_command_permissions=discord.Permissions(mute_members=True))
async def mute(ctx, member: discord.Member = None, время: str = None, *, причина: str = None):
    if member is None:
        if ctx.message.reference:
            reply_message = await ctx.fetch_message(ctx.message.reference.message_id)
            member = reply_message.author
            member = ctx.guild.get_member(member.id)
            if member is None:
                await ctx.reply("Не удалось найти пользователя.")
                return
        else:
            await ctx.reply("Пожалуйста, укажите пользователя")
            return
    mute_role = discord.utils.get(ctx.guild.roles, name="Muted")
    if mute_role is None:
        perms = discord.Permissions(send_messages=False, connect=False, add_reactions=False)
        mute_role = await ctx.guild.create_role(name="Muted", permissions=perms)
    parsed_time = parse_time(время) if время else None
    try:
        if parsed_time:
            seconds = parsed_time.total_seconds()
            until_time = datetime.utcnow() + parsed_time
            await member.timeout(until=until_time)
            time_string = get_time_string(int(seconds))
        else:
            await member.add_roles(mute_role)
            time_string = "Навсегда"
        embed = discord.Embed(title="", color=0x2ECC71,
                              description=f":white_check_mark: Участник {member.mention} замьючен на "
                                          f"{time_string}!",)
        embed.add_field(name="Модератор", value=ctx.author.mention, inline=True)
        embed.add_field(name="Причина", value=причина or "Не указана", inline=False)
        await ctx.reply(embed=embed)
    except discord.Forbidden:
        await ctx.reply("У меня нет прав, чтобы замьютить этого пользователя.")
    except Exception as e:
        adm = await bot.fetch_user(admin)
        if adm:
            await adm.send(f"Произошла ошибка:\n{e}\nСервер: {ctx.guild.name}\nПользователь: {ctx.author.mention} | "
                           f"`{ctx.author.id}`\nКоманда: mute")


Подскажите пожалуйста, почему не работает команда в ответ на сообщение пользователей?
  • Вопрос задан
  • 134 просмотра
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы