Как добавить проверку, чтобы бот получал только время (%H:%M)? Python, Aiogram

Нужно, чтобы пользователь вводил время в формате ??:??, если будет неверно, то повтор вопроса, если верно, то фиксация в переменную.

Например:

  • 11 - неверно (нет минут)
  • 24:30 - нет такого времени
  • 44:00 - нет такого времени
  • 11:22 - фиксация ответа

Вот такой вот кусок кода:

#Если нажата определенная кнопка, спрашивает время подъёма
@dp.callback_query_handler(text='up_time', state=None) 
async def up_tm_cb(call: types.CallbackQuery, state=None):
    if call.data == 'up_time':
        await bot.send_message(chat_id=call.from_user.id, text='Запиши время подъема: ')
        await call.message.delete()
        await create_up_time(user_id=call.from_user.id)
        await ProfileStateGroup.up_time.set() #устанавливаю ожидание ответа

#здесь попытка сделать проверку, но я не понимаю, как именно сделать
@dp.message_handler(lambda message: not message.text.replace(':', '').isdigit(), state=ProfileStateGroup.up_time) #пока принимает любое значение. и 11 и 11:22 и 77:22
#@dp.message_handler(re.compile(r'(\d{1,2}:\d{1,2})'), state=ProfileStateGroup.up_time)
async def check_up_time(message: types.Message):
        await message.reply('''
Это не число! Попробуй еще раз!
Запиши время подъема:''')

@dp.message_handler(content_types='text', state=ProfileStateGroup.up_time)
async def time_up_st(message: types.Message, state: FSMContext):
    async with state.proxy() as data:
        data['up_time'] = message.text
    await message.reply('Отлично, я запомнил время подъема! Что-то еще?', reply_markup=inkb)
    await edit_profile_up_time(state, user_id=message.from_user.id)
    await state.finish()

Подскажите, пожалуйста, как можно реализовать данную проверку?

Был вариант добавить другой файл с подобным кодом:

from aiogram.dispatcher.filters import Filter
from aiogram import types
import re
from datetime import datetime
class datatimecheck(Filter):
    key = 'is_data'

    pattern = re.compile(r'(\d{1,2}:\d{1,2})')
    async def check(self, message: types.Message) -> bool:
        return self.pattern.match(message.text)
#(r'(\d{1,2}:\d{1,2})

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

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

Вот пример использования strptime и try:

@dp.message_handler(commands='start')
async def cmd_start(message: types.Message):
    await ProfileStateGroup.up_time.set()

    await message.reply("Введите время:")


@dp.message_handler(state=ProfileStateGroup.up_time)
async def time_entered(message: types.Message, state: FSMContext):
    try:
        entered_time = time.strptime(message.text, "%H:%M")
    except ValueError:
        await message.reply("Время некорректно!")
    else:
        await message.reply(f"Отлично время введено!")
        # Сохранение entered_time
        # Переход в следующее состояние
→ Ссылка