From 31db6efc7faba0153d934792a0f97e707fb8de67 Mon Sep 17 00:00:00 2001 From: Rapptz Date: Tue, 12 Jan 2016 01:17:27 -0500 Subject: [PATCH] [commands] Fix handling of nested subcommand help handling. --- discord/ext/commands/bot.py | 20 +++++++++++++++----- 1 file changed, 15 insertions(+), 5 deletions(-) diff --git a/discord/ext/commands/bot.py b/discord/ext/commands/bot.py index 11a5e7515..9507dbe2d 100644 --- a/discord/ext/commands/bot.py +++ b/discord/ext/commands/bot.py @@ -29,7 +29,6 @@ import discord import inspect import importlib import sys -import functools from .core import GroupMixin, Command, command from .view import StringView @@ -58,6 +57,7 @@ def _default_help_command(ctx, *commands : str): """Shows this message.""" bot = ctx.bot destination = ctx.message.channel if not bot.pm_help else ctx.message.author + # help by itself just lists our own commands. if len(commands) == 0: pages = bot.formatter.format_help_for(ctx, bot) @@ -75,12 +75,22 @@ def _default_help_command(ctx, *commands : str): pages = bot.formatter.format_help_for(ctx, command) else: - try: - command = functools.reduce(dict.__getitem__, commands, bot.commands) - except KeyError as e: - yield from bot.send_message(destination, 'No command called "{}" found.'.format(e)) + name = commands[0] + command = bot.commands.get(name) + if command is None: + yield from bot.send_message(destination, 'No command called "{}" found.'.format(name)) return + for key in commands[1:]: + try: + command = command.commands.get(key) + if command is None: + yield from bot.send_message(destination, 'No command called "{}" found.'.format(key)) + return + except AttributeError: + yield from bot.send_message(destination, 'Command "{0.name}" has no subcommands.'.format(command)) + return + pages = bot.formatter.format_help_for(ctx, command) for page in pages: