如何在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
相关产品推荐
相关产品推荐

