discord.js Node.js环境下如何同时按用户名和discriminator查询用户
解决方案
同时匹配用户名与识别码的查询写法
直接在find方法的回调中同时校验两个字段即可,避免单字段匹配重复的问题:
const targetUser = client.users.find(user => user.username === 'TESTname' && user.discriminator === '3173' );
如果你使用的是discord.js v12及以上版本,集合操作需要先取cache:
const targetUser = client.users.cache.find(user => user.username === 'TESTname' && user.discriminator === '3173' );
服务器内非消息发送者查询返回null的问题修复
client.users是bot的全局用户缓存,仅存储和bot有过交互的用户数据,服务器内未和bot产生过交互的用户默认不在该缓存中,所以会查询失败。你需要从服务器成员列表中查询,操作前需要先完成两个前置配置:
- 到Discord开发者后台的Bot设置页,开启
Privileged Gateway Intents下的Server Members Intent权限 - 确保Bot在目标服务器拥有「查看成员」权限
查询代码示例(discord.js v13及以上版本,老版本将messageCreate替换为message即可):
client.on('messageCreate', async msg => { // 过滤私信场景 if (!msg.guild) return; // 拉取服务器全量成员到缓存 await msg.guild.members.fetch(); // 从服务器成员列表匹配用户,可匹配tag也可分开匹配两个字段 const targetMember = msg.guild.members.cache.find(member => member.user.tag === '<name>#<discriminator>' // 等价写法:member.user.username === '<name>' && member.user.discriminator === '<discriminator>' ); if (targetMember) { // targetMember.user即为目标用户对象,可执行后续逻辑 console.log('查找到用户:', targetMember.user.tag); } else { console.log('当前服务器不存在对应用户'); } })
内容的提问来源于stack exchange,提问作者JohnyFree
相关产品推荐
相关产品推荐

