Discord.js -通过ID或提及获取用户


if (!message.mentions.members.first() && !(args[0])) return message.channel.send(`<@${message.author.id}>: ${insultList[Math.floor(Math.random() * insultList.length)]}`);
const user = message.mentions.members.first() || message.guild.members.cache.get(args[0]);
if (!user) return message.inlineReply(new Discord.MessageEmbed().setColor("D9B3FF").setTitle("Error").setDescription("User not found."));
message.channel.send(`${user}: ${insultList[Math.floor(Math.random() * insultList.length)]}`);

侮辱命令;insultList是字符串数组。然而,使用用户id(公会成员)调用命令只偶尔有效;它通常返回User not found

如果args[0]的id对应一个未缓存的成员,则user将返回false

  1. 使用GuildMemberManager#fetch()获取未提及的成员
  2. 使用(GuildMember|User)#toString()将成员对象解析为提及,无需从头构建(<@id>)
const insult = insultList[Math.floor(Math.random() * insultList.length)];
if (!message.mentions.members.first() && !(args[0])) return message.channel.send(`${message.author.toString()}: ${insult}`);
try {
const user = message.mentions.members.first() || (await message.guild.members.fetch(args[0]));
if (!user) return message.inlineReply(new Discord.MessageEmbed().setColor("D9B3FF").setTitle("Error").setDescription("User not found."));
message.channel.send(`${user.toString()}: ${insult}`);
} catch (err) {
console.error(err);
}

确保你启用了公会成员的意图,并使你的父函数在这个例子中是异步的。否则用回调解决.fetch()的承诺。