# Buggy code
async def _spotify_first_time_query(
    self,
    ctx: commands.Context,
    query_type: str,
    uri: str,
    notifier: Notifier,
    skip_youtube: bool = False,
    current_cache_level: CacheLevel = CacheLevel.none(),
) -> List[str]:
    youtube_urls = []

    tracks = await self._spotify_fetch_tracks(
        query_type, uri, params=None, notifier=notifier
    )
    total_tracks = len(tracks)
    database_entries = []
    track_count = 0
    time_now = str(datetime.datetime.now(datetime.timezone.utc))
    youtube_cache = CacheLevel.set_youtube().is_subset(current_cache_level)
    for track in tracks:
        if track.get("error", {}).get("message") == "invalid id":
            continue
        (
            song_url,
            track_info,
            uri,
            artist_name,
            track_name,
            _id,
            _type,
        ) = self._get_spotify_track_info(track)

        database_entries.append(
            {
                "id": _id,
                "type": _type,
                "uri": uri,
                "track_name": track_name,
                "artist_name": artist_name,
                "song_url": song_url,
                "track_info": track_info,
                "last_updated": time_now,
                "last_fetched": time_now,
            }
        )
        if skip_youtube is False:
            val = None
            if youtube_cache:
                update = True
                with contextlib.suppress(SQLError):
                    val, update = await self.fetch_one(
                        "youtube", "youtube_url", {"track": track_info}
                    )
                if update:
                    val = None
            if val is None:
                val = await self._youtube_first_time_query(
                    ctx, track_info, current_cache_level=current_cache_level
                )
            if youtube_cache and val:
                task = ("update", ("youtube", {"track": track_info}))
                self.append_task(ctx, *task)

            if val:
                youtube_urls.append(val)
        else:
            youtube_urls.append(track_info)
        track_count += 1
        if notifier and ((track_count % 2 == 0) or (track_count == total_tracks)):
            await notifier.notify_user(
                current=track_count, total=total_tracks, key="youtube"
            )
    if CacheLevel.set_spotify().is_subset(current_cache_level):
        task = ("insert", ("spotify", database_entries))
        self.append_task(ctx, *task)
    return youtube_urls


# 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_first_time_query(
    self,
    ctx: commands.Context,
    query_type: str,
    uri: str,
    notifier: Notifier,
    skip_youtube: bool = False,
    current_cache_level: CacheLevel = CacheLevel.none(),
) -> List[str]:
    youtube_urls = []

    tracks = await self._spotify_fetch_tracks(
        query_type, uri, params=None, notifier=notifier
    )
    total_tracks = len(tracks)
    database_entries = []
    track_count = 0
    time_now = int(datetime.datetime.now(datetime.timezone.utc).timestamp())
    youtube_cache = CacheLevel.set_youtube().is_subset(current_cache_level)
    for track in tracks:
        if track.get("error", {}).get("message") == "invalid id":
            continue
        (
            song_url,
            track_info,
            uri,
            artist_name,
            track_name,
            _id,
            _type,
        ) = self._get_spotify_track_info(track)

        database_entries.append(
            {
                "id": _id,
                "type": _type,
                "uri": uri,
                "track_name": track_name,
                "artist_name": artist_name,
                "song_url": song_url,
                "track_info": track_info,
                "last_updated": time_now,
                "last_fetched": time_now,
            }
        )
        if skip_youtube is False:
            val = None
            if youtube_cache:
                update = True
                with contextlib.suppress(SQLError):
                    (val, update) = await self.database.fetch_one(
                        "youtube", "youtube_url", {"track": track_info}
                    )
                if update:
                    val = None
            if val is None:
                val = await self._youtube_first_time_query(
                    ctx, track_info, current_cache_level=current_cache_level
                )
            if youtube_cache and val:
                task = ("update", ("youtube", {"track": track_info}))
                self.append_task(ctx, *task)

            if val:
                youtube_urls.append(val)
        else:
            youtube_urls.append(track_info)
        track_count += 1
        if notifier and ((track_count % 2 == 0) or (track_count == total_tracks)):
            await notifier.notify_user(
                current=track_count, total=total_tracks, key="youtube"
            )
    if CacheLevel.set_spotify().is_subset(current_cache_level):
        task = ("insert", ("spotify", database_entries))
        self.append_task(ctx, *task)
    return youtube_urls