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

Discord.js 私聊场景下awaitMessages无法收集用户回复的API密钥

问题原因
  • API版本不兼容:Discord.js v13及以上版本调整了awaitMessages的入参规则,旧版v12将filter作为第一个参数的写法已失效,新版本需要将filter属性放到配置对象中作为唯一入参传入。
  • 缺少网关意图:未在Client初始化时开启DIRECT_MESSAGES私聊消息意图,v14及更高版本还需要额外开启MessageContent意图,同时在Discord开发者后台手动打开对应开关,否则机器人无法捕获私聊消息内容。
  • 权限限制:用户屏蔽了机器人私信,或机器人未被授予私信相关权限,也会导致消息收集失败。
修正后代码示例
// 初始化Client阶段先配置所需网关意图
const { Client, IntentsBitField } = require('discord.js');
const client = new Client({
  intents: [
    IntentsBitField.Flags.Guilds,
    IntentsBitField.Flags.GuildMessages,
    IntentsBitField.Flags.DirectMessages, // 必选:开启私聊消息接收权限
    IntentsBitField.Flags.MessageContent // v14+版本必选,需要开发者后台同步开启对应开关
  ]
});

async function takeApiSecret(msg) {
  try {
    const botMsg = await msg.author.send("Please provide your api secret");
    // 调整awaitMessages的传参格式
    const collected = await botMsg.channel.awaitMessages({
      filter: collected => collected.author.id === msg.author.id,
      max: 1,
      time: 50000,
      errors: ['time']
    });
    // 提取用户提交的密钥
    const apiSecret = collected.first().content;
    // 此处可添加后续密钥处理逻辑
  } catch (e) {
    msg.author.send('Timeout');
  }
}

注:v14及以上版本使用消息内容相关能力,必须进入Discord开发者后台的Bot设置页,手动开启Message Content Intent选项,否则机器人无法读取任何消息的文本内容。

内容的提问来源于stack exchange,提问作者Muhammad Mohsin Ajmal

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 20:15:03