有人可以帮忙吗?我希望我的命令能够与 @olios 或 49556804 *** 0471817 一起使用。我不知道我做错了什么,但我的代码不起作用。
let userLevel = mentions.users.first () || msg.guild.members.cache.get (args [0]) || msg.author
const userLevelID = userLevel.id
const userLevelName = userLevel.user.username
我从控制台得到这样的信息:
TypeError: Cannot read property 'username' of undefined
它完全可以做到吗,或者它对提及和 ID 有效?
答案 0 :(得分:2)
虽然 msg.mentions.users.first()
和 msg.author
都返回 User
,但 msg.guild.members.cache.get(args[0])
返回 GuildMember
。 User 和 GuildMember 都有 id
属性,但只有 GuildMember
有 user
。
如果您尝试从 user
获取 GuildMember
,您会没事的,但是如果您尝试从 User
获取它,您将始终收到 TypeError。>
您可以更新代码以仅从 user
获取 message.guild.members.cache.get(args[0])
。如果没有 args[0]
,我使用 optional chaining (?
) 忽略它并回退到 msg.author
。
以下内容适用于所有三种情况:
let userLevel =
msg.mentions.users.first() ||
msg.guild.members.cache.get(args[0])?.user ||
msg.author;
const userLevelID = userLevel.id;
const userLevelName = userLevel.username;
console.log({ userLevelID, userLevelName });
可选链接需要 Node.js v14+。如果您有旧版本,则可以使用简单的 AND 运算符:
let userLevel =
message.mentions.users.first() ||
(message.guild.members.cache.get(args[0]) &&
message.guild.members.cache.get(args[0]).user) ||
message.author;