【发布时间】:2021-02-04 23:20:39
【问题描述】:
所以我尝试使用user instanceof User,但由于某种原因它总是返回 false。我已经控制台记录了用户和用户。 user 是一个有效的用户对象 (User { id: '<id>' ...etc }),User 返回 [class User extends Base]。
我的文件完整代码是:
const { User, GuildMember, Guild } = require("discord.js");
function nickname(user, guild) {
const IS_USER = user instanceof User,
IS_MEMBER = user instanceof GuildMember,
IS_GUILD = guild instanceof Guild;
if (!IS_MEMBER && !IS_USER) return null;
else if ((IS_MEMBER || IS_USER) && !IS_GUILD) return IS_MEMBER ? user.nickname || user.user.username : user.username;
else if ((IS_MEMBER || IS_USER) && IS_GUILD) return guild.members.cache.get(user.id).nickname || IS_MEMBER ? user.nickname || user.user.username : user.username;
else return null;
};
module.exports = { nickname };
为了测试,我需要我的机器人 eval 命令文件中的文件 (const member = require("/path/to/file"))。然后我运行member.nickname(message.author, message.guild),无论我如何尝试从文件中运行它,它总是返回null(因为user instanceof User 为假)。
但是,如果我将函数移动到 eval 命令文件中,然后使用nickname(message.author, message.guild),它就可以正常工作。如果我在 eval 命令本身中创建函数,它也可以正常工作。
成员文件所在的目录确实安装了 [npm i] discord.js。我试过删除成员文件并重新创建,但没有解决它。我完全不知道为什么会发生这种情况以及如何解决它。
编辑:上述所有三个(可能更多)instanceof都会发生这种情况。
【问题讨论】:
-
不确定 eval 是如何工作的,但如果它最终创建了两组不同的 User 类,它们就不会被认为是相同的。例如
const u1 = function User() {};const u2 = function User() {}他们都会以用户身份登录,但new u1() instanceof u1为真new u1() instanceof u2为假。 -
@MarkusMaga 我会在我回到我的电脑时测试 laster,但这完全有道理,所以我认为你解决了它。谢谢!
标签: javascript discord.js instanceof