当前位置: 首页 > 知识库问答 >
问题:

不和谐API无法检索正确数量的成员在行会[重复]

陈欣荣
2023-03-14
public static List<Member> getMembers() {
    return Arrays.stream(WebClient.builder().build()
        .get()
        .uri(URL)
        .header("Authorization", "Bot " + Credentials.TOKEN)
        .retrieve()
        .bodyToMono(Member[].class)
        .block()).collect(Collectors.toList());
}

这只检索最后一个加入服务器的用户。

方法#2

Guild guild = event.getJDA().getGuildById(GUILD_ID);

event.getChannel().sendMessage("Users: " + guild.getMembers().size()).queue();

这只检索2个用户。在调试时,我发现它正在检索机器人本身和我。

java prettyprint-override">public void onGuildMessageReceived(GuildMessageReceivedEvent event) {
    String messageSent = event.getMessage().getContentRaw();
    
    if (messageSent.equalsIgnoreCase("members")) {
        Guild guild = event.getJDA().getGuildById(GUILD_ID);

        event.getChannel().sendMessage("Users: " +
            guild.getMembers().size()).queue();            
    
        event.getChannel().sendMessage("Thats all for now").queue();
    }
}
public void onGuildMessageReceived(GuildMessageReceivedEvent event) {
    String messageSent = event.getMessage().getContentRaw();
        
    event.getChannel().getMembers().forEach(member -> {
        event.getChannel().sendMessage("[Channel - " + event.getChannel().getName() + " ]").queue();
        
        event.getChannel().sendMessage("---- Members -> " + member.getUser().getName()).queue();
    });
}

根据文档guildchannel.getMembers()返回所有具有{@link net.dv8tion.jda.api.Permission#message_read}权限的成员

因此,我给了所有用户阅读测试服务器中消息的权限。

文档还说guild.getMembers()将只检查缓存的成员!

提前谢了。

共有1个答案

拓拔骁
2023-03-14
event.getJDA().getGuildById(GUILD_ID).getMemberCount();

如本答案所述,您可以启用特权服务器成员endpoint并缓存所有成员。不过,如果没有验证,您的机器人不能加入超过100个服务器。

这个数量是准确的,但是缓存所有公会中的所有成员也会消耗很多内存

一个更好的解决方案是使用公会endpoint的计数。您可以将GET请求发送到/guilds/ ?with_counts=true 并使用Authorate_member_count

 类似资料:
  • 我正在通过discord开发discord机器人。js和我需要在这一刻获得语音频道中的所有成员。我该怎么做?我试过了 但是它说find不是一个函数。还有,我试过了 但是它说get不是一个函数。

  • 这是我的第二个版本,我试图从Firebase检索代码,并用它做一些事情。这是我的第二种方式: 这将崩溃,并出现错误代码: 未能将类型“__NSCFString”(0x10A77F4A0)的值强制转换为“NSDictionary”(0x10A780288)。在“更新”行。这是我的第一次尝试: 打印更多数据: -路径通道引用:可选(https://x.com/channels/-kegkajavh6u

  • 我有一个名为User的实体类,其中包含数据库的OneToMany列: 当我将用户插入数据库时,一切正常,他的汽车也被添加到user_cars表中。当检索汽车时,我得到这个异常: 我已经搜索了其他答案,但没有找到如何解决它。这就是我试图检索用户的方式。 问题是什么?我如何解决?我不明白后台发生了什么。

  • 我通过在方法之外添加一个简单的Ride实例来测试它,它工作得很好。 我还尝试将监听器更改为,结果相同。 Edit2:当我试图从数据库中检索整数时,我会得到一条错误消息。

  • 我正在和一个节点一起工作。js Discord机器人,但在这一点上真的卡住了。我正在尝试检索与运行该命令的人在同一语音通道中的所有成员的名称和id。然而,我很难确定从数据中提取这些数据的最后一步。以下是我所拥有的: membersofChannel向我提供数据,这些数据可以很好地传送到控制台。日志,但我需要从中提取用户名和id,并将其发布在消息中。任何帮助都将不胜感激。