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

如何实现Discord双向反应确认:我与被@用户均点击对勾才完成确认

双向反应确认功能修改方案

修改思路

  • 先提取被@的目标用户,增加非空校验
  • 定义状态变量分别记录发起方、被@方的确认状态
  • 调整✅和❌的过滤器逻辑,同时匹配双方用户ID
  • 触发反应时更新对应状态,双方均确认后再执行后续逻辑,任意一方点❌直接终止流程
  • 补充超时、取消的边界场景处理

完整修改后代码

// 首先提取被@的目标用户,确保有且仅有一个被@用户
const targetUser = message.mentions.users.first();
if (!targetUser) return message.channel.send("请先@需要确认的用户");

// 定义状态记录变量
let authorConfirmed = false;
let targetConfirmed = false;

let nine = await message.channel.send(embed)

await nine.react('✅');
await nine.react('❌');

// 修正原代码拼写错误:dipose => dispose
// ✅ 过滤器:匹配双方用户的确认点击
const confirmFilter = (reaction, user) => 
  reaction.emoji.name === '✅' && 
  [message.author.id, targetUser.id].includes(user.id) &&
  !user.bot; // 排除机器人自己的点击
const confirmCollector = nine.createReactionCollector(confirmFilter, { time: 30000, dispose: true });

// ❌ 过滤器:任意一方点击取消都生效
const cancelFilter = (reaction, user) => 
  reaction.emoji.name === '❌' && 
  [message.author.id, targetUser.id].includes(user.id) &&
  !user.bot;
const cancelCollector = nine.createReactionCollector(cancelFilter, { time: 30000, dispose: true, max: 1 });

// 监听确认点击
confirmCollector.on('collect', (reaction, user) => {
  // 更新对应状态
  if (user.id === message.author.id) authorConfirmed = true;
  if (user.id === targetUser.id) targetConfirmed = true;

  // 双方都确认后执行后续逻辑
  if (authorConfirmed && targetConfirmed) {
    // 清理收集器
    confirmCollector.stop();
    cancelCollector.stop();
    // 这里替换为你要执行的后续业务代码
  }
});

// 监听取消点击
cancelCollector.on('collect', () => {
  confirmCollector.stop();
  cancelCollector.stop();
  // 这里替换为取消后的业务逻辑
});

// 监听超时事件
confirmCollector.on('end', (_, reason) => {
  if (reason === 'time') {
    cancelCollector.stop();
    // 这里替换为超时后的业务逻辑
  }
});

关键修改说明

  • 新增被@用户提取逻辑,避免无确认目标的异常
  • 用独立状态变量记录双方确认情况,杜绝同一用户重复点击生效的问题
  • 修正原代码中dipose的拼写错误,正确参数为dispose
  • 过滤器新增!user.bot判断,避免机器人自己的反应触发收集逻辑
  • 所有异常分支(取消、超时)都添加了收集器清理逻辑,避免内存泄漏

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 23:27:03