如何在discord.js v13的MessageCollector达到设定时间限制后触发代码?
解决方法
discord.js v13 的 MessageCollector 会在收集结束时触发 end 事件,你可以通过监听该事件判断是否超时:
- 事件回调第一个参数为本次收集到的所有符合规则的消息集合
- 第二个参数为收集结束的原因,超时场景下该值固定为
time
你原有代码首先需要补全收集器实例的变量赋值,修正后的完整示例如下:
// 将创建的收集器实例赋值给collector变量,否则后续监听会报错 const collector = interaction.channel.createMessageCollector({ filter, time: 60000, max: 1 }); collector.on('collect',async msg => { // 原有eval命令逻辑 }); // 监听收集结束事件 collector.on('end', (collected, reason) => { if (reason === 'time') { // 此处填写超时后的处理逻辑,比如发送超时提示 interaction.followUp({ content: '等待输入超时,eval命令已取消', ephemeral: true }); } });
补充说明:除超时外,其他常见的结束原因还有:
max:达到设置的最大收集数量,你设置了max:1,收集到1条符合规则的消息后就会触发该原因的结束事件user:手动调用collector.stop()主动终止收集时触发
内容的提问来源于stack exchange,提问作者Spacehold
相关产品推荐
相关产品推荐

