我正在尝试使用多个用户提及,但 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()
时工作得很好,但只能处理两个提及的用户中的一个。
我想知道我当前的错误是否有修复方法,或者是否有其他方法可以解决这个问题?
答案 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。