# Buggy code
async def _get_spotify_tracks(
    self, ctx: commands.Context, query: audio_dataclasses.Query
):
    if ctx.invoked_with in ["play", "genre"]:
        enqueue_tracks = True
    else:
        enqueue_tracks = False
    player = lavalink.get_player(ctx.guild.id)
    api_data = await self._check_api_tokens()

    if (
        not api_data["spotify_client_id"]
        or not api_data["spotify_client_secret"]
        or not api_data["youtube_api"]
    ):
        return await self._embed_msg(
            ctx,
            _(
                "The owner needs to set the Spotify client ID, Spotify client secret, "
                "and YouTube API key before Spotify URLs or codes can be used. "
                "\nSee `{prefix}audioset youtubeapi` and `{prefix}audioset spotifyapi` "
                "for instructions."
            ).format(prefix=ctx.prefix),
        )
    try:
        if self.play_lock[ctx.message.guild.id]:
            return await self._embed_msg(
                ctx, _("Wait until the playlist has finished loading.")
            )
    except KeyError:
        pass

    if query.single_track:
        try:
            res = await self.music_cache.spotify_query(
                ctx, "track", query.id, skip_youtube=True, notifier=None
            )
            if not res:
                return await self._embed_msg(ctx, _("Nothing found."))
        except SpotifyFetchError as error:
            self._play_lock(ctx, False)
            return await self._embed_msg(
                ctx, _(error.message).format(prefix=ctx.prefix)
            )
        self._play_lock(ctx, False)
        try:
            if enqueue_tracks:
                new_query = audio_dataclasses.Query.process_input(res[0])
                new_query.start_time = query.start_time
                return await self._enqueue_tracks(ctx, new_query)
            else:
                result, called_api = await self.music_cache.lavalink_query(
                    ctx, player, audio_dataclasses.Query.process_input(res[0])
                )
                tracks = result.tracks
                if not tracks:
                    return await self._embed_msg(ctx, _("Nothing found."))
                single_track = tracks[0]
                single_track.start_timestamp = query.start_time * 1000
                single_track = [single_track]

                return single_track

        except KeyError:
            self._play_lock(ctx, False)
            return await self._embed_msg(
                ctx,
                _(
                    "The Spotify API key or client secret has not been set properly. "
                    "\nUse `{prefix}audioset spotifyapi` for instructions."
                ).format(prefix=ctx.prefix),
            )
    elif query.is_album or query.is_playlist:
        self._play_lock(ctx, True)
        track_list = await self._spotify_playlist(
            ctx, "album" if query.is_album else "playlist", query, enqueue_tracks
        )
        self._play_lock(ctx, False)
        return track_list
    else:
        return await self._embed_msg(
            ctx, _("This doesn't seem to be a supported Spotify URL or code.")
        )


# 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 _get_spotify_tracks(
    self, ctx: commands.Context, query: audio_dataclasses.Query
):
    if ctx.invoked_with in ["play", "genre"]:
        enqueue_tracks = True
    else:
        enqueue_tracks = False
    player = lavalink.get_player(ctx.guild.id)
    api_data = await self._check_api_tokens()

    if (
        not api_data["spotify_client_id"]
        or not api_data["spotify_client_secret"]
        or not api_data["youtube_api"]
    ):
        return await self._embed_msg(
            ctx,
            title=_("Invalid Environment"),
            description=_(
                "The owner needs to set the Spotify client ID, Spotify client secret, "
                "and YouTube API key before Spotify URLs or codes can be used. "
                "\nSee `{prefix}audioset youtubeapi` and `{prefix}audioset spotifyapi` "
                "for instructions."
            ).format(prefix=ctx.prefix),
        )
    try:
        if self.play_lock[ctx.message.guild.id]:
            return await self._embed_msg(
                ctx,
                title=_("Unable To Get Tracks"),
                description=_("Wait until the playlist has finished loading."),
            )
    except KeyError:
        pass

    if query.single_track:
        try:
            res = await self.music_cache.spotify_query(
                ctx, "track", query.id, skip_youtube=True, notifier=None
            )
            if not res:
                title = _("Nothing found.")
                embed = discord.Embed(title=title)
                if (
                    query.is_local
                    and query.suffix in audio_dataclasses._PARTIALLY_SUPPORTED_MUSIC_EXT
                ):
                    title = _("Track is not playable.")
                    description = _(
                        "**{suffix}** is not a fully supported "
                        "format and some tracks may not play."
                    ).format(suffix=query.suffix)
                    embed = discord.Embed(title=title, description=description)
                return await self._embed_msg(ctx, embed=embed)
        except SpotifyFetchError as error:
            self._play_lock(ctx, False)
            return await self._embed_msg(
                ctx, title=_(error.message).format(prefix=ctx.prefix)
            )
        self._play_lock(ctx, False)
        try:
            if enqueue_tracks:
                new_query = audio_dataclasses.Query.process_input(res[0])
                new_query.start_time = query.start_time
                return await self._enqueue_tracks(ctx, new_query)
            else:
                query = audio_dataclasses.Query.process_input(res[0])
                try:
                    result, called_api = await self.music_cache.lavalink_query(
                        ctx, player, query
                    )
                except TrackEnqueueError:
                    self._play_lock(ctx, False)
                    return await self._embed_msg(
                        ctx,
                        title=_("Unable to Get Track"),
                        description=_(
                            "I'm unable get a track from Lavalink at the moment, try again in a few minutes."
                        ),
                    )
                tracks = result.tracks
                if not tracks:
                    embed = discord.Embed(title=_("Nothing found."))
                    if (
                        query.is_local
                        and query.suffix
                        in audio_dataclasses._PARTIALLY_SUPPORTED_MUSIC_EXT
                    ):
                        embed = discord.Embed(title=_("Track is not playable."))
                        embed.description = _(
                            "**{suffix}** is not a fully supported format and some "
                            "tracks may not play."
                        ).format(suffix=query.suffix)
                    return await self._embed_msg(ctx, embed=embed)
                single_track = tracks[0]
                single_track.start_timestamp = query.start_time * 1000
                single_track = [single_track]

                return single_track

        except KeyError:
            self._play_lock(ctx, False)
            return await self._embed_msg(
                ctx,
                title=_("Invalid Environment"),
                description=_(
                    "The Spotify API key or client secret has not been set properly. "
                    "\nUse `{prefix}audioset spotifyapi` for instructions."
                ).format(prefix=ctx.prefix),
            )
    elif query.is_album or query.is_playlist:
        self._play_lock(ctx, True)
        track_list = await self._spotify_playlist(
            ctx, "album" if query.is_album else "playlist", query, enqueue_tracks
        )
        self._play_lock(ctx, False)
        return track_list
    else:
        return await self._embed_msg(
            ctx,
            title=_("Unable To Find Tracks"),
            description=_("This doesn't seem to be a supported Spotify URL or code."),
        )