Bot 在频道/公会中除了自己和我之外看不到任何人

时间:2021-07-21 22:12:20

标签: java discord-jda

Java/JDA 初学者在这里。

正如标题中所述,我的 Discord 机器人无法在给定的频道/公会中看到除了我自己和我之外的任何人。为了看到这一点,我使用以下代码:

// members in channel
List<Member> members = c.getMembers();
String numOfMembers = String.valueOf(members.size());
c.sendMessage("I see "+numOfMembers+" members in this channel:").queue();
for (int i = 0; i < members.size(); i++) {
        String member = members.get(i).getEffectiveName();
        c.sendMessage(member).queue();
}

// members in guild (server)
members = g.getMembers();
numOfMembers = String.valueOf(members.size());
c.sendMessage("I see "+numOfMembers+" members in this server:").queue();
for (int i = 0; i < members.size(); i++) {
        String member = members.get(i).getEffectiveName();
        c.sendMessage(member).queue();
}

我听说这是因为缺少意图,然后我是这样实现的(是的,我在应用程序面板中启用了特权意图):

JDABuilder builder = JDABuilder.createDefault("TOKEN");
//EnumSet.allOf(GatewayIntent.class)
builder.addEventListeners(new MessageReceiveListener());
builder.enableIntents(
        GatewayIntent.GUILD_MEMBERS,
        GatewayIntent.GUILD_MESSAGES,
        GatewayIntent.GUILD_MESSAGE_REACTIONS
);
MemberCachePolicy policy = MemberCachePolicy.ALL;
builder.setMemberCachePolicy(policy);
jda = builder.build();

为了以防万一,我尝试将成员缓存策略设置为 all,但这些方法都没有解决问题。我是否错误地实施了 Intent,或者我遗漏了什么?

此外,如果机器人正在响应他们的消息,则机器人能够标记除自己/我以外的用户。不确定这是否相关,但我想如果是的话我会添加它。

1 个答案:

答案 0 :(得分:0)

已解决:在此处找到解决方案:Discord JDA - Invalid Member List

基本上,我的代码缺少分块过滤器,这意味着机器人只会识别当前/已经处于活动状态的成员。过滤器可以这样实现:builder.setChunkingFilter(ChunkingFilter.ALL);