将awaitMessages Promise存入数组后私信触发失效问题求助
Discord.js awaitMessages 超时无法触发的解决办法
你的核心问题出在过滤器的判断逻辑完全写反了:当前代码只接收机器人自己发送的消息,自然无法捕获用户的回复,最终导致超时。
错误原因分析
原过滤器代码:
function filter (x) { if (x.author.id === client.user.id) { ... } };
这里判断消息作者是机器人自身,而你需要的是接收目标用户(也就是你创建DM的user对象)的消息,逻辑完全颠倒了。
修正后的代码
// 创建DM频道 const dmc = await user.createDM(); // 修正过滤器:仅接收目标用户的消息 const filter = (message) => message.author.id === user.id; // 将收集任务存入数组 picks.push({ id: game.players[i].id, promise: dmc.awaitMessages({ filter, max: 1, time: 60 * 1000 }) }); // 后续获取用户回复 const collectedMessages = await picks[i].promise; const colx = collectedMessages.first(); // 使用Collection的first()方法比[0]更可靠
额外排查建议
- 确认
user变量是正确的目标用户对象,而非机器人自身或其他无关用户 - 检查DM频道是否成功创建,用户是否能正常接收并发送消息到该DM会话
- 若使用Discord.js v13及以上版本,
awaitMessages已被标记为过时,建议改用createMessageCollector:
const collector = dmc.createMessageCollector({ filter, max: 1, time: 60 * 1000 }); const collected = await collector; // 等待收集完成 picks.push({ id: game.players[i].id, promise: collected });
内容的提问来源于stack exchange,提问作者Peyton Sonnefeld
相关产品推荐
相关产品推荐

