Browse Source

[commands] Make Greedy ignore parsing errors.

pull/2481/head
Rapptz 5 years ago
parent
commit
1179df7e29
  1. 32
      discord/ext/commands/core.py

32
discord/ext/commands/core.py

@ -500,10 +500,10 @@ class Command(_BaseCommand):
previous = view.index
view.skip_ws()
argument = view.get_quoted_word()
try:
argument = view.get_quoted_word()
value = await self.do_conversion(ctx, converter, argument, param)
except CommandError:
except (CommandError, ArgumentParsingError):
view.index = previous
break
else:
@ -516,10 +516,10 @@ class Command(_BaseCommand):
async def _transform_greedy_var_pos(self, ctx, param, converter):
view = ctx.view
previous = view.index
argument = view.get_quoted_word()
try:
argument = view.get_quoted_word()
value = await self.do_conversion(ctx, converter, argument, param)
except CommandError:
except (CommandError, ArgumentParsingError):
view.index = previous
raise RuntimeError() from None # break loop
else:
@ -1498,7 +1498,7 @@ def bot_has_any_role(*items):
def has_permissions(**perms):
"""A :func:`.check` that is added that checks if the member has all of
the permissions necessary.
Note that this check operates on the current channel permissions, not the
guild wide permissions.
@ -1561,44 +1561,44 @@ def bot_has_permissions(**perms):
def has_guild_permissions(**perms):
"""Similar to :func:`.has_permissions`, but operates on guild wide
permissions instead of the current channel permissions.
If this check is called in a DM context, it will raise an
exception, :exc:`.NoPrivateMessage`.
.. versionadded:: 1.3.0
"""
def predicate(ctx):
if not ctx.guild:
raise NoPrivateMessage
permissions = ctx.author.guild_permissions
missing = [perm for perm, value in perms.items() if getattr(permissions, perm, None) != value]
if not missing:
return True
raise MissingPermissions(missing)
return check(predicate)
def bot_has_guild_permissions(**perms):
"""Similar to :func:`.has_guild_permissions`, but checks the bot
members guild permissions.
.. versionadded:: 1.3.0
"""
def predicate(ctx):
if not ctx.guild:
raise NoPrivateMessage
permissions = ctx.me.guild_permissions
missing = [perm for perm, value in perms.items() if getattr(permissions, perm, None) != value]
if not missing:
return True
raise BotMissingPermissions(missing)
return check(predicate)
def dm_only():

Loading…
Cancel
Save