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):
    client = DiscordClient()
    loop.create_task(client.start(token))

    chan = Chan4()
    loop.create_task(chan.run())

    ingest = Ingest()
    loop.create_task(ingest.run())


loop = asyncio.get_event_loop()
loop.create_task(main(loop))

try:
    loop.run_forever()
except KeyboardInterrupt:
    log.info("Process terminating")
finally:
    loop.close()
