【问题标题】:Disable a button after it is clicked on discord.py单击 discord.py 后禁用按钮
【发布时间】:2022-10-21 00:33:31
【问题描述】:

单击一次后,我试图禁用“下一步”按钮。当用户点击“下一步”时,机器人会用每周任务的下一页来回复自己。

global WEEK_NUM

next_button = interactions.Button(
    style=interactions.ButtonStyle.PRIMARY,
    label="Next",
    custom_id="next",
    disabled = False
)
async def week_choose(ctx: interactions.CommandContext, week_number: int):

        global WEEK_NUM
        WEEK_NUM = week_number
        embeds = interactions.Embed(
        title=f"Deadlines for Week {week_number}",
        description=Dates[week_number],
        color=0x00ff00
        )
        embeds.add_field(name="Summatives:", value=Summatives[week_number], inline=False)
        if (week_number == 1):
            await ctx.send(embeds = embeds, components = next_button)

        @bot.component("next")
        async def button_response(ctx):
            global WEEK_NUM
            forward = WEEK_NUM
            WEEK_NUM += 1
            forward = forward + 1
            embeds1 = interactions.Embed(
                title=f"Deadlines for Week {forward}",
                description=Dates[forward],
                color=0x00ff00
            )
            embeds1.add_field(name="Summatives:", value=Summatives[forward], inline=False)
            await ctx.send(embeds = embeds1, ephemeral=False)

如果我在await ctx.send(embeds = embeds, components = next_button) 之后添加next_button.disabled = True,它会在它被调用一次后禁用该按钮,这似乎是合乎逻辑的。有没有办法做到这一点?我正在使用interactions.py

【问题讨论】:

    标签: python button discord discord.py discord-interactions


    【解决方案1】:

    你可以试试这个: 我已经将它与 discord.py 一起使用,但我不确定它是否与 interaction.py 中的相同

    next_button.disabled = True
    await ctx.send(embeds = embeds1, ephermeral=False, components=next_button)
    

    【讨论】:

    • 感谢您的回答。如果我在ctx.send 之前禁用next_button,那么该按钮首先被禁用,并且不允许用户首先单击它。
    • 我的意思是把它放在代码底部的async def button_response(ctx):
    • 我知道了。我做了禁用第二个嵌入而不是第一个嵌入的“下一步”按钮的操作,这与我将其放在async def week_choose(ctx: interactions.CommandContext, week_number: int):@CodingLion 下时所做的类似
    【解决方案2】:

    我推荐使用interactions.py 的官方wait_for 扩展。等待按下按钮,它将为您提供被按下组件的ComponentContext。您可以在收到按钮按下后禁用按钮:

    disable_all_components()component_context.disabled = True

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-01-20
      • 2011-08-19
      • 2017-08-30
      相关资源
      最近更新 更多