Guest User

Untitled

a guest
Nov 24th, 2020
29
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 2.64 KB | None | 0 0
  1. import argparse
  2. import asyncio
  3. from typing import Callable, Tuple, Union
  4.  
  5. from aiogram import Bot, Dispatcher, types
  6. from aiogram.contrib.fsm_storage.memory import MemoryStorage
  7. from aiogram.contrib.fsm_storage.redis import RedisStorage2
  8. from aiohttp import web
  9.  
  10. from src.data.data_class.bot_data_class import BotConfig
  11. from src.data.data_class.host_data_class import ServerConfig
  12. from src.data.load_config import load_path
  13. from src.handlers.massage import register_message_handler
  14.  
  15.  
  16. class Service:
  17.     bot: Bot
  18.     dp: Dispatcher
  19.     server_config: ServerConfig
  20.     bot_config: BotConfig
  21.  
  22.     def __init__(self, load: Callable[[], Tuple[BotConfig, ServerConfig]],
  23.                  stge: Union[MemoryStorage, RedisStorage2]):  # loop: asyncio.AbstractEventLoop):
  24.         # self.loop = loop
  25.         self.bot_config, self.server_config = load()
  26.         self.bot = Bot(self.bot_config.token)
  27.         self.dp = Dispatcher(self.bot, storage=stge)
  28.  
  29.     async def on_startup(self, web_app: web.Application):
  30.         await self.bot.delete_webhook()
  31.         await self.bot.set_webhook(self.server_config.get_url)
  32.  
  33.     def webhook(self, app: web.Application):
  34.         app.on_startup.append(self.on_startup)
  35.         app.add_routes([web.post(self.server_config.get_url, self.execute)])
  36.         web.run_app(app, port=self.server_config.port, host=self.server_config.host)
  37.  
  38.     async def execute(self, req: web.Request) -> web.Response:
  39.         updates = [types.Update(**(await req.json()))]
  40.         Bot.set_current(self.dp.bot)
  41.         Dispatcher.set_current(self.dp)
  42.         try:
  43.             await self.dp.process_updates(updates)
  44.         except Exception as e:
  45.             print(e)
  46.         finally:
  47.             return web.Response()
  48.  
  49.     async def main(self, build: str):
  50.         register_message_handler(self.dp, self.bot)
  51.         if build == "polling":
  52.             print("start")
  53.             await self.dp.start_polling()
  54.         elif build == "webhook":
  55.             app = web.Application()
  56.             self.webhook(app)
  57.  
  58.     @staticmethod
  59.     async def shutdown(dispatcher: Dispatcher):
  60.         await dispatcher.storage.close()
  61.         await dispatcher.storage.wait_closed()
  62.  
  63.  
  64. if __name__ == '__main__':
  65.     parser = argparse.ArgumentParser(description='get arg')
  66.     parser.add_argument("--config")
  67.     parser.add_argument("--build")
  68.     parser.add_argument("--storage")
  69.     arg = parser.parse_args()
  70.     path_to_data = "./data/data.json"
  71.     storage = RedisStorage2() if arg.storage == "redis" else MemoryStorage()
  72.     service = Service(load=load_path(arg.build, path=path_to_data), stge=storage)
  73.     asyncio.run(service.main(arg.build))
  74.  
Advertisement
Add Comment
Please, Sign In to add comment