async def warn(message: types.Message):
    """
    Выдать предупреждение пользователю.
    """
    if message.reply_to_message.from_user.id == BOT_ID:
        await bot.send_message(message.chat.id, random.choice(random_mess))
        return
    try:
        warn_list = {
            'chat_id': message.chat.id,
            'user_id': message.reply_to_message.from_user.id,
            'name': message.reply_to_message.from_user.full_name
        }
    except AttributeError:
        sent_m = await bot.send_message(message.chat.id,
                                        text_messages['wrong_warn_syntax'])
        call_later(10,
                   bot.delete_message,
                   sent_m.chat.id,
                   sent_m.message_id,
                   loop=loop)
    else:
        if (await bot.get_chat_member(
                message.chat.id,
                message.reply_to_message.from_user.id)).status in admins:
            await bot.send_message(message.chat.id,
                                   text_messages['warn_admin'])
        else:
            await bot.delete_message(message.chat.id,
                                     message.reply_to_message.message_id)
            await warn_do(message, warn_list)
async def unmute(message: types.Message):
    """
    Снимает все ограничения с пользователя.
    """
    try:
        name = message.reply_to_message.from_user.full_name
        user_id = message.reply_to_message.from_user.id
        if user_id == BOT_ID:
            await bot.send_message(message.chat.id, random.choice(random_mess))
            return
        await bot.restrict_chat_member(message.chat.id,
                                       message.reply_to_message.from_user.id,
                                       can_send_messages=True,
                                       can_send_media_messages=True,
                                       can_send_other_messages=True,
                                       can_add_web_page_previews=True)
        await bot.send_message(
            message.chat.id,
            f'[{name}](tg://user?id={user_id}) разблокирован.')
    except (AttributeError, BadRequest):
        sent_m = await bot.send_message(message.chat.id,
                                        text_messages['wrong_unmute_syntax'])
        call_later(10,
                   bot.delete_message,
                   sent_m.chat.id,
                   sent_m.message_id,
                   loop=loop)
async def mute(message: types.Message):
    """
    Запрещает отправлять сообщения пользователю.
    """
    try:
        user_id = message.reply_to_message.from_user.id
        if user_id == BOT_ID:
            await bot.send_message(message.chat.id, random.choice(random_mess))
            return
        time_mute = message.text.split()[1]
        time_calc = calculate_time(time_mute)
        until = math.floor(time.time()) + time_calc[0] * 60
        name = message.reply_to_message.from_user.full_name
        await bot.restrict_chat_member(message.chat.id,
                                       message.reply_to_message.from_user.id,
                                       until_date=until,
                                       can_send_messages=False,
                                       can_send_media_messages=False,
                                       can_send_other_messages=False,
                                       can_add_web_page_previews=False)
        await bot.send_message(
            message.chat.id,
            f'[{name}](tg://user?id={user_id}) запрещено отправлять сообщения'
            f' на {str(time_calc[0])} {time_calc[1]}')
    except (IndexError, ValueError, AttributeError, TypeError):
        sent_m = await bot.send_message(message.chat.id,
                                        text_messages['wrong_mute_syntax'])
        call_later(15,
                   bot.delete_message,
                   sent_m.chat.id,
                   sent_m.message_id,
                   loop=loop)
async def pin(message: types.Message):
    """
    Закрепить сообщение в чате.
    """
    try:
        await bot.pin_chat_message(message.chat.id,
                                   message.reply_to_message.message_id,
                                   disable_notification=True)
    except AttributeError:
        sent_m = await bot.send_message(message.chat.id,
                                        text_messages['wrong_pin_syntax'])
        # Удалить сообщение об ошибке через время
        call_later(10,
                   bot.delete_message,
                   sent_m.chat.id,
                   sent_m.message_id,
                   loop=loop)
async def ban(message: types.Message):
    """
    Заблокировать пользователя.
    """
    try:
        name = message.reply_to_message.from_user.full_name
        user_id = message.reply_to_message.from_user.id
        if user_id == BOT_ID:  # Попытка забанить бота
            await bot.send_message(message.chat.id, random.choice(random_mess))
            return
        split_message = message.text.split()[1:]
        time_ban = split_message[0]
        time_calc = calculate_time(time_ban)
        # Указана причина и время бана - забанить на указаное время
        if len(split_message) >= 2 and time_ban[:-1].isdigit():
            cause = message.text.split(time_ban)[-1]
            until = math.floor(time.time()) + time_calc[0] * 60
            await bot.kick_chat_member(message.chat.id,
                                       message.reply_to_message.from_user.id,
                                       until_date=until)
            await bot.send_message(
                message.chat.id,
                f'[{name}](tg://user?id={user_id}) забанен на {str(time_calc[0])} {time_calc[1]}\n'
                f'Причина: {italic(cause)}.')
        # Указана причина бана - забанить навсегда
        elif not split_message[0][:-1].isdigit():
            cause = message.text[5:]
            await bot.kick_chat_member(message.chat.id, user_id)
            await bot.send_message(
                message.chat.id,
                f'[{name}](tg://user?id={user_id}) забанен навсегда.\n'
                f'Причина: {italic(cause)}.')
        # Указано только время бана - показать ошибку
        else:
            raise AttributeError
    except (AttributeError, IndexError, ValueError, TypeError):
        sent_m = await bot.send_message(message.chat.id,
                                        text_messages['wrong_ban_syntax'])
        call_later(15,
                   bot.delete_message,
                   sent_m.chat.id,
                   sent_m.message_id,
                   loop=loop)
async def acquit(message: types.Message):
    """
    Снять все предупреждения с пользователю.
    """
    try:
        if message.reply_to_message.from_user.id == BOT_ID:
            await bot.send_message(message.chat.id, random.choice(random_mess))
            return
        name = message.reply_to_message.from_user.full_name
        user_id = message.reply_to_message.from_user.id
        await bot.send_message(
            message.chat.id,
            f'[{name}](tg://user?id={user_id}) больше не имеет предупреждений.'
        )
        await prepared_query['warn_delete'].fetch(message.chat.id, user_id)
    except AttributeError:
        sent_m = await bot.send_message(message.chat.id,
                                        text_messages['wrong_acquit_syntax'])
        call_later(10,
                   bot.delete_message,
                   sent_m.chat.id,
                   sent_m.message_id,
                   loop=loop)
async def sd_ch(message: types.Message):
    """
    Отправляет сообщение в канал.
    """
    try:
        # Командой /sd_ch ответили на сообщение, то отправляем текст сообщения на которое ответили.
        if message.reply_to_message is not None:
            text = message.reply_to_message.text
        else:
            # Отправляемое в канал сообщение передано аргументом команде(/sd_ch text) - отправляем text.
            text = ' '.join(message.text.split()[1:])
        await bot.send_message(MY_CHANNEL, text)
        await bot.send_message(message.chat.id,
                               text_messages['success_message'],
                               disable_web_page_preview=True)
    except (IndexError, MessageTextIsEmpty):
        sent_m = await bot.send_message(message.chat.id,
                                        text_messages['wrong_sd_ch_syntax'])
        call_later(10,
                   bot.delete_message,
                   sent_m.chat.id,
                   sent_m.message_id,
                   loop=loop)