discord.CommandPermission 究竟是如何工作的?

How exactly does discord.CommandPermission work?

我尝试将一些只有具有适当权限的人才能使用的斜杠命令变灰。我发现如果你设置 default_permission = False,你可以为每个人将它们灰显。然后我发现您可以提供一个权限属性。但我就是无法让它工作。 我试过像这样使用它 permissions = [discord.CommandPermission(id=8589934592, type=3)] 但是这个命令对每个人都被禁用了。 我的完整命令如下所示:

@slash_command(name='testcommand', description='its just a test', guild_ids = [831161440705839124], permissions = [discord.CommandPermission(id=8589934592, type=3)])
async def testcommand(self, ctx, channel : Option(discord.TextChannel, "a normal test", required = True)):
    print("Test passed!")

如果有人知道我应该如何使用权限属性或其他方法来禁用需要特定权限的斜杠命令,请告诉我!

我不知道它是否改变了什么,但我使用的是 Pycord 2.0.0b5

查看 permission decorator 的源代码,很明显您的 type 整数无效(不确定他们为什么不为此编写任何验证或文档,我猜他们预计每个人都会使用 @permissions 装饰器)

def decorator(func: Callable):
    if not role_id is None:
        app_cmd_perm = CommandPermission(role_id, 1, permission, guild_id)
    elif not user_id is None:
        app_cmd_perm = CommandPermission(user_id, 2, permission, guild_id)
    else:
        raise ValueError("role_id or user_id must be specified!")

如果您尝试将角色列入白名单,您应该提供类型 1,如果您想将用户列入白名单,请提供类型 2


附带说明一下,Discord 刚刚发布了他们的 improved slash command permission system,让您可以更加灵活地决定谁可以使用哪个命令以及在哪里使用。在 Pycord 支持之前可能需要一段时间,但您可能希望在接下来的几周内关注它