Discord JDA getOnlineStatus()未检查服务器上的在线成员

时间:2020-07-02 14:37:01

标签: java bots discord discord-jda

我正在尝试制作一个机器人,该机器人将使用JDA列出不和谐服务器上的所有在线成员。我已经使用过if(m.getOnlineStatus == OnlineStatus.ONLINE),但是这不起作用-它不包含单个用户名。我尝试使用.equals()而不是==,但是那也不起作用。我正在使用嵌入生成器,并将名称添加到描述中。

但是,不是.getMembers()被破坏了,因为如果我从if语句中删除onlineStatus条件,它将返回服务器的所有成员。

这是此命令的代码:

if(event.getMessage().getContentRaw().equalsIgnoreCase("!memberList")) {
    Guild guild = event.getGuild();
    List<Member> users = guild.getMembers();
    int playerCount = guild.getMemberCount();
            
    EmbedBuilder builder = new EmbedBuilder();
        
    builder.setTitle("There " + ((playerCount == 1) ? "is " : "are ") + playerCount + " player" + (playerCount == 1 ? "" : "s") + " online!");
            
    for (Member m : users) {

        if(!m.getUser().isBot() && m.getOnlineStatus() == OnlineStatus.ONLINE) {
            builder.appendDescription(m.getEffectiveName() + "\n");
        }
                
    }
            
    builder.setColor(Color.MAGENTA);
    builder.setFooter("Requested by " + event.getAuthor().getName());
    event.getChannel().sendMessage(builder.build()).complete();
}

我的JDABuilder代码JDA 4.2.0:

JDA bot;
        
try {
    bot = JDABuilder.createDefault(DISCORD_TOKEN)
            .setChunkingFilter(ChunkingFilter.ALL)
            .addEventListeners(new MessageHandler())
            .setMemberCachePolicy(MemberCachePolicy.ALL)
            .enableIntents(GatewayIntent.GUILD_MEMBERS)
            .build();
} catch(LoginException e) {
    System.out.println("Oopsie! Someone did a poopsie!");
    e.printStackTrace();
}

1 个答案:

答案 0 :(得分:2)

您需要启用GUILD_PRESENCES意向以跟踪在线状态。将此添加到您的构建器中:enableIntents(GatewayIntent.GUILD_PRESENCES)并在应用程序仪表板中启用它。