import asyncio from os import getenv from time import sleep import uvloop import db import util from sources.ch4 import Chan4 from sources.dis import DiscordClient from sources.ingest import Ingest # Use UVLoop asyncio.set_event_loop_policy(uvloop.EventLoopPolicy()) log = util.get_logger("monolith") modules_enabled = getenv("MODULES_ENABLED", False) token = getenv("DISCORD_TOKEN", None) if not token: raise Exception("No Discord token provided") async def main(loop): if "ingest" in modules_enabled: ingest = Ingest() loop.create_task(ingest.run()) if "dis" in modules_enabled: client = DiscordClient() loop.create_task(client.start(token)) if "ch4" in modules_enabled: chan = Chan4() loop.create_task(chan.run()) created = False while not created: try: db.create_index(db.api_client) created = True except Exception as e: print(f"Error creating index: {e}") sleep(1) # Block the thread, just wait for the DB db.update_schema() loop = asyncio.get_event_loop() loop.create_task(main(loop)) try: loop.run_forever() except KeyboardInterrupt: log.info("Process terminating") finally: loop.close()