отправка сообщений в боте с ежеминутной проверкой aiogram по триггеру
Хочу реализовать бота, который взаимодействует с апи маркетплейса и проверяет, нет ли у продавца новых заказов. То есть он буквально вызывает специальный метод проверки новых заказов, предоставленный апишкой, и проверяет возвращаемое значение. Если оно ненулевое, то бот присылает в лс пользователю информацию о заказе. Я не совсем понимаю как реализовать архитектуру, ведь мне нужно это все делать асинхронно и беспрерывно, отправляя пользователю параллельно сообщения, еще и не забывая о логгировании.
from aiogram import Bot, Dispatcher
from bot import BOT_TOKEN
from aiogram.fsm.storage.memory import MemoryStorage
import asyncio
import logging
from aiogram.enums.parse_mode import ParseMode
import requests
from handlers import router
import aiogram.types as types
from main import TOKEN
from aiogram.filters import Command
bot = Bot(token=BOT_TOKEN, parse_mode=ParseMode.HTML)
dp = Dispatcher(storage=MemoryStorage())
dp.include_router(router)
bot.delete_webhook(drop_pending_updates=True)
dp.start_polling(bot, allowed_updates=dp.resolve_used_update_types())
@router.message(Command("start"))
async def main(message: types.Message):
while True:
# проверка новых заказов
try:
# Посылка GET-запроса к API
response = requests.get(url, headers={"Authorization": TOKEN})
if response.status_code == 200:
data = response.json()
if len(data['orders']) != 0:
orders = data['orders']
if orders:
for order in orders:
order_id = order['order_id']
order_date = order['createdAt']
# Проверка, был ли получен новый заказ
if order_id > last_order_id:
await bot.send_message(message.from_user.id, f"Появился новый заказ от {order_date}! ID: {order_id}")
# Обновление последнего ID заказа
last_order_id = order_id
else:
await bot.send_message(message.from_user.id, 'Нет новых заказов')
else:
logging.error(f"Ошибка при получении информации о заказах. Код ответа: {response.status_code}")
except requests.exceptions.RequestException as e:
logging.error(f"Ошибка при отправке запроса: {e}")
await asyncio.sleep(60) # Задержка перед следующей проверкой
if __name__ == "__main__":
logging.basicConfig(level=logging.INFO)
loop = asyncio.get_event_loop()
task = loop.create_task(main())
loop.run_forever()
Но все хендлеры у меня вынесены в отдельный файл дабы соблюдать хоть какую-то архитектуру кода, и хендлер на команду start там тоже есть(просто приветственное сообщение). Можно ли как-то реализовать это, учитывая, что приветственное сообщение мне не нужно слать каждую минуту?