v6d2ctx/v6d2ctx/serve.py
2022-12-28 07:37:52 +00:00

30 lines
704 B
Python

import asyncio
import signal
import discord
__all__ = ('serve',)
def serve(main, client: discord.Client, loop: asyncio.AbstractEventLoop):
async def aclose():
if not client.is_closed():
await client.change_presence(status=discord.Status.offline)
await client.close()
def close():
loop.run_until_complete(aclose())
def sigtermed(*_args):
loop.create_task(aclose())
signal.signal(signal.SIGTERM, sigtermed)
task = loop.create_task(main)
try:
loop.run_until_complete(task)
except (KeyboardInterrupt, InterruptedError, RuntimeError):
close()
loop.run_until_complete(task)
finally:
close()