You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Pycord中检测按钮在指定时长内未被按下?

实现按钮按下检测与超时逻辑

你可以通过自定义View类,结合Discord.py的超时机制来实现这个需求。下面是修改后的完整代码:

import discord
from discord.ui import Button, View

# 自定义View类,设置超时时间并重写超时处理方法
class TimeoutView(View):
    def __init__(self, timeout: float = 10.0):  # timeout设置为你需要的时长,比如10秒
        super().__init__(timeout=timeout)
        self.message = None  # 存储消息对象,方便超时后编辑

    # 超时触发的处理方法
    async def on_timeout(self):
        # 超时后的操作,比如编辑消息提示超时并移除按钮
        await self.message.edit(content="**超时未操作,已关闭按钮**", view=None)

# 创建按钮
button = Button(style=discord.ButtonStyle.green, emoji="◀️", custom_id="button1")

async def button_callback(interaction):
    await interaction.response.edit_message(content="**response 1**")
    # 按钮被按下后,停止超时计时器,避免触发超时逻辑
    view.stop()

button.callback = button_callback

# 实例化自定义View并添加按钮
view = TimeoutView(timeout=10.0)  # 这里设置超时时间
view.add_item(button)

# 编辑消息并绑定view
message = await message.edit(content="⠀⠀🍉⠀⠀⠀⠀⠀🍉⠀⠀⠀⠀⠀🍉", view=view)
view.message = message  # 将消息对象传给view,方便超时方法调用

关键说明

  • 自定义View与超时设置:继承View类,初始化时传入timeout参数(单位为秒),重写on_timeout方法定义超时后的具体操作。
  • 按钮回调停止超时:在按钮按下的回调函数中调用view.stop(),终止超时计时器,避免按钮触发后还执行超时逻辑。
  • 消息对象传递:将消息对象赋值给View的属性,确保超时方法能正常编辑目标消息。

内容的提问来源于stack exchange,提问作者Isohel

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.06 13:25:18