You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

将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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.26 00:30:00