Discord JS - TypeError:无法读取未定义的属性“setChannel”

时间:2020-12-19 08:56:04

标签: node.js discord discord.js bots

我正在尝试使用多个用户提及,但 message.mention.members.first() 不能这样做。所以我做了一些挖掘并从Parsing Mention Arguments中找到了这个函数:

function getUserFromMention(mention) {
    if (!mention) return;

    if (mention.startsWith('<@') && mention.endsWith('>')) {
        mention = mention.slice(2, -1);

        if (mention.startsWith('!')) {
            mention = mention.slice(1);
        }

        return client.users.cache.get(mention);
    }
}

当我尝试使用此函数时,出现“Discord JS - TypeError:无法读取未定义的属性‘setChannel’”这是导致错误的代码

            let channel = client.channels.cache.find(channel => channel.name === args[0]);
            const user1 = getUserFromMention(args[1]);
            const user2 = getUserFromMention(args[2]);
            message.member.voice.setChannel(channel.id);
            user1.voice.setChannel(channel.id);
            user2.voice.setChannel(channel.id);

此代码旨在将我自己和提及的用户移动到选定的语音频道,它在使用 message.mention.members.first() 时工作得很好,但只能处理两个提及的用户中的一个。

我想知道我当前的错误是否有修复方法,或者是否有其他方法可以解决这个问题?

2 个答案:

答案 0 :(得分:2)

记住,

message.mentions.members- 返回 GuildMember
client.users.cache.get - 返回 User

您只能在 VC 之间移动/断开 GuildMembers

因此您可以使用 message.mentions.members,它返回所有提及的用户的 Collection

let channel = client.channels.cache.find(channel => channel.name === args[0]);
message.member.voice.setChannel(channel.id);
message.mentions.members.each(u => {
    u.voice.setChannel(channel.id);
})

答案 1 :(得分:0)

问题可能是,用户不在缓存中,因此您必须使用 GuildMemberManager#fetch(id)。问题是,这个函数是异步的。最简单的解决方案是使 getUserFromMention 和使用它的函数异步并使用 await。