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

row.components[4].setDisabled(true)调用后按钮未实际禁用问题求助

按钮setDisabled(true)未生效的解决方案

我一看你的问题就明白症结在哪了——你只是修改了本地按钮对象的disabled属性,但没把这个更新同步给Discord服务器!控制台输出的是内存里的对象状态,可Discord客户端根本不知道你改了啥,自然不会显示按钮禁用。

核心问题

当你调用row.components[4].setDisabled(true)时,只是在本地修改了MessageButton的属性,但Discord的API不会自动感知这个变化。必须通过更新原消息的组件配置,才能让客户端显示出按钮禁用的状态。

修改后的代码示例

把你的逻辑调整一下,在设置按钮禁用后,通过交互对象的update方法把更新后的组件行发送给Discord:

if (id == "right") { 
  shopcounter += 1 
  if ((shopcounter+1) * 3 > itemarray.length) { 
    // 标记按钮为禁用
    row.components[4].setDisabled(true)
    // 更新原消息的组件,同步禁用状态
    return ButtonInteraction.first().update({ components: [row] })
      .then(() => ButtonInteraction.first().followUp("No more pages!"))
  }
  shopCommand(receivedMessage, user) 
  // 翻页后同步组件状态(保持交互一致性)
  return ButtonInteraction.first().update({ components: [row] })
    .then(() => ButtonInteraction.first().followUp("Next page!"))
}

为什么这样有效?

  • update方法会向Discord API发送请求,替换原消息的组件配置,这样客户端就能收到新的按钮状态并重新渲染
  • 用followUp发送提示消息,避免直接reply产生冗余消息,保持交互的连贯性

如果你的row是之前发送消息时的组件行,确保它是可复用的对象,或者在每次交互时正确获取当前组件状态再修改。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.30 19:32:30