JDA getMembers() 只返回自机器人启动以来在聊天中写过的用户?

Posted

技术标签:

【中文标题】JDA getMembers() 只返回自机器人启动以来在聊天中写过的用户?【英文标题】:JDA getMembers() only returns users who wrote in the chat since the bot's startup? 【发布时间】:2021-03-04 02:15:46 【问题描述】:

我目前正在使用 JDA 在 Java 中开发我的 discord 机器人。直到两周前它都运作良好。由于这次 JDA 似乎不再能够通过 event.getGuild().getMembers() 获取所有用户,因此它只会返回自机器人启动以来在聊天中写过文章的成员。使用 event.getGuild().getMemberCount() 方法,JDA 将提供正确数量的用户,但如果我使用 event.getGuild().getMembers().length 检查列表的长度,它只会给出数量用户,这在之前的聊天中写道。我做错了什么?

我的代码应该得到所有成员的列表:

        String msg = "`" + guild.getMembers().get(0).getUser().getAsTag() + "`";
        List<Member> members = guild.getMembers();


        for (int i = 1; i < guild.getMemberCount(); i++) 
            msg = msg + ", `" + members.get(i).get.getUser().getAsTag() + "`" + event.getGuild().getMemberCount();
        

【问题讨论】:

这能回答你的问题吗? Discord JDA - Invalid Member List 【参考方案1】:

您使用的方法仅返回缓存的成员,以获取您需要使用Guild#loadMembers() 的所有成员。

在此处了解更多信息:https://ci.dv8tion.net/job/JDA/javadoc/net/dv8tion/jda/api/entities/Guild.html#loadMembers()

【讨论】:

以上是关于JDA getMembers() 只返回自机器人启动以来在聊天中写过的用户?的主要内容,如果未能解决你的问题,请参考以下文章

JDA 事件获取器返回 null 并让所有成员在一个角色中只返回机器人本身

JDA#getGuilds() 方法返回一个空列表

使用不和谐 JDA 清除聊天

Discord JDA 在 GuildJoin 上添加自定义表情

如何使用 JDA 在 Discord 服务器(不是用户/机器人 DM)中创建私人频道:Java Discord API

JDA - 机器人听取其他机器人的反应