# Buggy code
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._playlist_tracks(
        ctx, player, audio_dataclasses.Query.process_input(playlist.url)
    )
    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


# 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 _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._playlist_tracks(
        ctx, player, audio_dataclasses.Query.process_input(playlist.url)
    )
    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