""" 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 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) bot_callbacks.setup(bot) # start the app bot.start() # wait for Ctrl+C await util.get_app_stop_event().wait() # stop the app await bot.stop() if __name__ == "__main__": try: asyncio.run(main()) except SystemExit: raise except: traceback.print_exc()