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

discord.js v13如何获取消息中第二个被提及的成员

Discord.js v13 获取多名提及成员的正确方法

原有代码失效原因

两段测试代码无法获取第二个被提及成员,核心是API用法错误:

  • 第一段代码调用的.second()方法不存在:message.mentions.members返回的是discord.js的Collection数据结构,该结构没有内置.second()方法,调用后会返回undefined,因此变量永远会 fallback 到指令发送者本身message.member。
  • 第二段代码的.first()传参错误:.first()方法的参数是需要返回的元素个数(数字类型),不支持传入索引值/数组取指定位置元素,传入[0]/[1]属于无效传参,无法拿到对应位置的成员。

可用实现方案

message.mentions.members返回的Collection会按照消息中@用户的顺序存储成员对象,以下两种写法都可以正确获取2名被提及成员,适配discord.js v13 + Node.js v16环境:

方案1:解构取值(最简洁)

直接从Collection的迭代器中按顺序解构取值,支持直接设置默认值:

// 按@顺序取前两名成员,第二名未@时默认取指令发送者
const [firstMention, secondMention = message.member] = message.mentions.members.values();

方案2:按索引取值(逻辑更直观)

使用Collection内置的.at()方法,传入索引位置直接获取对应位置的成员:

// 获取第一个被@的成员(索引从0开始)
const firstMention = message.mentions.members.at(0);
// 获取第二个被@的成员,不存在时默认取指令发送者
const secondMention = message.mentions.members.at(1) || message.member;

补充建议:正式使用时建议增加参数校验,避免用户未@足够成员时指令逻辑出错,示例:

if (!firstMention) return message.reply("请至少@1名目标用户后再使用该指令");

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 18:18:39