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

Discord.js v13.3.1中awaitMessages无返回且不触发超时问题

Discord.js v13.3.1 awaitMessages无返回问题解决方案

核心问题原因

问题由参数格式不匹配v13版本API规范、缺失必要网关意图配置两个常见问题导致,最终让方法无法正常触发收集或超时逻辑。

具体修复步骤

    1. 修正awaitMessages的传参结构
      Discord.js v13开始,awaitMessages方法仅接收一个配置对象作为唯一参数,v12版本的(filter, options)双参数写法已经废弃。过滤器逻辑需要放到配置对象的filter属性中,你原来传入的第一个参数true是过滤器规则,需要迁移到配置内。
      修正后的代码示例:
try {
    // 所有参数统一放到同一个配置对象中
    const collectedMessages = await msg.author.dmChannel.awaitMessages({
        filter: () => true, // 对应原来的第一个参数true,即收集所有符合条件的消息
        time: 30000,
        max: 1,
        errors: ['time']
    });
    // 此处补充收集到消息后的处理逻辑
} catch (e) {
    msg.author.send("Looks like you took too long to reply!");
}
    1. 检查网关意图配置
      v13要求必须显式声明所有需要的网关意图,正常接收私信消息需要满足两个条件:
    • 初始化Client时添加DIRECT_MESSAGES和MESSAGE_CONTENT意图:
    const { Client, Intents } = require('discord.js');
    const client = new Client({
        intents: [
            Intents.FLAGS.GUILDS,
            Intents.FLAGS.GUILD_MESSAGES,
            Intents.FLAGS.DIRECT_MESSAGES, // 接收私信的必需意图
            Intents.FLAGS.MESSAGE_CONTENT // 读取消息内容的必需意图
        ]
    });
    
    • 前往Discord开发者后台的Bot管理页面,开启Message Content Intent开关,否则程序无法读取任何消息的内容。
    1. 额外兼容处理
      如果用户从未和你的Bot发起过私信,msg.author.dmChannel可能为null,建议先调用createDM()确保频道存在:
const dmChannel = await msg.author.createDM();
const collectedMessages = await dmChannel.awaitMessages({ /* 此处补充收集配置 */ });

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 17:27:02