mirror of
https://github.com/Cog-Creators/Red-DiscordBot.git
synced 2025-11-06 11:18:54 -05:00
[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:
parent
51c83d958c
commit
df922a0e3e
@ -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())
|
|
||||||
|
|||||||
@ -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
|
||||||
|
|||||||
@ -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
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user