diff --git a/cogs/emote.py b/cogs/emote.py index f8b0c3d..db6565d 100644 --- a/cogs/emote.py +++ b/cogs/emote.py @@ -48,26 +48,25 @@ class Emotes: async def __local_check(self, context): if not context.guild: - await context.send( - f'{utils.SUCCESS_EMOTES[False]} Sorry, this command may only be used in a server.') + raise commands.NoPrivateMessage return False if ( not context.author.guild_permissions.manage_emojis or not context.guild.me.guild_permissions.manage_emojis ): - await context.send( - f'{utils.SUCCESS_EMOTES[False]} ' - "Sorry, you don't have enough permissions to run this command. " - 'You and I both need the Manage Emojis permission.') - return False + raise errors.MissingManageEmojisPermission return True async def on_command_error(self, context, error): - if isinstance(error, errors.EmoteManagerError): + if isinstance(error, (errors.EmoteManagerError, errors.MissingManageEmojisPermission)): await context.send(str(error)) + if isinstance(error, commands.NoPrivateMessage): + await context.send( + f'{utils.SUCCESS_EMOTES[False]} Sorry, this command may only be used in a server.') + @commands.command() async def add(self, context, *args): """Add a new emote to this server. diff --git a/utils/errors.py b/utils/errors.py index 0ba7f2f..35d5667 100644 --- a/utils/errors.py +++ b/utils/errors.py @@ -1,44 +1,49 @@ #!/usr/bin/env python3 # encoding: utf-8 -from discord.ext.commands import CommandError +from discord.ext import commands + +import utils -class EmoteManagerError(CommandError): +class MissingManageEmojisPermission(commands.MissingPermissions): + """The invoker or the bot doesn't have permissions to manage server emojis.""" + + def __init__(self): + super(Exception, self).__init__( + f'{utils.SUCCESS_EMOTES[False]} ' + "Sorry, you don't have enough permissions to run this command. " + 'You and I both need the Manage Emojis permission.') + +class EmoteManagerError(commands.CommandError): """Generic error with the bot. This can be used to catch all bot errors.""" pass - class HTTPException(EmoteManagerError): """The server did not respond with an OK status code.""" def __init__(self, status): super().__init__(f'URL error: server returned error code {status}') - class EmoteNotFoundError(EmoteManagerError): """An emote with that name was not found""" def __init__(self, name): super().__init__(f'An emote called `{name}` does not exist in this server.') - class InvalidImageError(EmoteManagerError): """The image is not a GIF, PNG, or JPG""" def __init__(self): super().__init__('The image supplied was not a GIF, PNG, or JPG.') - class NoMoreSlotsError(EmoteManagerError): """Raised in case all slots of a particular type (static/animated) are full""" def __init__(self): super().__init__('No more backend slots available.') - class PermissionDeniedError(EmoteManagerError): """Raised when a user tries to modify an emote without the Manage Emojis permission""" def __init__(self, name): super().__init__(f"You're not authorized to modify `{name}`.") - class DiscordError(Exception): """Usually raised when the client cache is being baka""" def __init__(self):