首页 > 解决方案 > 按名称获取用户,无需区分

问题描述

我试图通过另一个用户给出的名称在服务器上找到一个用户,而没有鉴别器。我正在向我的机器人添加一个允许我创建用户组的系统,它还为他们添加了一个类别和文本/语音通道。我将用户设置为“创始人”和“领导者”,这允许他们将其他用户添加到组中。问题是,该组对不在该组中的任何人都是隐藏的,因此他们不能简单地提及要添加的用户,而只需使用他们看到的人员用户名,而无需区分。

我有message.guild.members.cache.find(member => member.tag === newMemberName),但它需要一个带有鉴别器的标签。

我的整个方法是

function addMember(message) {
    var server = message.guild;
    var user = message.author;
    var messageContent = message.content;
    var args = messageContent.substring(1).split(' ');
    var channel = message.channel.parent.name;
    var json = fs.readFileSync("allegiances.json");
    var parsed = JSON.parse(json);
    var currentChannel = message.channel.name.toLowerCase();
    if ((args[1] != null) && (currentChannel == "leadercommands")) {
        var userid = user.id;
        if (parsed[channel].leaders.includes(userid)) {
            var newMemberName = args[1];
            console.log(newMemberName);
            var newMember = server.members.cache.find(member => member.username === newMemberName);
            console.log(newMember);
            newMember.roles.add(server.roles.cache.find(role => role.name === channel));
        }
    }
}

标签: javascriptdiscorddiscord.js

解决方案


我最终使用

server.members.fetch({ query: args[1], limit: 1 }).then(user => {
            user.first().roles.add(server.roles.cache.find(role => role.name === channel))
        }).catch(console.error);

我发现这段代码可以让你找到一个用户,或者如果你想获得超过 1 个用户,可以通过他们的名字找到一个没有鉴别器的用户。用于查找用户的所有其他系统似乎都需要鉴别器才能工作。


推荐阅读