Added get_recommendations into node class

This commit is contained in:
Choco
2024-05-26 15:56:27 +08:00
parent c3507bba72
commit 1894b8e20e
2 changed files with 33 additions and 29 deletions

View File

@@ -76,7 +76,7 @@ async def connect_channel(ctx: Union[commands.Context, Interaction], channel: Vo
channel, ctx, settings
))
await player.send_ws({"op": "createPlayer", "members_id": [member.id for member in channel.members]})
await player.send_ws({"op": "createPlayer", "member_ids": [member.id for member in channel.members]})
return player
@@ -368,7 +368,7 @@ class Player(VoiceProtocol):
self._bot.loop.create_task(func.update_user(track.requester.id, {
"$push": {"history": {"$each": [track.track_id], "$slice": -25}}
}))
if self.settings.get('controller', True):
await self.invoke_controller()
@@ -712,34 +712,9 @@ class Player(VoiceProtocol):
except IndexError:
return False
if track.spotify:
spotify_tracks = await self._node._spotify_client.similar_track(seed_tracks=track.identifier)
tracks = [
Track(
track_id=None,
search_type=SearchType.ytsearch,
spotify_track=track,
info=track.to_dict(),
requester=self.client.user
)
for track in spotify_tracks
]
else:
if track.source != 'youtube':
return False
tracks = await self.get_tracks(
f"https://www.youtube.com/watch?v={track.identifier}&list=RD{track.identifier}",
requester=self.client.user
)
tracks = self._node.get_recommendations(track)
if tracks:
if isinstance(tracks, Playlist):
await self.add_track(tracks.tracks, duplicate=False)
else:
await self.add_track(tracks, duplicate=False)
await self.add_track(tracks, duplicate=False)
self._logger.debug(f"Player in {self.guild.name}({self.guild.id}) has been requested recommendations.")
return True

View File

@@ -525,6 +525,35 @@ class Node:
)
for track in tracks ]
async def get_recommendations(self, track: Track, limit: int = None) -> List[Track]:
if track.spotify:
spotify_tracks = await self._spotify_client.similar_track(seed_tracks=track.identifier)
tracks = [
Track(
track_id=None,
search_type=SearchType.ytsearch,
spotify_track=track,
info=track.to_dict(),
requester=self.bot.user
)
for track in spotify_tracks
]
else:
if track.source != 'youtube':
return []
tracks = await self.get_tracks(
f"https://www.youtube.com/watch?v={track.identifier}&list=RD{track.identifier}",
requester=self.bot.user
)
if isinstance(tracks, Playlist):
tracks = tracks.tracks
return tracks[:limit] if limit else tracks
class NodePool:
"""The base class for the node pool.
This holds all the nodes that are to be used by the bot.