2016-12-02 17:01:53 +13:00
|
|
|
def get_all_commands(bot):
|
|
|
|
# First lets create a set of all the parent names
|
2016-12-02 17:04:03 +13:00
|
|
|
parent_command_names = set(cmd.qualified_name for cmd in bot.commands.values())
|
2016-12-02 17:01:53 +13:00
|
|
|
all_commands = []
|
|
|
|
|
|
|
|
# Now lets loop through and get all the child commands for each command
|
|
|
|
# Only the command itself will be yielded if there are no children
|
|
|
|
for cmd_name in parent_command_names:
|
|
|
|
cmd = bot.commands.get(cmd_name)
|
|
|
|
for child_cmd in _get_all_commands(cmd):
|
|
|
|
all_commands.append(child_cmd)
|
|
|
|
|
|
|
|
return all_commands
|
|
|
|
|
|
|
|
def _get_all_commands(command):
|
|
|
|
yield command.qualified_name
|
|
|
|
try:
|
2016-12-02 18:02:33 +13:00
|
|
|
non_aliases = set(cmd.name for cmd in command.commands.values())
|
2016-12-02 17:59:59 +13:00
|
|
|
for cmd_name in non_aliases:
|
|
|
|
yield from _get_all_commands(command.commands[cmd_name])
|
2016-12-02 17:01:53 +13:00
|
|
|
except AttributeError:
|
|
|
|
pass
|
2016-12-09 16:10:05 +13:00
|
|
|
|
|
|
|
def find_command(bot, command):
|
|
|
|
# This method ensures the command given is valid. We need to loop through commands
|
|
|
|
# As bot.commands only includes parent commands
|
|
|
|
# So we are splitting the command in parts, looping through the commands
|
|
|
|
# And getting the subcommand based on the next part
|
|
|
|
# If we try to access commands of a command that isn't a group
|
|
|
|
# We'll hit an AttributeError, meaning an invalid command was given
|
|
|
|
# If we loop through and don't find anything, cmd will still be None
|
|
|
|
# And we'll report an invalid was given as well
|
|
|
|
cmd = None
|
|
|
|
|
|
|
|
for part in command.split():
|
|
|
|
try:
|
|
|
|
if cmd is None:
|
|
|
|
cmd = bot.commands.get(part)
|
|
|
|
else:
|
|
|
|
cmd = cmd.commands.get(part)
|
|
|
|
except AttributeError:
|
|
|
|
cmd = None
|
|
|
|
break
|
|
|
|
|
|
|
|
return cmd
|