Как можно организовать отправку сообщений по расписанию с использованием aiogram3 и библиотеки aioschedule?
Для настройки отправки сообщений по расписанию с использованием aiogram3 и библиотеки aioschedule следует следовать следующему шагам: 1. Установите необходимые библиотеки: ```shell pip install aiogram aioschedule ``` 2. Создайте файл для вашего бота и импортируйте необходимые модули: ```python from aiogram import Bot, Dispatcher, types import asyncio import aioschedule ``` 3. Инициализируйте бота и диспетчера: ```python API_TOKEN = 'your_bot_api_token' bot = Bot(token=API_TOKEN) dp = Dispatcher(bot) ``` 4. Создайте функцию для отправки сообщений: ```python async def send_message(): chat_id = 'your_chat_id' message = 'Your scheduled message' await bot.send_message(chat_id, message) ``` 5. Настройте расписание и добавьте задачу для отправки сообщений через aioschedule: ```python async def main(): aioschedule.every().day.at('09:00').do(send_message) while True: await aioschedule.run_pending() await asyncio.sleep(1) if __name__ == '__main__': loop = asyncio.get_event_loop() loop.create_task(main()) loop.run_forever() ``` 6. Запустите ваш бот и убедитесь, что сообщения отправляются по расписанию. Это основная структура для организации отправки сообщений по расписанию с использованием aiogram3 и библиотеки aioschedule. Можете дополнить ее дополнительными функциями и настройками для вашего бота.
Открываем страницу пакета , читаем пример.
В конце видим рабочий цикл aioschedule, где периодически вызывается корутина aioschedule.run_pending().
У тебя этого нет. Т.е. ты планируешь вызов своей корутины, но не выполняешь код, который этот вызов сделает.
Поскольку у тебя scheduler() вызывается через create_task(), то можно прямо в тело scheduler() дописать что-то типа
while True: await aioschedule.run_pending() await asyncio.sleep(0.1)
Вот только зачем ты делаешь await create_teask()? Это убивает смысл create_task(), так как ты ждёшь завершения созданной фоновой задачи. Вместо этого сохрани таск в глобальную переменную - так он точно не будет собран сборщиком мусора, и ты сможешь при необходимости вызвать метод cancel(), чтобы прервать цикл внутри scheduler().