monolith/monolith.py

68 lines
1.4 KiB
Python

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()