discord.py rewrite - проверка наличия у бота определенного разрешения через @ command.before_invoke decorator - PullRequest
0 голосов
/ 06 июля 2019

Discord.py Переписать

В своем фрагменте кода я пытаюсь выполнить простую команду проверки, прежде чем она выполнит фактическую команду в разногласии:

@command.before_invoke
async def check_perms(self, ctx): # being defined in a class
    # if 'administrator' in bot.permissions <<< My goal
        # pass and let the following command run
    # else:
        # Make the bot say it can't run an admin only action and raise a custom exception

Как определить, есть ли у бота права администратора, прежде чем он выполнит команду? Я не хочу ставить блоки try / кроме каждой команды.

1 Ответ

0 голосов
/ 06 июля 2019

Вы можете использовать встроенный bot_has_permissions:

from discord.ext.commands import bot_has_permissions, Bot, BotMissingPermissions

class CustomException(Exception):
    pass

bot = Bot('!')

@bot.command()
@bot_has_permissions(administrator=True)
async def example(ctx):
    ...

@example.error
async def error_handler(ctx, error):
    if isinstance(error, BotMissingPermissions):
        await ctx.send(f"I need the permissions: {' '.join(error.missing_perms)}")
        raise CustomException() from error
    else:
        raise error
...