from contextlib import asynccontextmanager from .main import QBotApp @asynccontextmanager async def default_lifespan(app: QBotApp): app.logger.debug("starting qbot app") if app.config.USE_NGROK: try: from pyngrok import ngrok from pyngrok.conf import PyngrokConfig except ImportError: app.logger.error("pyngrok is not installed") raise tunnel = ngrok.connect(app.config.API_PORT, pyngrok_config = PyngrokConfig(auth_token = app.config.NGROK_AUTH_TOKEN)) app.config.NGROK_URL = tunnel.public_url await app.bot.set_webhook(url = f"{app.config.API_URL}/api/telegram/webhook", drop_pending_updates = True, allowed_updates = ['message', 'callback_query', 'pre_checkout_query'], secret_token = app.bot_auth_token) app.logger.info("qbot app started") if app.lifespan: async with app.lifespan(app): yield else: yield app.logger.info("stopping qbot app") await app.bot.delete_webhook() if app.config.USE_NGROK: ngrok.disconnect(app.config.NGROK_URL) ngrok.kill() app.logger.info("qbot app stopped")