And nicer looking interactive help menu for discord.py

discord, py, bot
pip install discord-pretty-help==2.0.0


version python


An embed version of the built-in help command for discord.py

Inspired by the DefaultHelpCommand that discord.py uses, but revised for embeds and additional sorting on individual pages that can be "scrolled" through.


pip install discord-pretty-help


Example of how to use it:

from discord.ext import commands
from pretty_help import PrettyHelp

bot = commands.Bot(command_prefix="!", help_command=PrettyHelp())

Added Optional Args

  • color - Set the default embed color
  • delete_invoke - Delete the message that invoked the help command. Requires message delete permission. Defaults is False
  • ending_note - Set the footer of the embed. Ending notes are fed a commands.Context (ctx) and a PrettyHelp (help) instance for more advanced customization.
  • image_url - The url of the image to be used on the embed
  • index_title - Set the index page name default is "Categories"
  • menu - The menu to use for navigating pages. Uses a pretty_help.PrettyMenu() instance. Default is pretty_help.AppMenu()
  • no_category - Set the name of the page with commands not part of a category. Default is "No Category"
  • paginator- The paginator to use. One is created by default.
  • send_typing - A bool that indicates if the bot will send a typing indicator. Defaults to True
  • show_index - Show the index page or not
  • sort_commands - Sort commands and categories alphabetically
  • thumbnail_url - The url of the thumbnail to be used on the embed



  • Uses Emojis to navigate
  • active_time - Set the time (in seconds) that the message will be active. Default is 30s
  • delete_after_timeout - Delete the message after active_time instead of removing reactions. Default False
  • page_left - The emoji to use to page left
  • page_right - The emoji to use to page right
  • remove - The emoji to use to remove the help message



  • Uses Application Interactions (buttons) for navigating
  • timeout - The duration the interaction will be active for. Defaults to None.
  • ephemeral - Send as an ephemeral message. Defaults to False.


By default, the help will just pick a random color on every invoke. You can change this using the color argument:

Example of using a different menu and customization:

from discord.ext import commands
from pretty_help import EmojiMenu, PrettyHelp

# ":discord:743511195197374563" is a custom discord emoji format. Adjust to match your own custom emoji.
menu = EmojiMenu(page_left="\U0001F44D", page_right="👎", remove=":discord:743511195197374563", active_time=5)

# Custom ending note
ending_note = "The ending note from {ctx.bot.user.name}\nFor command {help.clean_prefix}{help.invoked_with}"

bot = commands.Bot(command_prefix="!")

bot.help_command = PrettyHelp(menu=menu, ending_note=ending_note)

The basic help command will break commands up by cogs. Each cog will be a different page. Those pages can be navigated.




  • Subcommands in pages are indicated with a 🔗, previously it was unclear they were sub commands of the page title
  • Support Application commands
  • Support for GroupCogs
  • Navigation using discord interactions e.g. Buttons and select menus


  • discord.py must already be installed to use this
  • manage-messages permission is recommended so reactions can be removed automatically

Forks for other discord.py based libraries (could be out of date):