You need to enable JavaScript to run this app. Discord.js 为何在ready事件中使用awaitMessages失效且触发频道消息报错?
优惠活动
大模型
产品
解决方案
定价
更多

Discord.js 为何在ready事件中使用awaitMessages失效且触发频道消息报错?

常见报错核心原因&修正方案
  • 方法调用对象错误
    代码中在get_channel.send()的返回值上链式调用awaitMessages,但channel.send()执行后返回的是Bot刚发出的单条消息实例,awaitMessages()是频道实例(TextChannel)的原生方法,不属于单条消息对象,直接链式调用会抛出TypeError: channel.send(...).awaitMessages is not a function,是最直接的运行报错来源。
  • 变量拼写/作用域错误
    消息校验规则里的captha存在拼写偏差,若对应的验证码变量名实际为captcha,会因作用域内找不到匹配变量直接抛出ReferenceError,导致流程中断。
  • 缓存未加载完成触发空对象调用
    ready事件的触发节点早于bot全量同步服务器、频道缓存的时间点,此时立刻绑定每20秒执行一次的定时任务,很容易出现guilds.cache.get(x.id)取值为空的情况,后续调用.channels.cache.get()时会抛出Cannot read properties of undefined类报错。
  • 高版本参数格式不兼容
    discord.js v14及以上版本要求嵌入消息必须通过embeds数组格式传入,代码中旧写法{ embed }不符合参数规范,会直接触发格式校验报错。
  • 缺少必要intent导致功能失效
    新版discord.js需要手动开启对应权限意图:未开启GuildMessages时bot无法接收频道内的新消息事件;未开启MessageContent时bot无法读取普通用户发送的消息文本,会导致awaitMessages的校验规则永远无法命中,哪怕流程不报错也会一直等到超时。
修正后可运行的代码示例
// 客户端初始化阶段必须声明所需intent(v13+版本强制要求)
const client = new Client({
  intents: [
    'Guilds',
    'GuildMessages',
    'MessageContent'
  ]
})

client.on('ready', () => {
  // 延迟5秒启动定时任务,等缓存完全加载后再执行业务逻辑
  setTimeout(() => {
    setInterval(gift_start, 20000)
  }, 5000)

  async function gift_start() {
    // 逐层判断缓存取值是否存在,避免空对象调用
    const targetGuild = client.guilds.cache.get(x.id)
    if (!targetGuild) return
    const get_channel = targetGuild.channels.cache.get(x.channel)
    if (!get_channel) return

    // 按v14规范传入嵌入消息参数
    await get_channel.send({ embeds: [embed] })

    // 在频道实例上调用awaitMessages,传入符合规范的参数
    try {
      await get_channel.awaitMessages({
        filter: (message) => !message.bot && captcha === message.content.toLowerCase(),
        max: 1,
        time: 10 * 1000,
        errors: ['time']
      })
      await get_channel.send('Good!')
    } catch (err) {
      await get_channel.send('No answer!')
    }
  }
})

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.11.12 19:45:03