Discord.js中awaitMessages/createMessageCollector无法捕获消息求助
Discord.js v14 问答机器人消息捕获问题修复
核心问题
Discord.js v14 已经彻底移除了 awaitMessages() 方法,你当前代码里还在调用这个已废弃的方法,这就是消息完全无法被捕获的根本原因。
修复后的代码
改用 v14 官方推荐的 createMessageCollector() 方法实现消息收集逻辑,功能和原有需求完全一致:
const quiz = require('./quiz.json'); const { SlashCommandBuilder } = require('discord.js'); module.exports = { data: new SlashCommandBuilder() .setName('quiz') .setDescription('quiz time!'), async execute(interaction) { const item = quiz[Math.floor(Math.random() * quiz.length)]; const filter = response => { return item.answers.some(answer => answer.toLowerCase() === response.content.toLowerCase()); }; // 发送题目 await interaction.reply({ content: item.question }); // 创建消息收集器,设置过滤规则、最大收集数和超时时间 const collector = interaction.channel.createMessageCollector({ filter, max: 1, time: 30000 }); // 捕获到正确答案时触发 collector.on('collect', msg => { interaction.followUp(`${msg.author} got the correct answer!`); collector.stop(); }); // 收集结束时触发(超时或已收集到目标数量) collector.on('end', collected => { if (collected.size === 0) { interaction.followUp('Looks like nobody got the answer this time.'); } }); }, };
额外确认项
- 确保Discord开发者平台中,机器人的Privileged Gateway Intents里
MESSAGE CONTENT INTENT已启用,服务器权限包含ViewChannel、SendMessages、ReadMessageHistory - 检查
quiz.json格式是否正确,answers字段必须是字符串数组,示例格式:
[ { "question": "What's 2+2?", "answers": ["4", "four"] } ]
内容的提问来源于stack exchange,提问作者maz
相关产品推荐
相关产品推荐

