Проблема в работе планировщика scheduler, python

Помогите с решением проблемы при планировании задачи в aioscheduler

Всем привет! Буду очень благодарен за внятный ответ, сломал вcю голову в надежде исправно реализовать поставленную задачу(

Суть в том, что у меня есть телеграмм бот на Python и в нем используется отправка сообщений пользователям в зависимости от выбранного ими времени, хранящемся в бд MySQL. В момент запуска бота инициализируется функция, которая активирует отправку уведомлений в зависимости от выбранного пользователем времени, также эта функция активируется после регистрации пользователя, далее пользователь имеет возможность изменить расписание уведомлений и все в целом работает, но до первого перезапуска. После перезапуска функция снова инициализируется в Main и уведомления приходят исправно, однако изменить их уже невозможно. Пожалуйста, помогите решить данную проблему, почему так происходит и как все исправить, чтобы корректно работало?

Вот файл Main:

import asyncio
import signal
from datetime import datetime, timedelta
import math

from apscheduler.schedulers.asyncio import AsyncIOScheduler
from DATABASE.db import DataBase

from aiogram import Bot, Dispatcher
from aiogram.client.bot import DefaultBotProperties
from aiogram.enums import ParseMode
from aiomysql import create_pool
from aiogram.exceptions import TelegramNetworkError

import Config


scheduler_motivate = AsyncIOScheduler()


async def scheduler_motivation(utc, uvedomlen_job, bot: Bot, telegram_id: int):
    try:
        schedules = uvedomlen_job.split(';')
        for schedule in schedules:
            schedule = schedule.strip().split('/')[1]
            day, time_part = schedule.split(':', 1)
            times = time_part.strip().split(',')

            # Обработка времени
            for time in times:
                time = time.strip()
                hour, minute = map(int, time.split(':'))

                server_time = datetime.now()

                user_time = datetime.combine(server_time.date(), datetime.min.time()) + timedelta(hours=hour, minutes=minute)
                adjusted_time = user_time + timedelta(hours=int(utc))

                adjusted_hour = adjusted_time.hour
                adjusted_minute = adjusted_time.minute

                job = f'{telegram_id}/{day}:{time}'
                scheduler_motivate.add_job(
                    send_motivational_message,
                    'cron',
                    day_of_week=day,
                    hour=adjusted_hour,
                    minute=adjusted_minute,
                    args=(bot, telegram_id),
                    id=job
                )

        if not scheduler_motivate.running:
            scheduler_motivate.start()
            scheduler_motivate.print_jobs()
    except Exception as e:
        print(f"Error in scheduler_motivation: {e}")



async def main():
    loop = asyncio.get_running_loop()
    pool = await create_pool(user=Config.user, password=Config.password, db=Config.db_name, host=Config.host, loop=loop)

    async def close_pool():
        pool.close()
        await pool.wait_closed()

    # Обработчик сигнала SIGINT
    def shutdown():
        print("Получен сигнал SIGINT, закрытие...")
        asyncio.ensure_future(close_pool())
        loop.stop()

    # Регистрация обработчика сигнала
    loop.add_signal_handler(signal.SIGINT, shutdown)

    try:
        <импорты>
        db = DataBase()
        users_info = await db.get_users_for_uvedoml()
        for info_uvedomlen in users_info:
            uvedomlen_job = info_uvedomlen.get('uvedomlen_job')
            user_id = info_uvedomlen.get('telegram_id')
            utc = info_uvedomlen.get('time_zone')
            await scheduler_motivation(utc, uvedomlen_job, bot, int(user_id))


        while True:
            try:
                await dp.start_polling(bot)
            except TelegramNetworkError:
                print("Произошла ошибка сети, повторная попытка через 3 секунды...")
                await asyncio.sleep(3)
            except Exception as e:
                print(f"Произошла ошибка: {e}")
                await asyncio.sleep(5)
    finally:
        await close_pool()


if __name__ == '__main__':
    try:
        asyncio.run(main())
    except KeyboardInterrupt:
        print('Получен сигнал прерывания, бот завершает работу...')

Вот файл Menu, в котором реализуется состояние изменения отправки уведомлений:

@rMenu.message(Menu.uvedomlen)
async def new_uvedomlen(message: Message, state: FSMContext):
    try:
        if message.text.lower() not in [Text.yes, 'да', Text.no, 'нет']:
            await message.reply('❌Ошибка! \nОтветьте корректно, используя соответствующие кнопки',
                                reply_markup=Keyboards_Menu.refresh_yes_no_kb)
            return
        if message.text.lower() in [Text.yes, 'да']:
            data_for_refresh = await state.get_data()
            uvedomlen_time = str(data_for_refresh.get('uvedomlen_time'))
            if uvedomlen_time == '*:09:00,16:00':
                await state.set_state(Menu.uvedomlen_time)
                await message.answer(Text.uvedomlen_time, reply_markup=Keyboards_Menu.refresh_kb)
            else:
                await state.set_state(Menu.uvedomlen_when)
                await message.answer(Text.uvedomlen_when, reply_markup=Keyboards_Menu.refresh_yes_no_kb)
        elif message.text.lower() in [Text.no, 'нет']:
            db = DataBase()
            user_id = str(message.from_user.id)
            uvedomlen_job = await db.get_user_uvedoml_job(user_id)
            jobs = uvedomlen_job.get('uvedomlen_job')
            scheduler_motivate.print_jobs()
            print(jobs)
            if jobs is not None:
                 job_list = jobs.split(';')
                 for job in job_list:
                     job = job.strip()
                     day, time_part = job.split(':', 1)
                     times = time_part.split(',')
                     for time in times:
                         individual_job = f"{day}:{time.strip()}"
                         scheduler_motivate.remove_job(individual_job)

            await db.add_user_uvedomlen(
                user_id=user_id,
                uvedomlen=False,
                uvedomlen_time=None,
                uvedomlen_job=None
            )
            (message_text) = await anketa(user_id)
            await state.clear()
            await message.answer('Информация о получении уведомлений обновлена✅', reply_markup=ReplyKeyboardRemove())
            await message.answer(message_text, reply_markup=Keyboards_Menu.private)
    except Exception as e:
        print(f"Error new_uvedomlen: {e}")

Опять же повторюсь, проблема возникает только после перезапуска бота, проблем с идентификатором job - нет, прикладываю результат отладки:

<тут id пользователя>/wed:02:27,02:28
Jobstore default:
    send_motivational_message (trigger: cron[day_of_week='wed', hour='2', minute='27'], next run at: 2024-09-04 02:27:00 MSK)
    send_motivational_message (trigger: cron[day_of_week='wed', hour='2', minute='28'], next run at: 2024-09-04 02:28:00 MSK)
Pending jobs:
    No pending jobs
<тут id пользователя>/wed:02:27,02:28
Error new_uvedomlen: 'No job by the id of <тут id пользователя>/wed:02:27 was found'

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