async def _maybe_update_playlist( self, ctx: commands.Context, player: lavalink.player_manager.Player, playlist: Playlist ) -> Tuple[List[lavalink.Track], List[lavalink.Track], Playlist]: if playlist.url is None: return [], [], playlist results = {} updated_tracks = await self.fetch_playlist_tracks( ctx, player, Query.process_input(playlist.url, self.local_folder_current_path), skip_cache=True, ) if isinstance(updated_tracks, discord.Message): return [], [], playlist if not updated_tracks: # No Tracks available on url Lets set it to none to avoid repeated calls here results["url"] = None if updated_tracks: # Tracks have been updated results["tracks"] = updated_tracks old_tracks = playlist.tracks_obj new_tracks = [lavalink.Track(data=track) for track in updated_tracks] removed = list(set(old_tracks) - set(new_tracks)) added = list(set(new_tracks) - set(old_tracks)) if removed or added: await playlist.edit(results) return added, removed, playlist
def __init__( self, bot: Red, playlist_api: PlaylistWrapper, scope: str, author: int, playlist_id: int, name: str, playlist_url: Optional[str] = None, tracks: Optional[List[MutableMapping]] = None, guild: Union[discord.Guild, int, None] = None, ): self.bot = bot self.guild = guild self.scope = standardize_scope(scope) self.config_scope = prepare_config_scope(self.bot, self.scope, author, guild) self.scope_id = self.config_scope[-1] self.author = author self.author_id = getattr(self.author, "id", self.author) self.guild_id = (getattr(guild, "id", guild) if self.scope == PlaylistScope.GLOBAL.value else None) self.id = playlist_id self.name = name self.url = playlist_url self.tracks = tracks or [] self.tracks_obj = [lavalink.Track(data=track) for track in self.tracks] self.playlist_api = playlist_api
def __post_init__(self): if isinstance(self.track, str): self.track = json.loads(self.track) if self.track: self.track_object = lavalink.Track(self.track)