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
相关产品推荐
相关产品推荐

