Global checks are checks that are executed before regular per-command
checks except done to every command that the bot has registered. This
allows you to have checks that apply to every command without having to
override `on_message` or appending the check to every single command.
This change should make it a bit more intuitive to get the original
exception without having the gotcha of checking ``isinstance`` inside
the error handler.
This happened due to not resetting the `invoked_subcommand` state
tracking. Since the `invoked_subcommand` was not reset, it would always
assume that it was valid and repeatedly call it when passed invalid
subcommands/arguments.
Provide fallback on_command_error - will only fire if no cog handlers and
no local handler.
Propagate exceptions in checks and argument parsing to bot.
Code is a little more straightforward. The Member and Channel special
cases will now work in private message contexts when given a name. The
Member special case will also work if you pass in a name and
discriminator combo.
Previously it would both forward and invoke depending if there were no
kwargs given. Now it just passes in the arguments to another command
without doing any special casing on the no argument case.
This led to decorating a lot of things into @asyncio.coroutine.
Unfortunately there's no way to lower the amount of decoration since
coroutines spread like a virus.
The behaviour of passing in pm_help=None makes it so the bot will only
send private messages if the length of the message is too "big", which
is defined as having more than 1000 characters in the output.
There was a bug with has_permissions that checked the bot's permissions
instead of the message author which was also corrected. The docstring
itself hinted that it checked for the author rather than the bot.