当你声明一个命令时,你知道那些 @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_messages
或 administrator.
我用来测试的命令有这些检查顺便说一句:
@commands.has_permissions(manage_channels=True)
@commands.bot_has_permissions(manage_channels=True)
谢谢!!
答案 0 :(得分:1)
如果您查看 discord.py
documentation 的 Command.checks
attribute,您会看到:
一个谓词列表,用于验证是否可以使用给定的上下文作为唯一参数来执行命令。
你问什么是谓词? Functional Programming HOWTO: Built-In Functions, A. M. Kuchling:
<块引用>“谓词是返回某些条件的真值的函数。”
因此,使用 Command.checks
返回的列表,您实际上无能为力。
要获得对函数的每项检查,您可能必须遍历包装函数的装饰器。我自己不知道该怎么做,但您可以在 this Stack Overflow question 中找到一个很好的例子。