[Audio] More robust startup and unload (#2118)

* More robust cleanup for audio and streams

Signed-off-by: Toby Harradine <tobyharradine@gmail.com>

* Remove copied code from streams

Signed-off-by: Toby Harradine <tobyharradine@gmail.com>
This commit is contained in:
Toby Harradine 2018-09-22 15:04:46 +10:00 committed by GitHub
parent 51c83d958c
commit df922a0e3e
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 22 additions and 8 deletions

View File

@ -52,6 +52,6 @@ async def setup(bot: commands.Bot):
await maybe_download_lavalink(bot.loop, cog) await maybe_download_lavalink(bot.loop, cog)
await start_lavalink_server(bot.loop) await start_lavalink_server(bot.loop)
await cog.initialize()
bot.add_cog(cog) bot.add_cog(cog)
bot.loop.create_task(cog.disconnect_timer())
bot.loop.create_task(cog.init_config())

View File

@ -1,3 +1,5 @@
import contextlib
import aiohttp import aiohttp
import asyncio import asyncio
import datetime import datetime
@ -61,8 +63,10 @@ class Audio:
self.config.register_global(**default_global) self.config.register_global(**default_global)
self.skip_votes = {} self.skip_votes = {}
self.session = aiohttp.ClientSession() self.session = aiohttp.ClientSession()
self._disconnect_task = None
self._cleaned_up = False
async def init_config(self): async def initialize(self):
host = await self.config.host() host = await self.config.host()
password = await self.config.password() password = await self.config.password()
rest_port = await self.config.rest_port() rest_port = await self.config.rest_port()
@ -78,6 +82,8 @@ class Audio:
) )
lavalink.register_event_listener(self.event_handler) lavalink.register_event_listener(self.event_handler)
self._disconnect_task = self.bot.loop.create_task(self.disconnect_timer())
async def event_handler(self, player, event_type, extra): async def event_handler(self, player, event_type, extra):
notify = await self.config.guild(player.channel.guild).notify() notify = await self.config.guild(player.channel.guild).notify()
status = await self.config.status() status = await self.config.status()
@ -2267,7 +2273,7 @@ class Audio:
async def disconnect_timer(self): async def disconnect_timer(self):
stop_times = {} stop_times = {}
while self == self.bot.get_cog("Audio"): while True:
for p in lavalink.players: for p in lavalink.players:
server = p.channel.guild server = p.channel.guild
@ -2449,7 +2455,13 @@ class Audio:
pass pass
def __unload(self): def __unload(self):
if not self._cleaned_up:
self.session.detach() self.session.detach()
if self._disconnect_task:
self._disconnect_task.cancel()
lavalink.unregister_event_listener(self.event_handler) lavalink.unregister_event_listener(self.event_handler)
self.bot.loop.create_task(lavalink.close()) self.bot.loop.create_task(lavalink.close())
shutdown_lavalink_server() shutdown_lavalink_server()
self._cleaned_up = True
__del__ = __unload

View File

@ -666,3 +666,5 @@ class Streams:
def __unload(self): def __unload(self):
if self.task: if self.task:
self.task.cancel() self.task.cancel()
__del__ = __unload