jda中可以得到bots/users的个数吗?

Can we get the number of bots/users in jda?

我想获取服务器中的机器人数量、用户数量和成员数量。我知道如何获得成员总数。因此,要获得 bots/users 的数量,我们可以找到用户或机器人的数量,然后从成员总数中减去它。

event.getGuild().getMemberCount() // Gets the total number of memebers in the server

有没有办法得到users/bots的数量。
另外,有什么办法可以得到具有特定角色的人数(和他们的名字)?

Guild.getMemberCount()方法是从公会的可用信息中提取出公会成员的数量,所以没有办法将成员和机器人的数量分开,但是你可以单独计算它们。

即:

event.getGuild().loadMembers().onSuccess(members -> {
    int users = 0;
    int bots = 0;
    for(Member member: members){
        if (member.getUser().isBot())
            bots++;
        else
            users++;
    }
});

请注意,在此代码中使用了 Guild.loadMembers(),这是一种 要求 GatewayIntent.GUILD_MEMBERS 在 Discord 和在 JDA 的构建中。此外,由于此方法 returns 是一个任务对象,您需要使用 lambda function 来处理它,一旦 JDA 获取了整个成员列表,您就可以对其进行迭代,在本例中我我正在为每个循环使用一个。

另外需要注意的是,usersbots这些变量的作用域是onSuccess()内部的lambda函数所独有的,所以根据我的经验,我建议返回或在此函数内回复事件,在此代码下方不留下任何其他语句,这样可以避免出现两个混乱的逻辑流程。