Discord JDA getOnlineStatus() 不检查服务器上的在线成员
Discord JDA getOnlineStatus() is not checking for online members on the server
我正在尝试制作一个机器人,它将使用 JDA 列出 discord 服务器上的所有在线成员。我使用了 if(m.getOnlineStatus == OnlineStatus.ONLINE) 但这没有用 - 它不包含单个用户名。我试过使用 .equals() 而不是 == 但这也不起作用。我正在使用嵌入生成器并将名称添加到描述中。
但是,它不是 .getMembers() 被破坏,因为如果我从 if 语句中删除 onlineStatus 条件,它 returns 服务器的所有成员都应该这样做。
这是我的命令代码:
if(event.getMessage().getContentRaw().equalsIgnoreCase("!memberList")) {
Guild guild = event.getGuild();
List<Member> users = guild.getMembers();
int playerCount = guild.getMemberCount();
EmbedBuilder builder = new EmbedBuilder();
builder.setTitle("There " + ((playerCount == 1) ? "is " : "are ") + playerCount + " player" + (playerCount == 1 ? "" : "s") + " online!");
for (Member m : users) {
if(!m.getUser().isBot() && m.getOnlineStatus() == OnlineStatus.ONLINE) {
builder.appendDescription(m.getEffectiveName() + "\n");
}
}
builder.setColor(Color.MAGENTA);
builder.setFooter("Requested by " + event.getAuthor().getName());
event.getChannel().sendMessage(builder.build()).complete();
}
我的 JDABuilder 代码,JDA 4.2.0:
JDA bot;
try {
bot = JDABuilder.createDefault(DISCORD_TOKEN)
.setChunkingFilter(ChunkingFilter.ALL)
.addEventListeners(new MessageHandler())
.setMemberCachePolicy(MemberCachePolicy.ALL)
.enableIntents(GatewayIntent.GUILD_MEMBERS)
.build();
} catch(LoginException e) {
System.out.println("Oopsie! Someone did a poopsie!");
e.printStackTrace();
}
您需要启用 GUILD_PRESENCES
意图来跟踪在线状态。将此添加到您的构建器:enableIntents(GatewayIntent.GUILD_PRESENCES)
并在您的应用程序仪表板中启用它。
我正在尝试制作一个机器人,它将使用 JDA 列出 discord 服务器上的所有在线成员。我使用了 if(m.getOnlineStatus == OnlineStatus.ONLINE) 但这没有用 - 它不包含单个用户名。我试过使用 .equals() 而不是 == 但这也不起作用。我正在使用嵌入生成器并将名称添加到描述中。
但是,它不是 .getMembers() 被破坏,因为如果我从 if 语句中删除 onlineStatus 条件,它 returns 服务器的所有成员都应该这样做。
这是我的命令代码:
if(event.getMessage().getContentRaw().equalsIgnoreCase("!memberList")) {
Guild guild = event.getGuild();
List<Member> users = guild.getMembers();
int playerCount = guild.getMemberCount();
EmbedBuilder builder = new EmbedBuilder();
builder.setTitle("There " + ((playerCount == 1) ? "is " : "are ") + playerCount + " player" + (playerCount == 1 ? "" : "s") + " online!");
for (Member m : users) {
if(!m.getUser().isBot() && m.getOnlineStatus() == OnlineStatus.ONLINE) {
builder.appendDescription(m.getEffectiveName() + "\n");
}
}
builder.setColor(Color.MAGENTA);
builder.setFooter("Requested by " + event.getAuthor().getName());
event.getChannel().sendMessage(builder.build()).complete();
}
我的 JDABuilder 代码,JDA 4.2.0:
JDA bot;
try {
bot = JDABuilder.createDefault(DISCORD_TOKEN)
.setChunkingFilter(ChunkingFilter.ALL)
.addEventListeners(new MessageHandler())
.setMemberCachePolicy(MemberCachePolicy.ALL)
.enableIntents(GatewayIntent.GUILD_MEMBERS)
.build();
} catch(LoginException e) {
System.out.println("Oopsie! Someone did a poopsie!");
e.printStackTrace();
}
您需要启用 GUILD_PRESENCES
意图来跟踪在线状态。将此添加到您的构建器:enableIntents(GatewayIntent.GUILD_PRESENCES)
并在您的应用程序仪表板中启用它。