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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 07:06:06