82 lines
2.1 KiB
Python
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()
|