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,或者我遗漏了什么?
此外,如果机器人正在响应他们的消息,则机器人能够标记除自己/我以外的用户。不确定这是否相关,但我想如果是的话我会添加它。
答案 0 :(得分:0)
已解决:在此处找到解决方案:Discord JDA - Invalid Member List
基本上,我的代码缺少分块过滤器,这意味着机器人只会识别当前/已经处于活动状态的成员。过滤器可以这样实现:builder.setChunkingFilter(ChunkingFilter.ALL);