Отправка сообщений пользователям в боте

Всем привет, всю голову сломал как реализовать идею. Суть в том, что мне независимо от действий пользователя нужно отправлять ему сообщение во время из планировщика, причем пользователь может сам задать это время, после чего оно будет записано в бд

Я решил реализовать это через команду /start, тк она всегда является отправной точкой, но ничего не вышло

async def send_motivational_message(message: Message, bot: Bot):
    db = DataBase()
    random_phrase = await db.get_random_motivation()
    if random_phrase:
        await bot.send_message(message.from_user.id,
                               f"{random_phrase.text} - {random_phrase.author}")
    else:
        print("Не удалось получить мотивационную фразу.")

@rCom.message(Command('text'))
async def command_text(message: Message, bot: Bot):
    await send_motivational_message(message, bot)

@rCom.message(CommandStart())
async def command_start(message: Message, bot: Bot):
    try:
        db = DataBase()
        user_id = str(message.from_user.id)  # Преобразуйте user_id в строку
        user = await db.get_user(user_id)
        if user and user.uvedomlen is not None:
            await bot.send_message(
                message.from_user.id,
                '<b>Главное меню</b>'
                '\n\nВыберите интересующий вас раздел',
                reply_markup=main_menu
            )
        else:
            await bot.send_message(
                message.from_user.id,
                f'<b>?Добро пожаловать, {message.from_user.first_name}!</b> ',
                reply_markup=Keyboards_Start_Menu.main
            )

        if user.uvedomlen == True:
            scheduler = AsyncIOScheduler()
            uvedomlen_time = [time.strip() for time in user.uvedomlen_time.split(',')]
            for time_str in uvedomlen_time:
                hour, minute = map(int, time_str.split(':'))
                scheduler.add_job(send_motivational_message,
                                  CronTrigger(hour=hour, minute=minute, timezone=pytz.timezone('Europe/Moscow')),
                                  args=[bot, message.from_user.id])
                scheduler.start()
    except Exception as e:
        print(f"Error in command_start: {e}")

Проблема в том, что в данном случае идет отправка уведомлений путем привязки к команде start, но можно ли как то сделать это в контексте машины состояний, когда пользователю задается вопрос, хочет ли он, чтобы ему отправлялись уведомления, при этом все должно работать и после перзагрузки бота, асинхронно, отправляя уведомления для конкретного пользователя


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