import asyncio from os import getenv import uvloop 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()) loop = asyncio.get_event_loop() loop.create_task(main(loop)) try: loop.run_forever() except KeyboardInterrupt: log.info("Process terminating") finally: loop.close()