【问题标题】:Bot can't see anyone in channel/guild besides itself and me [duplicate]除了自己和我之外,机器人在频道/公会中看不到任何人[重复]
【发布时间】:2021-09-29 06:36:23
【问题描述】:

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,还是我遗漏了什么?

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

【问题讨论】:

    标签: java discord-jda


    【解决方案1】:

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

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

    【讨论】:

      猜你喜欢
      • 2022-06-11
      • 2021-12-29
      • 2018-06-29
      • 1970-01-01
      • 2021-01-20
      • 2020-10-11
      • 2020-06-22
      • 2018-02-19
      • 2022-09-25
      相关资源
      最近更新 更多