mosgortrans/app/core/routes.py

32 lines
988 B
Python

import asyncio
from http import HTTPStatus
from aiogram.types import Update
from aiohttp import web
from app.core.bot import TransportBot
class Handler:
def __init__(self) -> None:
self.queue: asyncio.Queue = asyncio.Queue() # type: ignore
@staticmethod
async def health_check(request: web.Request) -> web.Response:
return web.Response(text='Health OK', status=HTTPStatus.OK)
async def put_updates_on_queue(self, request: web.Request) -> web.Response:
"""
Listen {WEBHOOK_PATH}/{TELEGRAM_WEB_TOKEN} path and proxy post request to bot
"""
data = await request.json()
tg_update = Update(**data)
self.queue.put_nowait(tg_update)
return web.Response(status=HTTPStatus.ACCEPTED)
async def get_updates_from_queue(self) -> None:
while True:
update = await self.queue.get()
await TransportBot.dispatcher.process_update(update)
await asyncio.sleep(0.1)