Discord.js v13消息采集器过滤失效 误响应自身及他人消息如何解决?
核心错误原因
你在创建消息采集器时传递的配置对象键名填写错误。discord.js v13 中 channel.createMessageCollector 方法接收的配置项里,过滤器对应的键是固定为filter,你将自定义的过滤函数命名为filter1后直接将其作为键名传入配置,相当于没有配置生效的过滤规则,采集器会收集所有符合时间、数量限制的消息,自然会包含机器人自身和其他用户发送的内容。
修正方案
仅需要修改创建采集器的传参逻辑即可,两种写法可选:
- 保留你现有的
filter1函数,修改传参键名:
// 仅修改这一行即可,将filter1改为 filter: filter1 const collector1 = await message.channel.createMessageCollector({ filter: filter1, max: 1, time: 120000 })
- 直接把过滤规则写在配置项中,更简洁:
const collector1 = await message.channel.createMessageCollector({ filter: msg => msg.author.id === mentioned.id, max: 1, time: 120000 })
额外优化建议
可以在过滤规则中新增机器人账号排除逻辑,彻底避免机器人自身发送的消息被误采集:
const filter1 = (msg) => { // 先排除所有机器人发送的消息,再匹配被@用户的ID return !msg.author.bot && msg.author.id === mentioned.id }
内容的提问来源于stack exchange,提问作者MegaMix_Craft
相关产品推荐
相关产品推荐

