除了自己和我之外,机器人在频道/公会中看不到任何人[重复]

Posted

技术标签:

【中文标题】除了自己和我之外,机器人在频道/公会中看不到任何人[重复]【英文标题】: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,还是我遗漏了什么?

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

【问题讨论】:

【参考方案1】:

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

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

【讨论】:

以上是关于除了自己和我之外,机器人在频道/公会中看不到任何人[重复]的主要内容,如果未能解决你的问题,请参考以下文章

机器人加入公会的所有语音频道并播放文件

转发DM消息到公会频道

如何让机器人在不使用命令的情况下向特定频道中的特定公会发送消息

如何在 Discord.NET 中通过公会 ID 和频道 ID 发送消息

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

如何让机器人将消息发送到“通用”频道或消息最多的频道?