30 lines
704 B
Python
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()
|