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

discord.js按钮交互中如何告知点击按钮的用户当前不是其操作回合

解决方案

核心思路

直接在filter中放行所有用户的点击事件,所有交互统一进入collect回调后再做权限分支判断:非目标用户直接返回操作提示,目标用户执行正常业务逻辑,既不会漏过非授权用户的点击,也不会让非授权用户触发后续操作流程。

调整后的代码示例

1. 修改filter逻辑

const filter = (button) => {
  button.deferUpdate(); // 统一处理按钮延迟更新,避免加载超时
  return true; // 放行所有用户的点击事件
}

2. 重构collect回调逻辑

collector.on('collect', b => {
  // 非当前操作回合的用户,返回提示后终止逻辑
  if (b.user.id !== info.userid) {
    b.followUp({
      content: "当前不是你的操作回合,仅指定用户可操作该组件",
      ephemeral: true // 提示仅触发点击的用户可见,不会占用公共频道消息位
    });
    return;
  }

  // 以下为仅目标用户可执行的正常业务逻辑
  // ...你的原有业务代码
})

注意事项

  • 所有业务逻辑必须放在权限判断之后,避免非授权用户误触发操作
  • 如果存在多回合轮流操作的需求,只需全局维护当前可操作用户的变量,每次回合切换时更新该变量即可,不用修改collector的核心逻辑
  • 若需要限制点击的组件类型,可在filter中补充组件类型判断逻辑,无需调整权限判断流程

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 16:18:00