From 2ea41e118721451e58c11ba2efba7528e96153dd Mon Sep 17 00:00:00 2001 From: kotovalexarian Date: Sat, 14 Jan 2023 20:27:41 +0300 Subject: [PATCH] Move messengers to separate module (#3) Co-authored-by: Alex Kotov Reviewed-on: https://inex.dev/def/MirrorTea/pulls/3 --- mirrortea/__main__.py | 7 ++-- .../abstract_source_platform/__init__.py | 3 -- .../abstact_source_platform.py | 9 ----- .../abstract_source_platform/telegram.py | 24 ------------- mirrortea/matrix.py | 35 ------------------- mirrortea/messengers/__init__.py | 2 ++ mirrortea/messengers/matrix.py | 23 ++++++++++++ mirrortea/messengers/telegram.py | 15 ++++++++ 8 files changed, 43 insertions(+), 75 deletions(-) delete mode 100644 mirrortea/abstract_source_platform/__init__.py delete mode 100644 mirrortea/abstract_source_platform/abstact_source_platform.py delete mode 100644 mirrortea/abstract_source_platform/telegram.py delete mode 100644 mirrortea/matrix.py create mode 100644 mirrortea/messengers/__init__.py create mode 100644 mirrortea/messengers/matrix.py create mode 100644 mirrortea/messengers/telegram.py diff --git a/mirrortea/__main__.py b/mirrortea/__main__.py index 2dc2aba..c37c69d 100644 --- a/mirrortea/__main__.py +++ b/mirrortea/__main__.py @@ -1,7 +1,6 @@ import asyncio -from matrix import MatrixLoop -from abstract_source_platform.telegram import Telegram +from messengers import Matrix as MatrixLoop, Telegram as TelegramLoop from config_dataclass import Config @@ -18,14 +17,14 @@ class Application: def __init__(self, config): self.config = config self.matrix_loop = MatrixLoop(self) - self.telegram = Telegram(self) + self.telegram_loop = TelegramLoop(self) async def run(self): try: await self.matrix_loop.prepare() await asyncio.gather( self.matrix_loop.run(), - self.telegram.run(), + self.telegram_loop.run(), ) finally: if self.matrix_loop: diff --git a/mirrortea/abstract_source_platform/__init__.py b/mirrortea/abstract_source_platform/__init__.py deleted file mode 100644 index 815fa79..0000000 --- a/mirrortea/abstract_source_platform/__init__.py +++ /dev/null @@ -1,3 +0,0 @@ -from abstract_source_platform.telegram import Telegram - -platforms = [Telegram] diff --git a/mirrortea/abstract_source_platform/abstact_source_platform.py b/mirrortea/abstract_source_platform/abstact_source_platform.py deleted file mode 100644 index f12d8b3..0000000 --- a/mirrortea/abstract_source_platform/abstact_source_platform.py +++ /dev/null @@ -1,9 +0,0 @@ -from abc import ABC, abstractmethod - -from models.user import User - - -class AbstractSourcePlatform(ABC): - @abstractmethod - def get_user_information(self) -> User: - """Init tables in database""" diff --git a/mirrortea/abstract_source_platform/telegram.py b/mirrortea/abstract_source_platform/telegram.py deleted file mode 100644 index 0cb3916..0000000 --- a/mirrortea/abstract_source_platform/telegram.py +++ /dev/null @@ -1,24 +0,0 @@ -import sys -import aiogram as telegram - -from abstract_source_platform.abstact_source_platform import ( - AbstractSourcePlatform, -) -from models.user import User - - -class Telegram(AbstractSourcePlatform): - def __init__(self, app): - self.app = app - self.bot = telegram.Bot(token=app.config.telegram_bot_token) - self.dispatcher = telegram.Dispatcher(bot=self.bot) - self.dispatcher.register_message_handler(self.on_message) - - async def run(self): - await self.dispatcher.start_polling() - - async def on_message(self, msg): - print(msg, file=sys.stderr) - - async def get_user_information(self) -> User: - pass diff --git a/mirrortea/matrix.py b/mirrortea/matrix.py deleted file mode 100644 index 061b4a3..0000000 --- a/mirrortea/matrix.py +++ /dev/null @@ -1,35 +0,0 @@ -import nio as matrix -import sys - - -class MatrixLoop: - def __init__(self, app): - self.app = app - self.client = matrix.AsyncClient( - app.config.matrix_homeserver_url, - app.config.matrix_full_bot_id, - ) - self.client.add_event_callback(self.on_message, matrix.RoomMessage) - - async def prepare(self): - await self.client.login(self.app.config.matrix_bot_password) - - async def finish(self): - await self.client.close() - - async def run(self): - await self.client.sync_forever(timeout=30000) - - async def on_message(self, room, event): - print(room, event, file=sys.stderr) - - def upgrade_room(self, room, telegram_nickname): - event_dict = matrix.event_builders.event_builder.EventBuilder( - name=telegram_nickname - ).as_dict() - client.room_send( - room_id=room, - message_type=event_dict["type"], - content=event_dict["content"], - ) # предположу что оно так работает - # https://matrix-nio.readthedocs.io/en/latest/nio.html#module-nio.event_builders.state_events diff --git a/mirrortea/messengers/__init__.py b/mirrortea/messengers/__init__.py new file mode 100644 index 0000000..11d43e6 --- /dev/null +++ b/mirrortea/messengers/__init__.py @@ -0,0 +1,2 @@ +from .matrix import Matrix +from .telegram import Telegram diff --git a/mirrortea/messengers/matrix.py b/mirrortea/messengers/matrix.py new file mode 100644 index 0000000..4048f27 --- /dev/null +++ b/mirrortea/messengers/matrix.py @@ -0,0 +1,23 @@ +import nio +import sys + +class Matrix: + def __init__(self, app): + self.app = app + self.client = nio.AsyncClient( + app.config.matrix_homeserver_url, + app.config.matrix_full_bot_id, + ) + self.client.add_event_callback(self.on_message, nio.RoomMessage) + + async def prepare(self): + await self.client.login(self.app.config.matrix_bot_password) + + async def finish(self): + await self.client.close() + + async def run(self): + await self.client.sync_forever(timeout=30000) + + async def on_message(self, room, event): + print(room, event, file=sys.stderr) diff --git a/mirrortea/messengers/telegram.py b/mirrortea/messengers/telegram.py new file mode 100644 index 0000000..c3355e5 --- /dev/null +++ b/mirrortea/messengers/telegram.py @@ -0,0 +1,15 @@ +import aiogram +import sys + +class Telegram: + def __init__(self, app): + self.app = app + self.bot = aiogram.Bot(token=app.config.telegram_bot_token) + self.dispatcher = aiogram.Dispatcher(bot=self.bot) + self.dispatcher.register_message_handler(self.on_message) + + async def run(self): + await self.dispatcher.start_polling() + + async def on_message(self, msg): + print(msg, file=sys.stderr)