Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/329.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 不一致JDA-成员列表无效_Java_Bots_Discord_Discord Jda - Fatal编程技术网

Java 不一致JDA-成员列表无效

Java 不一致JDA-成员列表无效,java,bots,discord,discord-jda,Java,Bots,Discord,Discord Jda,我正在创建一个Discord机器人,遇到了一个奇怪的问题。我需要检查服务器上的每个用户并执行一个有条件的操作。但是当收到所有成员的列表时,它只包含我和bot本身 public class Bot extends ListenerAdapter { public void onGuildMessageReceived(GuildMessageReceivedEvent Event) { String Message = Event.getMessage().getConte

我正在创建一个Discord机器人,遇到了一个奇怪的问题。我需要检查服务器上的每个用户并执行一个有条件的操作。但是当收到所有成员的列表时,它只包含我和bot本身

public class Bot extends ListenerAdapter {
    public void onGuildMessageReceived(GuildMessageReceivedEvent Event) {
        String Message = Event.getMessage().getContentRaw();

        if(Message.charAt(0) == Globals.BOT_PREFIX) {
            String[] Args = Message.split("\\s+");

        if(Args[0].equalsIgnoreCase(CommandType.COMMAND_DEV_TEST)) {
            List<Member> MemberList = Event.getGuild().getMembers();
            for(int i = 0; i < MemberList.size(); i++)
                System.out.println(MemberList.get(i));
        }
    }
}
公共类Bot扩展ListenerAdapter{
已接收公共无效OnGuildMessage(GuildMessageReceivedEvent事件){
字符串消息=Event.getMessage().getContentRaw();
if(Message.charAt(0)=Globals.BOT\u前缀){
字符串[]Args=Message.split(\\s+);
if(Args[0].equalsIgnoreCase(CommandType.COMMAND\u DEV\u TEST)){
List MemberList=Event.getGuild().getMembers();
对于(int i=0;i

如果另一个人写入,则仅显示我和机器人。

我假设您使用的是4.2.0版本(4.1.1_102及以上)的开发版本

在这些版本中,引入了新的工厂方法,以使人们了解新的discord API设计。将来,机器人程序将仅限于缓存默认连接到语音通道的成员

如果您只需要您可以使用的成员数!否则:

createDefault
/
createLight
仅缓存连接到语音频道的成员或公会所有者(乍一看)。要缓存更多成员,您必须在bot和JDA的应用程序仪表板中启用
GUILD_成员
意图

现在您可以执行以下操作:

jdaapi=JDABuilder.createDefault(令牌)
.setMemberCachePolicy(MemberCachePolicy.ALL)
.EnableIntent(GatewayIntent.GUILD_成员)
.build();
需要
帮会成员
意图,因为它允许
帮会成员移除
调度在成员被踢/禁止/离开时通知库从缓存中移除成员

此设置将执行延迟加载,这意味着它将仅从语音成员开始,并在其激活后将更多成员添加到缓存中

要在启动时加载所有成员,您必须另外启用成员分块

jdabilder.createDefault(令牌)
.setChunkingFilter(ChunkingFilter.ALL)//为所有公会启用成员分块
.setMemberCachePolicy(MemberCachePolicy.ALL)//如果启用分块,则忽略
.EnableIntent(GatewayIntent.GUILD_成员)
.build();
您还可以使用或为单个公会加载它们


我建议您也阅读这篇JDA wiki文章:。

是的,这正是我们所需要的。非常感谢。