Add some basic error handling for registration
This commit is contained in:
parent
41e3d13eaf
commit
fe780a04a2
@ -1130,8 +1130,6 @@ class BotBase(GroupMixin):
|
|||||||
command = self.get_command(command_name)
|
command = self.get_command(command_name)
|
||||||
if command is None:
|
if command is None:
|
||||||
raise errors.CommandNotFound(f'Command "{command_name}" is not found')
|
raise errors.CommandNotFound(f'Command "{command_name}" is not found')
|
||||||
elif not command.slash_command:
|
|
||||||
return
|
|
||||||
|
|
||||||
# Ensure the interaction channel is usable
|
# Ensure the interaction channel is usable
|
||||||
channel = interaction.channel
|
channel = interaction.channel
|
||||||
|
@ -1211,10 +1211,12 @@ class Command(_BaseCommand, Generic[CogT, P, T]):
|
|||||||
annotation, origin = annotation.__args__[0], None
|
annotation, origin = annotation.__args__[0], None
|
||||||
|
|
||||||
if origin is None:
|
if origin is None:
|
||||||
option["type"] = next(
|
generator = (num for t, num in application_option_type_lookup.items() if issubclass(annotation, t))
|
||||||
(num for t, num in application_option_type_lookup.items()
|
try:
|
||||||
if issubclass(annotation, t)), 3
|
option["type"] = next(generator, 3)
|
||||||
)
|
except Exception as err:
|
||||||
|
raise ApplicationCommandRegistrationError(self)
|
||||||
|
|
||||||
elif origin is Literal and len(origin.__args__) <= 25: # type: ignore
|
elif origin is Literal and len(origin.__args__) <= 25: # type: ignore
|
||||||
option["choices"] = [{
|
option["choices"] = [{
|
||||||
"name": literal_value,
|
"name": literal_value,
|
||||||
|
@ -33,6 +33,7 @@ if TYPE_CHECKING:
|
|||||||
|
|
||||||
from .converter import Converter
|
from .converter import Converter
|
||||||
from .context import Context
|
from .context import Context
|
||||||
|
from .core import Command
|
||||||
from .cooldowns import Cooldown, BucketType
|
from .cooldowns import Cooldown, BucketType
|
||||||
from .flags import Flag
|
from .flags import Flag
|
||||||
from discord.abc import GuildChannel
|
from discord.abc import GuildChannel
|
||||||
@ -93,6 +94,7 @@ __all__ = (
|
|||||||
'ExtensionFailed',
|
'ExtensionFailed',
|
||||||
'ExtensionNotFound',
|
'ExtensionNotFound',
|
||||||
'CommandRegistrationError',
|
'CommandRegistrationError',
|
||||||
|
'ApplicationCommandRegistrationError',
|
||||||
'FlagError',
|
'FlagError',
|
||||||
'BadFlagArgument',
|
'BadFlagArgument',
|
||||||
'MissingFlagArgument',
|
'MissingFlagArgument',
|
||||||
@ -915,6 +917,23 @@ class CommandRegistrationError(ClientException):
|
|||||||
type_ = 'alias' if alias_conflict else 'command'
|
type_ = 'alias' if alias_conflict else 'command'
|
||||||
super().__init__(f'The {type_} {name} is already an existing command or alias.')
|
super().__init__(f'The {type_} {name} is already an existing command or alias.')
|
||||||
|
|
||||||
|
class ApplicationCommandRegistrationError(ClientException):
|
||||||
|
"""An exception raised when a command cannot be converted to an
|
||||||
|
application command.
|
||||||
|
|
||||||
|
This inherits from :exc:`discord.ClientException`
|
||||||
|
|
||||||
|
.. versionadded:: 2.0
|
||||||
|
|
||||||
|
Attributes
|
||||||
|
----------
|
||||||
|
command: :class:`Command`
|
||||||
|
The command that failed to be converted.
|
||||||
|
"""
|
||||||
|
def __init__(self, command: Command) -> None:
|
||||||
|
self.command = command
|
||||||
|
super().__init__(f"{command.qualified_name} failed to converted to an application command.")
|
||||||
|
|
||||||
class FlagError(BadArgument):
|
class FlagError(BadArgument):
|
||||||
"""The base exception type for all flag parsing related errors.
|
"""The base exception type for all flag parsing related errors.
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user