From 0a14d9a93c7d56da57c06ce74f240598f2962164 Mon Sep 17 00:00:00 2001 From: strNophix Date: Fri, 3 Dec 2021 21:24:57 +0100 Subject: [PATCH] fill_player_queue now recursively refetches until queue size is ensured --- cogs/music.py | 7 ++++++- tunebot/abc.py | 4 ++++ tunebot/redis/playlist.py | 9 +++++++++ 3 files changed, 19 insertions(+), 1 deletion(-) diff --git a/cogs/music.py b/cogs/music.py index c480533..26fd5df 100644 --- a/cogs/music.py +++ b/cogs/music.py @@ -95,10 +95,11 @@ class Music(BaseCog): async def fill_player_queue(self, player: DefaultPlayer, buffer: Optional[int] = 1): queries = await self.bot.global_playlist.pick_random(buffer) - # Get the results for the query from Lavalink. + failed_queries: list[str] = [] for query in queries: result = await player.node.get_tracks(query) if not result or not result["tracks"]: + failed_queries.append(query) continue track = lavalink.models.AudioTrack( @@ -106,6 +107,10 @@ class Music(BaseCog): ) player.add(requester=self.bot.user.id, track=track) + if len(failed_queries) > 0: + await self.bot.global_playlist.remove_tracks(failed_queries) + await self.fill_player_queue(player, len(failed_queries)) + async def create_track_embed(self, track: AudioTrack) -> Embed: embed_color = self.bot.colors["embed"] embed = discord.Embed( diff --git a/tunebot/abc.py b/tunebot/abc.py index d8c580f..b3b2d65 100644 --- a/tunebot/abc.py +++ b/tunebot/abc.py @@ -32,6 +32,10 @@ class GlobalPlaylist(ABC): async def clear(self): pass + @abstractmethod + async def remove_tracks(self, track_urls: list[str]): + pass + class GlobalAutoJoin(ABC): @abstractmethod diff --git a/tunebot/redis/playlist.py b/tunebot/redis/playlist.py index bf90969..98e2f23 100644 --- a/tunebot/redis/playlist.py +++ b/tunebot/redis/playlist.py @@ -29,5 +29,14 @@ class GlobalRedisPlaylist(RedisBotEntity, GlobalPlaylist): """ await self.redis.delete(self.key("playlist")) + async def remove_tracks(self, track_urls: list[str]): + """ + Removes a single track from the playlist + + Args: + track_url (str): [description] + """ + await self.redis.srem(self.key("playlist"), *track_urls) + __all__ = ("GlobalRedisPlaylist",)