# Buggy code
async def _spotify_fetch_tracks(
    self,
    query_type: str,
    uri: str,
    recursive: Union[str, bool] = False,
    params=None,
    notifier: Optional[Notifier] = None,
) -> Union[dict, List[str]]:
    if recursive is False:
        call, params = self._spotify_format_call(query_type, uri)
        results = await self.spotify_api.get_call(call, params)
    else:
        results = await self.spotify_api.get_call(recursive, params)
    try:
        if results["error"]["status"] == 401 and not recursive:
            raise SpotifyFetchError(
                (
                    "The Spotify API key or client secret has not been set properly. "
                    "\nUse `{prefix}audioset spotifyapi` for instructions."
                )
            )
        elif recursive:
            return {"next": None}
    except KeyError:
        pass
    if recursive:
        return results
    tracks = []
    track_count = 0
    total_tracks = results.get("tracks", results).get("total", 1)
    while True:
        new_tracks = []
        if query_type == "track":
            new_tracks = results
            tracks.append(new_tracks)
        elif query_type == "album":
            tracks_raw = results.get("tracks", results).get("items", [])
            if tracks_raw:
                new_tracks = tracks_raw
                tracks.extend(new_tracks)
        else:
            tracks_raw = results.get("tracks", results).get("items", [])
            if tracks_raw:
                new_tracks = [k["track"] for k in tracks_raw if k.get("track")]
                tracks.extend(new_tracks)
        track_count += len(new_tracks)
        if notifier:
            await notifier.notify_user(
                current=track_count, total=total_tracks, key="spotify"
            )

        try:
            if results.get("next") is not None:
                results = await self._spotify_fetch_tracks(
                    query_type, uri, results["next"], params, notifier=notifier
                )
                continue
            else:
                break
        except KeyError:
            raise SpotifyFetchError(
                "This doesn't seem to be a valid Spotify playlist/album URL or code."
            )

    return tracks


# Traceback (RuntimeError)
Traceback (most recent call last):
File "/home/martinebots/martinebotsvenv/lib/python3.7/site-packages/discord/ext/commands/core.py", line 79, in wrapped
ret = await coro(*args, **kwargs)
File "/home/martinebots/martinebotscogs/cogs_modified/audio/audio.py", line 3183, in play
await self._enqueue_tracks(ctx, query)
File "/home/martinebots/martinebotscogs/cogs_modified/audio/audio.py", line 3885, in _enqueue_tracks
result, called_api = await self.music_cache.lavalink_query(ctx, player, query)
File "/home/martinebots/martinebotscogs/cogs_modified/audio/apis.py", line 911, in lavalink_query
results = await player.load_tracks(query)
File "/home/martinebots/martinebotsvenv/lib/python3.7/site-packages/lavalink/rest_api.py", line 300, in load_tracks
self.__check_node_ready()
File "/home/martinebots/martinebotsvenv/lib/python3.7/site-packages/lavalink/rest_api.py", line 268, in __check_node_ready
raise RuntimeError("Cannot execute REST request when node not ready.")
RuntimeError: Cannot execute REST request when node not ready.

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
File "/home/martinebots/martinebotsvenv/lib/python3.7/site-packages/discord/ext/commands/bot.py", line 863, in invoke
await ctx.command.invoke(ctx)
File "/home/martinebots/martinebotsvenv/lib/python3.7/site-packages/discord/ext/commands/core.py", line 728, in invoke
await injected(*ctx.args, **ctx.kwargs)
File "/home/martinebots/martinebotsvenv/lib/python3.7/site-packages/discord/ext/commands/core.py", line 88, in wrapped
raise CommandInvokeError(exc) from exc
discord.ext.commands.errors.CommandInvokeError: Command raised an exception: RuntimeError: Cannot execute REST request when node not ready.```

# Fixed code
async def _spotify_fetch_tracks(
    self,
    query_type: str,
    uri: str,
    recursive: Union[str, bool] = False,
    params: MutableMapping = None,
    notifier: Optional[Notifier] = None,
) -> Union[MutableMapping, List[str]]:
    if recursive is False:
        (call, params) = self._spotify_format_call(query_type, uri)
        results = await self.spotify_api.get_call(call, params)
    else:
        results = await self.spotify_api.get_call(recursive, params)
    try:
        if results["error"]["status"] == 401 and not recursive:
            raise SpotifyFetchError(
                (
                    "The Spotify API key or client secret has not been set properly. "
                    "\nUse `{prefix}audioset spotifyapi` for instructions."
                )
            )
        elif recursive:
            return {"next": None}
    except KeyError:
        pass
    if recursive:
        return results
    tracks = []
    track_count = 0
    total_tracks = results.get("tracks", results).get("total", 1)
    while True:
        new_tracks = []
        if query_type == "track":
            new_tracks = results
            tracks.append(new_tracks)
        elif query_type == "album":
            tracks_raw = results.get("tracks", results).get("items", [])
            if tracks_raw:
                new_tracks = tracks_raw
                tracks.extend(new_tracks)
        else:
            tracks_raw = results.get("tracks", results).get("items", [])
            if tracks_raw:
                new_tracks = [k["track"] for k in tracks_raw if k.get("track")]
                tracks.extend(new_tracks)
        track_count += len(new_tracks)
        if notifier:
            await notifier.notify_user(
                current=track_count, total=total_tracks, key="spotify"
            )

        try:
            if results.get("next") is not None:
                results = await self._spotify_fetch_tracks(
                    query_type, uri, results["next"], params, notifier=notifier
                )
                continue
            else:
                break
        except KeyError:
            raise SpotifyFetchError(
                "This doesn't seem to be a valid Spotify playlist/album URL or code."
            )

    return tracks