Files
AnyMusicBot/bot/modules/spotify/song.py
2024-11-02 00:10:24 +02:00

43 lines
1.1 KiB
Python

from attrs import define
import spotipy
from ..common.song import BaseSongItem
@define
class SongItem(BaseSongItem):
@classmethod
def from_spotify(cls, song_item: dict):
return cls(
name=song_item["name"],
id=song_item["id"],
artists=[artist["name"] for artist in song_item["artists"]],
preview_url=(
song_item["preview_url"].split("?")[0]
if song_item["preview_url"] is not None
else None
),
thumbnail=song_item["album"]["images"][1]["url"],
)
@define
class Songs(object):
spotify: spotipy.Spotify
def search(self, query: str, limit: int = 10) -> list[SongItem] | None:
r = self.spotify.search(query, limit=limit)
if r is None:
return None
return [SongItem.from_spotify(item) for item in r["tracks"]["items"]]
def from_id(self, song_id: str) -> SongItem | None:
r = self.spotify.track(song_id)
if r is None:
return None
return SongItem.from_spotify(r)