Я работаю над ботом, используя `discord.py.Бот создает / удаляет несколько каналов и подключается к базе данных SQLite.Если бот потерпит крах, я хочу, чтобы он
- уничтожил все созданные им временные голосовые каналы.
- Отключился от базы данных SQL.
Вотсопрограмма выключения:
async def shutdown(self):
print("Shutting down Canvas...")
for ch in self.active_channels:
await client.delete_channel(ch)
self.db.close()
То, что я пробовал:
# Canv is the interface between the bot and the data we're collecting
atexit.register(canv.shutdown)
bot.run(TOKEN)
try:
bot.loop.run_until_complete(bot.start(TOKEN))
except KeyboardInterrupt or InterruptedError:
bot.loop.run_until_complete(canv.shutdown())
finally:
bot.loop.close()
from async_generator import asynccontextmanager
@asynccontextmanager
async def cleanup_context_manager():
try:
yield
finally:
await canv.shutdown()
with cleanup_context_manager():
bot.run(TOKEN)
Ни один из этих прогонов canv.shutdown()
, которыйasyncio.coroutine
.Как убедиться, что этот код запускается на каждый тип выхода?
Я использовал этот пост для некоторой информации, и я думаю, что он ближе всего к тому, что я хочу.