import asyncio import logging from typing import Coroutine from aiogram import Bot, types from aiogram.filters import Command from apscheduler.schedulers.asyncio import AsyncIOScheduler from neuroapi import neuroapi from neuroapi.config import GlobalConfig from neuroapi.types import BotSettings from .handler import MessageHandlerABC class UpdateSettingsCommand(MessageHandlerABC): settings: BotSettings post: Coroutine filter = Command('update_settings') async def settings_and_schedule_checker(self): await self._auto_update_settings() async def _auto_update_settings(self): self.settings = await neuroapi.bot_settings.get() self.scheduler.remove_all_jobs() self.scheduler.add_job(self._auto_update_settings, 'interval', seconds=60) # TODO: Сделать в бэке и в боте, чтоб дни тоже можно было в настройках хранить for i in self.settings.message_times: self.scheduler.add_job(self.post, 'cron', day_of_week='mon-sun', hour=i.split(':')[0], minute=i.split(':')[1]) logging.debug(self.scheduler.get_jobs()) def __init__(self, bot: Bot, post_command: Coroutine, *args) -> None: super().__init__(bot) self.post = post_command config = GlobalConfig() logging.debug(config) self.scheduler = AsyncIOScheduler(event_loop=asyncio.get_event_loop()) self.scheduler.add_job(self.settings_and_schedule_checker, 'interval', seconds=60) self.scheduler.start() async def _command(self, mes: types.Message): self.settings = await neuroapi.bot_settings.get_update() await mes.answer('Настройки обновлены')