Are*_*res 3 python python-3.x discord.py pycord disnake
最近我决定重写我的不和谐机器人并添加按钮。到目前为止我遇到的主要问题是,我无法在按下按钮后立即禁用按钮,人们告诉我,事实上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 def button_callback(inter):
await inter.send(embed=embedname2)
button1.callback = button_callback
await inter.send(embed=embed1, view=view)
Run Code Online (Sandbox Code Playgroud)
现在,这段代码正在执行它的预期功能,发送一个嵌入(让我们只说我把......很少的嵌入放在哪里)并附加到我们单击它发送时所拥有的嵌入,并且那里button1有embedname2 东西不再工作了,在embedname2发送后我继续以任何方式尝试,如果我在回调中添加,则通过单击一次来禁用自身的按钮button1.disabled=True,该按钮将被发送禁用,而不会被单击。我将回调放在命令中的主要原因是能够在按钮触发时使用嵌入,如果我将其放在子类按钮或视图中,我就不能再这样做了。
所以这就是我的全部问题,如果您知道更好的解决方案,包括使用嵌入并且只有会员可以按下按钮,请告诉我,我花了一个多星期的时间试图解决这个问题,但我无法解决问题
您可以通过在按钮的回调中设置button.disabledto来完成此操作。True然后,您还需要编辑原始消息以反映此更改。
@commands.slash_command(description='test')
async def test(self, slash_inter: disnake.ApplicationCommandInteraction, member: disnake.Member):
view = CustomView(member)
button1 = BlurpleButton("TEST")
view.add_item(button1)
async def button_callback(button_inter: disnake.MessageInteraction):
button1.disabled = True
await button_inter.send(embed=embedname2)
await slash_inter.edit_original_message(view=view)
button1.callback = button_callback
await slash_inter.send(embed=embed1, view=view)
Run Code Online (Sandbox Code Playgroud)
disnake.Member注意:要使 /test @member 正常工作,您需要向斜杠命令添加一个参数。
| 归档时间: |
|
| 查看次数: |
7371 次 |
| 最近记录: |