如何在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
相关产品推荐
相关产品推荐

