小编Are*_*res的帖子

使用后禁用按钮

最近我决定重写我的不和谐机器人并添加按钮。到目前为止我遇到的主要问题是,我无法在按下按钮后立即禁用按钮,人们告诉我,事实上button.disabled=True,它会禁用按钮,但它只是将其禁用,所以它永远不会被禁用按下。我想要的是能够单击它并执行它的操作,然后禁用它。

作为参考,我将放置一些代码

我使用 disnake,一个discord.py 分支,它确实具有与 dpy 相同的语法,但我们有按钮和斜杠命令、下拉菜单等

class BlurpleButton(Button):
    def __init__(self, label, emoji=None):
        super().__init__(label=label, style=discord.ButtonStyle.blurple, emoji=emoji)
Run Code Online (Sandbox Code Playgroud)

这是为了更容易使用按钮,我创建了一个模板,我可以在任何命令上使用它

class CustomView(View):
    def __init__(self, member: disnake.Member):
        self.member = member
        super().__init__(timeout=180)

    async def interaction_check(self, inter: disnake.MessageInteraction) -> bool:
        if inter.author != self.member:
            await inter.response.send_message(content="You don't have permission to press this button.", ephemeral=True)
            return False
        return True
Run Code Online (Sandbox Code Playgroud)

这是为了按钮只能由提到的成员按下,例如,如果我这样做/test @member(由于不和谐新的特权意图,我迁移到斜杠命令),那么只有该成员才能按下它,而其他人则无法按下。

到目前为止,一切正常,现在我们在命令中“组装”它之后

@commands.slash_command(description='test')
    async def test(self, inter):

         (do stuff in there)
         . . .
        button1 = BlurpleButton("Button name")
        view=CustomView(member)
        view.add_item(button1)

        async …
Run Code Online (Sandbox Code Playgroud)

python python-3.x discord.py pycord disnake

3
推荐指数
1
解决办法
7371
查看次数

仅显示字典中的 True 值

我正在尝试显示字典中成员的权限,如下所示

\n
permdict = {\n                    'Administrator': f'{member.guild_permissions.administrator}',\n                    'Ban Members': f'{member.guild_permissions.ban_members}',\n                    'Kick members': f'{member.guild_permissions.kick_members}'}\n
Run Code Online (Sandbox Code Playgroud)\n

此时这将返回类似:

\n
{'Administrator': 'True', 'Ban Members': 'True', 'Kick members': 'True'}\n
Run Code Online (Sandbox Code Playgroud)\n

或者 false 如果用户没有这些权限,我的目标是能够过滤具有 True 值的键,所以如果用户只有 x/3 权限(字典会更大,但我不希望继续进行,除非我能够解决我的问题),仅显示具有 True 值的密钥,如果用户在字典中没有任何权限,它将返回任何内容或字符串 ex,You have no moderation roles to dispaly并且如果存在某些权限只需通过按键等即可显示它们Administrator, Kick members。。我没有太多地使用字典中的布尔值,所以我希望我能在这里找到解决方案。

\n

我还尝试将它与.join

\n
 permdict = {'Administrator': f'{member.guild_permissions.administrator}',\n                    'Ban Members': f'{member.guild_permissions.ban_members}',\n                    'Kick members': f'{member.guild_permissions.kick_members}'}\n\n permf = ", ".join(permdict) \xe2\x80\x8b\n
Run Code Online (Sandbox Code Playgroud)\n

结果就是我想要的

\n
Administrator, Ban Members, Kick members \xe2\x80\x8b\n
Run Code Online (Sandbox Code Playgroud)\n

但问题是,即使用户没有这些权限,它们仍然会显示。我觉得我已经很接近找到解决方案了,但我无法弄清楚

\n

python discord discord.py

1
推荐指数
1
解决办法
1887
查看次数

标签 统计

discord.py ×2

python ×2

discord ×1

disnake ×1

pycord ×1

python-3.x ×1