# Buggy code
async def prev(self, ctx: commands.Context):
    """Skip to the start of the previously played track."""
    if not self._player_check(ctx):
        return await self._embed_msg(ctx, _("Nothing playing."))
    dj_enabled = await self.config.guild(ctx.guild).dj_enabled()
    player = lavalink.get_player(ctx.guild.id)
    if dj_enabled:
        if not await self._can_instaskip(ctx, ctx.author) and not await self._is_alone(
            ctx
        ):
            return await self._embed_msg(ctx, _("You need the DJ role to skip tracks."))
    if (
        not ctx.author.voice or ctx.author.voice.channel != player.channel
    ) and not await self._can_instaskip(ctx, ctx.author):
        return await self._embed_msg(
            ctx, _("You must be in the voice channel to skip the music.")
        )
    if player.fetch("prev_song") is None:
        return await self._embed_msg(ctx, _("No previous track."))
    else:
        track = player.fetch("prev_song")
        player.add(player.fetch("prev_requester"), track)
        self.bot.dispatch(
            "red_audio_track_enqueue", player.channel.guild, track, ctx.author
        )
        queue_len = len(player.queue)
        bump_song = player.queue[-1]
        player.queue.insert(0, bump_song)
        player.queue.pop(queue_len)
        await player.skip()
        query = audio_dataclasses.Query.process_input(player.current.uri)
        if query.is_local:
            if player.current.title == "Unknown title":
                description = "{}".format(query.track.to_string_hidden())
            else:
                song = bold("{} - {}").format(
                    player.current.author, player.current.title
                )
                description = "{}\n{}".format(song, query.track.to_string_hidden())
        else:
            description = f"**[{player.current.title}]({player.current.uri})**"
        embed = discord.Embed(
            colour=await ctx.embed_colour(),
            title=_("Replaying Track"),
            description=description,
        )
        await ctx.send(embed=embed)


# 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 prev(self, ctx: commands.Context):
    """Skip to the start of the previously played track."""
    if not self._player_check(ctx):
        return await self._embed_msg(ctx, title=_("Nothing playing."))
    dj_enabled = self._dj_status_cache.setdefault(
        ctx.guild.id, await self.config.guild(ctx.guild).dj_enabled()
    )
    vote_enabled = await self.config.guild(ctx.guild).vote_enabled()
    is_alone = await self._is_alone(ctx)
    is_requester = await self.is_requester(ctx, ctx.author)
    can_skip = await self._can_instaskip(ctx, ctx.author)
    player = lavalink.get_player(ctx.guild.id)
    if (
        not ctx.author.voice or ctx.author.voice.channel != player.channel
    ) and not can_skip:
        return await self._embed_msg(
            ctx,
            title=_("Unable To Skip Tracks"),
            description=_("You must be in the voice channel to skip the track."),
        )
    if vote_enabled or vote_enabled and dj_enabled:
        if not await self._can_instaskip(ctx, ctx.author) and not await self._is_alone(
            ctx
        ):
            return await self._embed_msg(
                ctx,
                title=_("Unable To Skip Tracks"),
                description=_(
                    "There are other people listening - vote to skip instead."
                ),
            )
    if dj_enabled and not vote_enabled:
        if not (can_skip or is_requester) and not is_alone:
            return await self._embed_msg(
                ctx,
                title=_("Unable To Skip Tracks"),
                description=_(
                    "You need the DJ role or be the track requester "
                    "to enqueue the previous song tracks."
                ),
            )

    if player.fetch("prev_song") is None:
        return await self._embed_msg(
            ctx, title=_("Unable To Play Tracks"), description=_("No previous track.")
        )
    else:
        track = player.fetch("prev_song")
        player.add(player.fetch("prev_requester"), track)
        self.bot.dispatch(
            "red_audio_track_enqueue", player.channel.guild, track, ctx.author
        )
        queue_len = len(player.queue)
        bump_song = player.queue[-1]
        player.queue.insert(0, bump_song)
        player.queue.pop(queue_len)
        await player.skip()
        description = get_track_description(player.current)
        embed = discord.Embed(title=_("Replaying Track"), description=description)
        await self._embed_msg(ctx, embed=embed)