Discord jda 机器人 || UserUpdateActivitiesEvent 不触发
Discord jda bot || UserUpdateActivitiesEvent does not trigger
我尝试跟踪机器人公会中的人是否改变了活动(比如开始玩游戏)
阅读 javadoc 后我发现:
- GatewayIntent.GUILD_PRESENCES
- CacheFlag.ACTIVITY
- MemberCachePolicy.ONLINE(因此GatewayIntent.GUILD_MEMBERS)
必须处于活动状态。
这就是我的主要内容:
JDABuilder builder = JDABuilder.createDefault(token);
builder.enableIntents(GatewayIntent.GUILD_PRESENCES);
builder.enableIntents(GatewayIntent.GUILD_MEMBERS);
builder.enableCache(CacheFlag.ACTIVITY);
builder.setMemberCachePolicy(MemberCachePolicy.ONLINE);
builder.setChunkingFilter(ChunkingFilter.ALL);
this.jda = builder.build();
jda.addEventListener( new ActivityListener(jda));
这是我的听众:
public class ActivityListener extends ListenerAdapter {
private final JDA jda;
public ActivityListener(JDA jda) {
this.jda = jda;
}
@Override
public void onUserUpdateActivities(@NotNull UserUpdateActivitiesEvent event) {
super.onUserUpdateActivities(event);
System.out.println(event.getUser().getAsTag() + " " + event.getUser().getIdLong());
}
}
可悲的是,当我或其他人开始游戏时,它永远不会触发。
编辑:
我用了 jda.getUserCache();检查缓存是否有效,我是缓存,但它仍然无效。
UserUpdateActivitiesEvent 需要启用 GuildPresence 意图。您在代码中启用了它,但也必须在 discord api 网站 https://discord.com/developers/applications -> Your Application -> Bot -> Enable Presence Intent
关联用户的成员必须在事件触发之前被缓存。由于您使用延迟加载,这可能需要一段时间才能发生,因为成员是通过消息或语音状态添加到缓存中的。
您可以使用 setChunkingFilter(ChunkingFilter.ALL) 在启动时预先加载所有成员。
存在导致这些事件不触发的错误,已在 4.2.1_264.
中修复
我尝试跟踪机器人公会中的人是否改变了活动(比如开始玩游戏)
阅读 javadoc 后我发现:
- GatewayIntent.GUILD_PRESENCES
- CacheFlag.ACTIVITY
- MemberCachePolicy.ONLINE(因此GatewayIntent.GUILD_MEMBERS)
必须处于活动状态。
这就是我的主要内容:
JDABuilder builder = JDABuilder.createDefault(token);
builder.enableIntents(GatewayIntent.GUILD_PRESENCES);
builder.enableIntents(GatewayIntent.GUILD_MEMBERS);
builder.enableCache(CacheFlag.ACTIVITY);
builder.setMemberCachePolicy(MemberCachePolicy.ONLINE);
builder.setChunkingFilter(ChunkingFilter.ALL);
this.jda = builder.build();
jda.addEventListener( new ActivityListener(jda));
这是我的听众:
public class ActivityListener extends ListenerAdapter {
private final JDA jda;
public ActivityListener(JDA jda) {
this.jda = jda;
}
@Override
public void onUserUpdateActivities(@NotNull UserUpdateActivitiesEvent event) {
super.onUserUpdateActivities(event);
System.out.println(event.getUser().getAsTag() + " " + event.getUser().getIdLong());
}
}
可悲的是,当我或其他人开始游戏时,它永远不会触发。
编辑:
我用了 jda.getUserCache();检查缓存是否有效,我是缓存,但它仍然无效。
UserUpdateActivitiesEvent 需要启用 GuildPresence 意图。您在代码中启用了它,但也必须在 discord api 网站 https://discord.com/developers/applications -> Your Application -> Bot -> Enable Presence Intent
关联用户的成员必须在事件触发之前被缓存。由于您使用延迟加载,这可能需要一段时间才能发生,因为成员是通过消息或语音状态添加到缓存中的。
您可以使用 setChunkingFilter(ChunkingFilter.ALL) 在启动时预先加载所有成员。
存在导致这些事件不触发的错误,已在 4.2.1_264.
中修复