Discord.js v13.3.1中awaitMessages无返回且不触发超时问题
Discord.js v13.3.1 awaitMessages无返回问题解决方案
核心问题原因
问题由参数格式不匹配v13版本API规范、缺失必要网关意图配置两个常见问题导致,最终让方法无法正常触发收集或超时逻辑。
具体修复步骤
- 修正
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!"); }
- 检查网关意图配置
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开关,否则程序无法读取任何消息的内容。
- 检查网关意图配置
- 额外兼容处理
如果用户从未和你的Bot发起过私信,msg.author.dmChannel可能为null,建议先调用createDM()确保频道存在:
- 额外兼容处理
const dmChannel = await msg.author.createDM(); const collectedMessages = await dmChannel.awaitMessages({ /* 此处补充收集配置 */ });
内容的提问来源于stack exchange,提问作者GomezStriker
相关产品推荐
相关产品推荐

