# Buggy code
async def send_help(self, ctx: Context, help_for: HelpTarget = None):
    """
    This delegates to other functions.

    For most cases, you should use this and only this directly.
    """
    if help_for is None or isinstance(help_for, dpy_commands.bot.BotBase):
        await self.format_bot_help(ctx)
        return

    if isinstance(help_for, str):
        try:
            help_for = self.parse_command(ctx, help_for)
        except NoCommand:
            await self.command_not_found(ctx, help_for)
            return
        except NoSubCommand as exc:
            if self.CONFIRM_UNAVAILABLE_COMMAND_EXISTENCES:
                await self.subcommand_not_found(ctx, exc.last, exc.not_found)
                return
            help_for = exc.last

    if isinstance(help_for, commands.Cog):
        await self.format_cog_help(ctx, help_for)
    else:
        await self.format_command_help(ctx, help_for)


# Traceback (discord.errors.Forbidden)
019-05-15 16:23:44] [ERROR] red: Exception in command 'help'
Traceback (most recent call last):
File "/usr/local/lib/python3.7/site-packages/discord/ext/commands/core.py", line 63, in wrapped
ret = await coro(*args, **kwargs)
File "/usr/local/lib/python3.7/site-packages/redbot/core/commands/help.py", line 513, in red_help
await ctx.bot.send_help_for(ctx, thing_to_get_help_for)
File "/usr/local/lib/python3.7/site-packages/redbot/core/bot.py", line 132, in send_help_for
return await self._help_formatter.send_help(ctx, help_for)
File "/usr/local/lib/python3.7/site-packages/redbot/core/commands/help.py", line 95, in send_help
await self.format_bot_help(ctx)
File "/usr/local/lib/python3.7/site-packages/redbot/core/commands/help.py", line 394, in format_bot_help
await self.send_pages(ctx, pages, embed=False)
File "/usr/local/lib/python3.7/site-packages/redbot/core/commands/help.py", line 500, in send_pages
await destination.send(page)
File "/usr/local/lib/python3.7/site-packages/discord/abc.py", line 776, in send
data = await state.http.send_message(channel.id, content, tts=tts, embed=embed, nonce=nonce)
File "/usr/local/lib/python3.7/site-packages/discord/http.py", line 218, in request
raise Forbidden(r, data)
discord.errors.Forbidden: FORBIDDEN (status code: 403): Cannot send messages to this user

# Fixed code
async def send_help(self, ctx: Context, help_for: HelpTarget = None):
    """
    This delegates to other functions.

    For most cases, you should use this and only this directly.
    """
    if help_for is None or isinstance(help_for, dpy_commands.bot.BotBase):
        await self.format_bot_help(ctx)
        return

    if isinstance(help_for, str):
        try:
            help_for = self.parse_command(ctx, help_for)
        except NoCommand:
            await self.command_not_found(ctx, help_for)
            return
        except NoSubCommand as exc:
            if await ctx.bot.db.help.verify_exists():
                await self.subcommand_not_found(ctx, exc.last, exc.not_found)
                return
            help_for = exc.last

    if isinstance(help_for, commands.Cog):
        await self.format_cog_help(ctx, help_for)
    else:
        await self.format_command_help(ctx, help_for)