如何使用Java JDA从不和公会中检索特定成员



我试图通过使用以下方法从公会获得特定的成员对象:event.getGuild().getMember(user)这里,user是我想从中获取Member对象的用户的user对象。我还尝试过使用. getmemberbyid,而是使用userID。然而,在这两种情况下,我得到一个空指针异常。

我确信我的User对象和userID都是正确的,因为当添加一个断点时,它确实显示了这些,但它不检索成员,这保持为空。我这么说不对吗?

我还尝试在启动bot的主文件中放入以下内容:

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

在Discord开发者门户上,我已经启用了"特权网关意图"选项。

Guild#getMember的文档告诉你另见公会#retrieveMember,可用于加载未缓存的成员。

如果您有一个具有getMember()retrieveMember()方法的事件,则应该使用它。否则你可以这样做:

guild.retrieveMember(user).queue(member -> {
... use member here
});

其他选项在JDA wiki中有概述:网关意图和成员缓存策略

大多数的检索方法DO NOT需要特权意图GUILD_MEMBERS。只有当您想要与服务器的整个成员列表交互时,才需要这样做,例如通过loadMembersfindMembers等方法。

最新更新