Discord.py点击按钮后无法禁用问题求助
Discord.py点击按钮后禁用按钮的解决方法
直接修改button.disabled = True不会生效,因为Discord的UI状态由服务器端消息组件维护,本地修改属性不会自动同步到服务器,必须通过编辑原交互消息的组件来更新按钮状态。
修正后的代码示例
假设按钮属于某个View实例(这是Discord.py中管理组件的标准方式):
async def button_callback(interaction): # 标记按钮为禁用状态 button1.disabled = True # 编辑原交互消息,同步更新后的组件状态 await interaction.response.edit_message( content="You clicked me! Now I'm disabled.", view=button1.view # 传递包含禁用按钮的View实例 ) button1.callback = button_callback
如果按钮未关联到View,可以手动构建组件行来更新:
async def button_callback(interaction): button1.disabled = True # 重新构建组件并更新消息 await interaction.response.edit_message( content="You clicked me! Now I'm disabled.", components=[discord.ui.ActionRow(button1)] ) button1.callback = button_callback
关键说明
- 不要用
interaction.response.send_message()发送新消息,这会保留原消息中的未禁用按钮;必须编辑触发交互的原消息才能更新按钮状态。 - 确保传递的
view或components包含已经设置disabled=True的按钮实例,这样Discord服务器才会更新UI显示。
内容的提问来源于stack exchange,提问作者Ryan
相关产品推荐
相关产品推荐

