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

Discord.js v13中message collector内return无法终止收集如何解决

问题原因

你在collect事件回调中使用return仅会终止当前这一次回调函数的执行,并不会改变收集器的运行状态,收集器会继续监听符合规则的消息,直到触发设置的max收集上限、time超时限制才会自动停止。

解决方案

检测到用户输入quit时,主动调用收集器实例的stop()方法即可手动终止收集器,你还可以给该方法传入自定义的结束原因,方便在后续的end事件中区分不同的结束场景做对应处理。

修正后的代码示例:

const filter = (m) => {
  return m.author.id === message.author.id;
};

const collector = message.channel.createMessageCollector({
  filter,
  max: 5,
  time: 1000 * 20,
});

collector.on("collect", (collect) => {
  if (collect.content.toLowerCase() === "quit") {
    message.reply("Bye!");
    // 手动终止收集器,传入自定义结束原因
    collector.stop("userQuit");
    return;
  }
  // 其他正常收集后的逻辑写在这里
});

// 可选:监听收集器结束事件,根据不同结束原因做处理
collector.on("end", (collected, reason) => {
  if (reason === "userQuit") {
    // 用户主动退出的后续逻辑
    return;
  }
  if (reason === "time") {
    message.reply("等待超时,Setup指令已终止");
    return;
  }
  if (reason === "limit") {
    message.reply("已达到最大输入次数,Setup指令已终止");
  }
});

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.23 20:15:05