我正在尝试使用以下方法从 Guild 获取特定的 Member 对象:
event.getGuild().getMember(user)
这里, user 是我想从中获取 Member 对象的用户的 User 对象。我也尝试过使用 .getMemberById,而是使用 userID。但是,在这两种情况下,我都会遇到空指针异常。
我确信我的用户对象和用户 ID 都是正确的,因为在添加断点时它确实显示了这些,但它没有检索成员,这保持为空。我这样做错了吗?
我还尝试将以下内容放在我启动机器人的主文件中:
JDABuilder builder = JDABuilder.createDefault(BOT_TOKEN);
builder.enableIntents(GatewayIntent.GUILD_MEMBERS);
在 Discord 开发者门户上,我启用了两个“特权网关意图”选项。
答案 0 :(得分:0)
documentation of Guild#getMember 告诉您另见 Guild#retrieveMember 可用于加载未缓存的成员。
如果您有一个带有 getMember()
或 retrieveMember()
方法的事件,则应改用它。否则你可以这样做:
guild.retrieveMember(user).queue(member -> {
... use member here
});
JDA wiki 中概述了其他替代方案:Gateway Intents and Member Cache Policy
这些检索方法中的大多数不需要需要特权意图 GUILD_MEMBERS
。仅当您想通过 loadMembers
或 findMembers
等方法与服务器的整个成员列表进行交互时才需要。