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

如何在discord.js v13中获取所有被提及成员和角色的ID

Discord.js v13 提取提及用户ID解决方案

问题原因

message.mentions 是discord.js封装的MessageMentions类型对象,本身包含了@用户、@角色、@频道、@全体成员等所有提及场景的完整元数据,所以直接打印会输出大量额外信息,不能直接拿到纯用户ID。

实现方案

1. 仅提取@提及的用户ID

message.mentions.users 是discord.js内置的类Map集合,存储了所有被@的用户对象,直接调用map方法即可提取所有用户ID:

// 获取所有被@用户的ID数组
const mentionedUserIds = message.mentions.users.map(user => user.id);
console.log(mentionedUserIds);

// 仅取第一个被@用户的ID,可选链避免未提及时报错
const firstMentionedUserId = message.mentions.users.first()?.id;

如果需要获取服务器内成员的身份组、权限等关联信息,可以替换为message.mentions.members.map(member => member.id)提取成员ID。

2. 同时支持@提及+直接输入ID触发

如果需要兼容用户直接发送ID的场景,通过正则匹配消息内容里的Discord Snowflake ID(17-19位数字),再和@提取到的ID合并去重即可:

// 匹配消息中所有符合格式的用户ID
const matchedIds = message.content.match(/\d{17,19}/g) || [];
// 合并两类ID并去重
const allTargetUserIds = [...new Set([...mentionedUserIds, ...matchedIds])];
console.log(allTargetUserIds);

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 23:18:05