# Buggy code
async def summon(self, ctx: commands.Context):
    """Summon the bot to a voice channel."""
    dj_enabled = await self.config.guild(ctx.guild).dj_enabled()
    if dj_enabled:
        if not await self._can_instaskip(ctx, ctx.author):
            return await self._embed_msg(
                ctx, _("You need the DJ role to summon the bot.")
            )
    try:
        if (
            not ctx.author.voice.channel.permissions_for(ctx.me).connect
            or not ctx.author.voice.channel.permissions_for(ctx.me).move_members
            and userlimit(ctx.author.voice.channel)
        ):
            return await self._embed_msg(
                ctx, _("I don't have permission to connect to your channel.")
            )
        if not self._player_check(ctx):
            await lavalink.connect(ctx.author.voice.channel)
            player = lavalink.get_player(ctx.guild.id)
            player.store("connect", datetime.datetime.utcnow())
        else:
            player = lavalink.get_player(ctx.guild.id)
            if ctx.author.voice.channel == player.channel:
                return
            await player.move_to(ctx.author.voice.channel)
    except AttributeError:
        return await self._embed_msg(ctx, _("Connect to a voice channel first."))
    except IndexError:
        return await self._embed_msg(
            ctx, _("Connection to Lavalink has not yet been established.")
        )


# 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 summon(self, ctx: commands.Context):
    """Summon the bot to a voice channel."""
    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)
    if vote_enabled or (vote_enabled and dj_enabled):
        if not can_skip and not is_alone:
            return await self._embed_msg(
                ctx,
                title=_("Unable To Join Voice Channel"),
                description=_("There are other people listening."),
            )
    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 Join Voice Channel"),
                description=_("You need the DJ role to summon the bot."),
            )

    try:
        if (
            not ctx.author.voice.channel.permissions_for(ctx.me).connect
            or not ctx.author.voice.channel.permissions_for(ctx.me).move_members
            and userlimit(ctx.author.voice.channel)
        ):
            ctx.command.reset_cooldown(ctx)
            return await self._embed_msg(
                ctx,
                title=_("Unable To Join Voice Channel"),
                description=_("I don't have permission to connect to your channel."),
            )
        if not self._player_check(ctx):
            await lavalink.connect(ctx.author.voice.channel)
            player = lavalink.get_player(ctx.guild.id)
            player.store("connect", datetime.datetime.utcnow())
        else:
            player = lavalink.get_player(ctx.guild.id)
            if ctx.author.voice.channel == player.channel:
                ctx.command.reset_cooldown(ctx)
                return
            await player.move_to(ctx.author.voice.channel)
    except AttributeError:
        ctx.command.reset_cooldown(ctx)
        return await self._embed_msg(
            ctx,
            title=_("Unable To Join Voice Channel"),
            description=_("Connect to a voice channel first."),
        )
    except IndexError:
        ctx.command.reset_cooldown(ctx)
        return await self._embed_msg(
            ctx,
            title=_("Unable To Join Voice Channel"),
            description=_("Connection to Lavalink has not yet been established."),
        )