如何使用 Java JDA 从 Discord Guild 中检索特定成员

时间:2021-02-03 15:54:14

标签: java discord-jda

我正在尝试使用以下方法从 Guild 获取特定的 Member 对象: event.getGuild().getMember(user) 这里, user 是我想从中获取 Member 对象的用户的 User 对象。我也尝试过使用 .getMemberById,而是使用 userID。但是,在这两种情况下,我都会遇到空指针异常。

我确信我的用户对象和用户 ID 都是正确的,因为在添加断点时它确实显示了这些,但它没有检索成员,这保持为空。我这样做错了吗?

我还尝试将以下内容放在我启动机器人的主文件中:

JDABuilder builder = JDABuilder.createDefault(BOT_TOKEN);
builder.enableIntents(GatewayIntent.GUILD_MEMBERS);

在 Discord 开发者门户上,我启用了两个“特权网关意图”选项。

1 个答案:

答案 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。仅当您想通过 loadMembersfindMembers 等方法与服务器的整个成员列表进行交互时才需要。