如何显示命令检查的命令?

时间:2021-04-20 02:04:59

标签: discord.py

当你声明一个命令时,你知道那些 @commands.has_permissions() 是怎么回事吗?我正在尝试创建一个显示命令检查的命令,但我不确定如何继续。到目前为止,这是我的代码:

@commands.command(aliases=['sp'])
async def showperms(self, ctx, *, command_name):
    """Shows the permissions needed for a command"""

    com = self.bot.get_command(command_name)
    print(com.checks)

当我为命令执行此操作时,我得到以下输出:

[<function bot_has_permissions.<locals>.predicate at 0x7fd64b5ff940>, <function has_permissions.<locals>.predicate at 0x7fd64b5ff550>]

我相信它使用了 Discord 的许可整数,但几乎没有人知道如何使用它们。我不确定如何将其“翻译”为我可以发送的内容,例如 manage_messagesadministrator. 我用来测试的命令有这些检查顺便说一句:

@commands.has_permissions(manage_channels=True)
@commands.bot_has_permissions(manage_channels=True)

谢谢!!

1 个答案:

答案 0 :(得分:1)

如果您查看 discord.py documentationCommand.checks attribute,您会看到:

<块引用>

一个谓词列表,用于验证是否可以使用给定的上下文作为唯一参数来执行命令。

你问什么是谓词? Functional Programming HOWTO: Built-In Functions, A. M. Kuchling

<块引用>

“谓词是返回某些条件的真值的函数。”

因此,使用 Command.checks 返回的列表,您实际上无能为力。

要获得对函数的每项检查,您可能必须遍历包装函数的装饰器。我自己不知道该怎么做,但您可以在 this Stack Overflow question 中找到一个很好的例子。