You need to enable JavaScript to run this app. Discord.js async使用awaitMessages获取回复时返回内容为undefined的问题
优惠活动
大模型
产品
解决方案
定价
更多

Discord.js async使用awaitMessages获取回复时返回内容为undefined的问题

问题根源与调整方案

你拿到undefined的核心原因是完全误解了channel.awaitMessages()的返回值结构,不存在直接读返回值.content的路径。

具体排查与修正点

  • 返回值结构错配:awaitMessages拿到的不是单条消息对象,是Collection类型的消息集合,你原来写的const time = msgs3.content是直接访问集合上根本不存在的属性,自然返回undefined。正确的取值逻辑是从集合中取出单条消息实例,再读取它的content属性。
  • 缺少空值/超时判断:如果15秒内没有匹配到filter1规则的消息,返回的集合本身是空的,哪怕取值路径正确也会触发空引用报错。
  • 发送消息的逻辑缺失等待:原来的message.channel.send(schduele3)没加await,极端情况下会出现“等待用户输入的计时器已经启动,嵌入提示还没发送到频道”的时间差,导致用户看不到提示直接超时。
  • 检查过滤器逻辑:确认filter1没有把用户发送的有效消息过滤掉——比如是否限制了只能触发命令的作者回复、是否匹配了错误的频道/消息类型,哪怕用户真的发了内容,集合是空的就会拿不到有效消息对象。
  • 代码细节问题:原代码里schduele3变量名存在拼写错误(正确拼写为schedule),不影响即时运行,但长期维护时容易出现调用错值的问题。

修正后的参考代码

const schduele3 = new Discord.MessageEmbed()
  .setTitle('What time will should people start joining?')
  .setColor('BLUE')
  .setDescription('Send your message within 15 seconds! Make sure to include a time zone!')
// 加上await确保提示发出去再开始等用户输入
await message.channel.send(schduele3)

const msgs3 = await message.channel.awaitMessages(filter1, {
  max:1,
  time:15000,
  // 配置超时触发错误,方便单独处理用户未及时回复的场景
  errors: ['time']
})
// 从集合中取第一条匹配的消息实例,再读内容
const repliedMessage = msgs3.first()
const time = repliedMessage.content

内容的提问来源于stack exchange,提问作者no lol

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.11.02 11:15:08