60 lines
1.4 KiB
Python
60 lines
1.4 KiB
Python
"""Application entry point."""
|
|
|
|
import asyncio
|
|
import logging
|
|
from pathlib import Path
|
|
import signal
|
|
import traceback
|
|
|
|
from mab import MatrixBot
|
|
|
|
import logic
|
|
import config
|
|
|
|
def signal_callback(event: asyncio.Event) -> None:
|
|
logging.info("Signal is caught")
|
|
event.set()
|
|
|
|
async def main() -> None:
|
|
"""Application entry point."""
|
|
# logging setup
|
|
logging.basicConfig(
|
|
format="%(asctime)s [%(levelname)s] %(name)s: %(message)s",
|
|
datefmt="%Y-%m-%d %H:%M:%S",
|
|
level=logging.INFO
|
|
)
|
|
logging.getLogger("nio").setLevel(logging.CRITICAL + 1)
|
|
logging.info("2026-matrix-down")
|
|
# setup app termination logic
|
|
stop_event = asyncio.Event()
|
|
for s in (signal.SIGINT, signal.SIGTERM):
|
|
asyncio.get_running_loop().add_signal_handler(
|
|
s,
|
|
signal_callback,
|
|
stop_event
|
|
)
|
|
# load the config
|
|
bot_config = await config.load_config()
|
|
if bot_config is None:
|
|
logging.critical("Please edit config.json and restart the bot")
|
|
return
|
|
|
|
# setup the bot
|
|
bot = MatrixBot(bot_config)
|
|
await logic.initialize(bot)
|
|
await bot.start()
|
|
|
|
# wait for termination
|
|
logging.info("You may use Ctrl+C to terminate the app")
|
|
await stop_event.wait()
|
|
|
|
await bot.stop()
|
|
await logic.deinitizalize(bot)
|
|
|
|
if __name__ == "__main__":
|
|
try:
|
|
asyncio.run(main())
|
|
except SystemExit:
|
|
raise
|
|
except:
|
|
traceback.print_exc() |