From 0e4910cfdc6df2ef4caee4614607e9ec1ba17534 Mon Sep 17 00:00:00 2001 From: Choco <94597336+ChocoMeow@users.noreply.github.com> Date: Wed, 31 May 2023 12:23:50 +0800 Subject: [PATCH] Fixed autoplay --- function.py | 2 +- voicelink/player.py | 8 ++++---- voicelink/spotify/client.py | 12 ++++++++---- 3 files changed, 13 insertions(+), 9 deletions(-) diff --git a/function.py b/function.py index 7ee1762..b668bf8 100644 --- a/function.py +++ b/function.py @@ -173,7 +173,7 @@ async def similar_track(player) -> bool: tracks = [] if randomTrack.spotify: - tracks = await player.spotifyRelatedTrack(seed_artists=randomTrack.artistId[0], seed_tracks=randomTrack.track_id) + tracks = await player.spotifyRelatedTrack(randomTrack.identifier, seed_artists=randomTrack.artistId[0] if randomTrack.artistId else None) else: if randomTrack.source != 'youtube': return False diff --git a/voicelink/player.py b/voicelink/player.py index caf0ac8..1752ec8 100644 --- a/voicelink/player.py +++ b/voicelink/player.py @@ -443,7 +443,7 @@ class Player(VoiceProtocol): raise TrackLoadError("Not able to find the provided Spotify entity, is it private?") return [ Track( - track_id=track.id, + track_id=None, requester=requester, search_type=SearchType.ytsearch, spotify_track=track, @@ -462,12 +462,12 @@ class Player(VoiceProtocol): ) for track in tracks ] - async def spotifyRelatedTrack(self, seed_artists: str, seed_tracks: str): + async def spotifyRelatedTrack(self, seed_tracks: str, *, seed_artists: str = None): - tracks = await self._node._spotify_client.similar_track(seed_artists=seed_artists, seed_tracks=seed_tracks) + tracks = await self._node._spotify_client.similar_track(seed_tracks=seed_tracks, seed_artists=seed_artists) return [ Track( - track_id=track.id, + track_id=None, search_type=SearchType.ytsearch, spotify_track=track, info={ diff --git a/voicelink/spotify/client.py b/voicelink/spotify/client.py index 28afdfa..1d825f8 100644 --- a/voicelink/spotify/client.py +++ b/voicelink/spotify/client.py @@ -33,7 +33,8 @@ from .exceptions import InvalidSpotifyURL, SpotifyRequestException GRANT_URL = "https://accounts.spotify.com/api/token" REQUEST_URL = "https://api.spotify.com/v1/{type}s/{id}" SEARCH_URL = "https://api.spotify.com/v1/search?q={query}&type={type}&limit={limit}" -SUGGESTION_URL = "https://api.spotify.com/v1/recommendations?limit={limit}&seed_artists={seed_artists}&seed_tracks={seed_tracks}" +SUGGESTION_URL = "https://api.spotify.com/v1/recommendations?limit={limit}&seed_tracks={seed_tracks}" +SUGGESTION_URL_WITH_ART = "https://api.spotify.com/v1/recommendations?limit={limit}&seed_artists={seed_artists}&seed_tracks={seed_tracks}" SPOTIFY_URL_REGEX = re.compile( r"https?://open.spotify.com/(?Palbum|playlist|track|artist)/(?P[a-zA-Z0-9]+)" ) @@ -87,12 +88,15 @@ class Client: return [ Track(track) for track in data['tracks']['items'] ] - async def similar_track(self, seed_artists: str, seed_tracks: str, limit: int = 5) -> list: + async def similar_track(self, seed_tracks: str, *, seed_artists: str = None, limit: int = 5) -> list: if not self._bearer_token or time.time() >= self._expiry: await self._fetch_bearer_token() - request_url = SUGGESTION_URL.format(limit=limit, seed_artists=seed_artists, seed_tracks=seed_tracks) - + if not seed_artists: + request_url = SUGGESTION_URL.format(limit=limit, seed_tracks=seed_tracks) + else: + request_url = SUGGESTION_URL_WITH_ART.format(limit=limit, seed_artists=seed_artists, seed_tracks=seed_tracks) + async with self.session.get(request_url, headers=self._bearer_headers) as resp: if resp.status != 200: raise SpotifyRequestException(