机器人看不到频道/公会中的任何人,除了它自己和我



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,但这两种方法都没有解决问题。我是不是实施了错误的意图,还是我遗漏了什么?

此外,如果bot正在响应用户的消息,它可以标记除自身以外的其他用户。不确定这是否相关,但我想如果相关的话我会添加它。

已解决:在此处找到解决方案:Discord JDA-无效成员列表

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

相关内容

最新更新