# Buggy code
async def percent(self, ctx: commands.Context):
    """Queue percentage."""
    if not self._player_check(ctx):
        return await self._embed_msg(ctx, _("Nothing playing."))
    player = lavalink.get_player(ctx.guild.id)
    queue_tracks = player.queue
    requesters = {"total": 0, "users": {}}

    async def _usercount(req_username):
        if req_username in requesters["users"]:
            requesters["users"][req_username]["songcount"] += 1
            requesters["total"] += 1
        else:
            requesters["users"][req_username] = {}
            requesters["users"][req_username]["songcount"] = 1
            requesters["total"] += 1

    for track in queue_tracks:
        req_username = "{}#{}".format(
            track.requester.name, track.requester.discriminator
        )
        await _usercount(req_username)

    try:
        req_username = "{}#{}".format(
            player.current.requester.name, player.current.requester.discriminator
        )
        await _usercount(req_username)
    except AttributeError:
        return await self._embed_msg(ctx, _("There's  nothing in the queue."))

    for req_username in requesters["users"]:
        percentage = float(requesters["users"][req_username]["songcount"]) / float(
            requesters["total"]
        )
        requesters["users"][req_username]["percent"] = round(percentage * 100, 1)

    top_queue_users = heapq.nlargest(
        20,
        [
            (x, requesters["users"][x][y])
            for x in requesters["users"]
            for y in requesters["users"][x]
            if y == "percent"
        ],
        key=lambda x: x[1],
    )
    queue_user = ["{}: {:g}%".format(x[0], x[1]) for x in top_queue_users]
    queue_user_list = "\n".join(queue_user)
    embed = discord.Embed(
        colour=await ctx.embed_colour(),
        title=_("Queued and playing tracks:"),
        description=queue_user_list,
    )
    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 percent(self, ctx: commands.Context):
    """Queue percentage."""
    if not self._player_check(ctx):
        return await self._embed_msg(ctx, title=_("Nothing playing."))
    player = lavalink.get_player(ctx.guild.id)
    queue_tracks = player.queue
    requesters = {"total": 0, "users": {}}

    async def _usercount(req_username):
        if req_username in requesters["users"]:
            requesters["users"][req_username]["songcount"] += 1
            requesters["total"] += 1
        else:
            requesters["users"][req_username] = {}
            requesters["users"][req_username]["songcount"] = 1
            requesters["total"] += 1

    for track in queue_tracks:
        req_username = "{}#{}".format(
            track.requester.name, track.requester.discriminator
        )
        await _usercount(req_username)

    try:
        req_username = "{}#{}".format(
            player.current.requester.name, player.current.requester.discriminator
        )
        await _usercount(req_username)
    except AttributeError:
        return await self._embed_msg(ctx, title=_("There's  nothing in the queue."))

    for req_username in requesters["users"]:
        percentage = float(requesters["users"][req_username]["songcount"]) / float(
            requesters["total"]
        )
        requesters["users"][req_username]["percent"] = round(percentage * 100, 1)

    top_queue_users = heapq.nlargest(
        20,
        [
            (x, requesters["users"][x][y])
            for x in requesters["users"]
            for y in requesters["users"][x]
            if y == "percent"
        ],
        key=lambda x: x[1],
    )
    queue_user = ["{}: {:g}%".format(x[0], x[1]) for x in top_queue_users]
    queue_user_list = "\n".join(queue_user)
    await self._embed_msg(
        ctx, title=_("Queued and playing tracks:"), description=queue_user_list
    )