import asyncio import signal import sys from os import getenv from twisted.internet import asyncioreactor import util from sources.ch4 import Chan4 from sources.dis import DiscordClient loop = asyncio.new_event_loop() # asyncio.set_event_loop(loop) # asyncioreactor.install(asyncio.new_event_loop()) asyncioreactor.install(loop) # noqa from twisted.internet import reactor, task # noqa # Doesn't quite work but better than nothing def stop(*args): loop.stop() reactor.stop() sys.exit() signal.signal(signal.SIGINT, stop) # loop.add_signal_handler(signal.SIGINT, functools.partial(stop, loop)) # For development if not getenv("DISCORD_TOKEN", None): from dotenv import load_dotenv load_dotenv() 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 start(): log.info("Starting Discord handler.") client = DiscordClient(loop=loop) loop.create_task(client.start(token)) log.info("Starting 4chan handler.") chan = Chan4() running = chan.run() deferred = task.ensureDeferred(running) reactor.callLater(0.1, deferred.callback, "") loop.create_task(start()) # reactor.run() reactor.run() try: loop.run_forever() except KeyboardInterrupt: log.info("Process terminating") finally: loop.close()