This repository has been archived on 2023-01-19. You can view files and clone it, but cannot push or open issues or pull requests.
MirrorTea/mirrortea/__main__.py

82 lines
2.1 KiB
Python

import asyncio
import os
import sqlite3
import sys
import aiogram as telegram
import nio as matrix
from matrix import MatrixLoop
from telegram import TelegramLoop
from mirrortea.init_db import (
MATRIX_ROOMS_SQL,
TELEGRAM_USER_MATRIX_CHATS_SQL,
TELEGRAM_USERS_SQL,
)
def main():
config = Config(
db_path=os.environ["DB_PATH"],
matrix_bot_id=os.environ["MATRIX_BOT_ID"],
matrix_homeserver_url=os.environ["MATRIX_HOMESERVER_URL"],
matrix_owner_id=os.environ["MATRIX_OWNER_ID"],
matrix_password=os.environ["MATRIX_PASSWORD"],
telegram_bot_token=os.environ["TELEGRAM_BOT_TOKEN"],
)
asyncio.run(Application(config).run())
class Config:
def __init__(self, **kwargs):
self.db_path = kwargs["db_path"]
self.matrix_bot_id = kwargs["matrix_bot_id"]
self.matrix_homeserver_url = kwargs["matrix_homeserver_url"]
self.matrix_owner_id = kwargs["matrix_owner_id"]
self.matrix_password = kwargs["matrix_password"]
self.telegram_bot_token = kwargs["telegram_bot_token"]
# выглядит ужасно :(
class Application:
def __init__(self, config):
self.config = config
self.sqlite_adapter = SqliteAdapter(self, config.db_path)
self.matrix_loop = MatrixLoop(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_loop.run(),
)
finally:
if self.matrix_loop:
await self.matrix_loop.finish()
class SqliteAdapter:
def __init__(self, app, path):
self.app = app
self.path = path
self.conn = sqlite3.connect(path)
self._create_tables()
def _create_tables(self):
for table in [
TELEGRAM_USER_MATRIX_CHATS_SQL,
TELEGRAM_USERS_SQL,
MATRIX_ROOMS_SQL,
]:
self.conn.execute(table)
self.conn.commit()
if __name__ == "__main__":
main()