Files
2026-matrix-csonac/main.py
Nikita Tyukalov, ASUS, Linux ddc1c36c72 Basic database function implemented
2026-08-25 21:13:27 +03:00

71 lines
1.6 KiB
Python

"""
2026-matrix-downloader entry point
"""
import asyncio
import traceback
import signal
from pathlib import Path
from mab import MatrixBot, MatrixBotConfig
from datatypes import AppConfig
import database
import config
import util
import bot_callbacks
bot: MatrixBot = None # type: ignore
async def main() -> None:
"""Entry point"""
global bot
# setup signal handler
util.setup_app_stop_event()
loop = asyncio.get_running_loop()
for sig in (signal.SIGINT, signal.SIGTERM):
loop.add_signal_handler(sig, lambda: util.request_app_stop("Signal caught"))
# setup
util.setup_logging()
util.log_info("2026-matrix-csonac")
# load the config
cfg: AppConfig = await config.load_config("config.json") # type: ignore
if cfg is None:
util.log_error("Could't load config")
return
# setup the bot
matrix_bot_config = MatrixBotConfig(
matrix_homeserver_url=cfg.matrix_homeserver,
matrix_username_localpart=cfg.matrix_user,
storage_directory=Path(cfg.store_dir)
)
bot = MatrixBot(matrix_bot_config)
# setup the database
db = database.Database(Path("database.sqlite"))
# setup the callbacks
bot_callbacks.setup(bot, db)
# start the app
if not await db.connect():
util.log_error("Can't connect to the database!")
return
bot.start()
# wait for Ctrl+C
await util.get_app_stop_event().wait()
# stop the app
await bot.stop()
await db.disconnect()
if __name__ == "__main__":
try:
asyncio.run(main())
except SystemExit:
raise
except:
traceback.print_exc()