Как правильно реализовать проверку времени, чтоб бот по заданным параметрам присылал сообщение?

bot = Bot(TOKEN)
storage = MemoryStorage()
dp = Dispatcher(bot, storage=storage)

tasks = []
days_dict = {
    'Monday': 'Понедельник',
    'Tuesday': 'Вторник',
    'Wednesday': 'Среда',
    'Thursday': 'Четверг',
    'Friday': 'Пятница',
    'Saturday': 'Суббота',
    'Sunday': 'Воскресенье'
}


# Создаем класс состояний (States)
class TaskForm(StatesGroup):
    waiting_for_weekday = State()
    waiting_for_time = State()
    waiting_for_text = State()

# Обработчик команды /start
@dp.message_handler(commands=['start'])
async def start(message: types.Message):
    markup = types.ReplyKeyboardMarkup(resize_keyboard=True)
    buttons = ['Создать задачу', 'Мои задачи']
    markup.add(*buttons)
    await message.answer("Привет! Я бот-напоминалка. Чтобы создать новую задачу, нажни на соответсвующуу кнопку", reply_markup=markup)
    

@dp.message_handler(lambda message: message.text == 'Создать задачу')
async def process_weekday(message: types.Message, state: FSMContext):
    await bot.send_message(message.from_user.id, 'Напишите мне 3 сообщеия в виде: День недели, время и задача')
    await TaskForm.waiting_for_weekday.set()
    
@dp.message_handler(state=TaskForm.waiting_for_weekday)
async def weekd(message: types.Message, state: FSMContext):
    weekday = message.text.capitalize() # Изменяем первую букву на заглавную
    print(weekday)
    weekdays = ['Понедельник', 'Вторник', 'Среда', 'Четверг', 'Пятница', 'Суббота', 'Воскресенье'] # Используем названия дней с заглавными буквами
    if weekday not in weekdays:
        await message.reply("Некорректный день недели. Пожалуйста, введите корректный день недели (например, 'понедельник')")
    else:
        await state.update_data(weekday=weekday)
        await message.reply("Отлично! Теперь отправь мне время в формате 'HH:MM' (например, '14:30')")
        await TaskForm.waiting_for_time.set()




@dp.message_handler(state=TaskForm.waiting_for_time)
async def process_time(message: types.Message, state: FSMContext):
    time = message.text
    print(time)
    try:
        datetime.strptime(time, "%H:%M")
    except ValueError:
        await message.reply("Некорректный формат времени. Пожалуйста, введите время в формате 'HH:MM' (например, '15:30')")
    else:
        await state.update_data(time=time)
        await message.reply("Отлично! Теперь отправь мне задачу, которую ты хочешь добавить в список.")
        await TaskForm.waiting_for_text.set()



@dp.message_handler(state=TaskForm.waiting_for_text)
async def process_text(message: types.Message, state: FSMContext):
    # сохраняем текст задачи в состояние
    data = await state.get_data()
    task = {'weekday': data['weekday'], 'time': data['time'], 'text': message.text}
    print(f"Создана новая задача: {task}")
    tasks.append(task)
    await state.finish()
    await bot.send_message(message.from_user.id,f"Ваша задча: {task['weekday']},{task['time']}, {task['text']}")
    await bot.send_message(message.from_user.id,"Задача успешно создана")
    
    now = datetime.now()
    weekday = now.strftime("%A")
    h_and_m = now.strftime('%H:%M')
    today_ru = days_dict[weekday]
    
    if today_ru == task['weekday'] and h_and_m == task['time']:
        await bot.send_message(message.from_user.id, f'Напоминаем, что сегодня в {task["time"]} ты хотел {task["text"]}')
            
@dp.message_handler(lambda message: message.text == 'Мои задачи')
async def my_xobiez(message: types.Message, state: FSMContext):
    # проходимся по списку задач и создаем строку с их описанием
    tasks_str = ''
    for task in tasks:
        tasks_str += f'\n- {task["weekday"]}, {task["time"]}: {task["text"]}'
    if tasks_str:
        await bot.send_message(message.from_user.id, f'Вот список твоих задач:{tasks_str}')
    else:
        await bot.send_message(message.from_user.id, 'У тебя пока нет задач')

if __name__ =='__main__':
    executor.start_polling(dp, skip_updates=True)

Хочу сделать бота с напоминаниями, используя Fsm состояние. В переменных task['weekday'] task['time'] лежит время и день недели, но бот не присылает сообщение, и в терминале ошибок нет, пытался сделать проверку через while True, но все равно не сработало.


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