不和谐 jda 机器人 || UserUpdateActivitiesEvent 不触发

时间:2021-05-16 23:30:07

标签: java listener discord-jda

我尝试跟踪机器人公会中的人是否改变了活动(例如开始玩游戏)

阅读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());
    }
}

遗憾的是,当我或其他人开始游戏或 smt 时,它永远不会触发。

编辑:
我使用了 jda.getUserCache();检查缓存是否工作,我是缓存,但它仍然不起作用。

2 个答案:

答案 0 :(得分:1)

UserUpdateActivitiesEvent 需要启用 GuildPresence 意图。您在代码中启用了它,但也必须在 https://discord.com/developers/applications -> Your Application -> Bot -> Enable Presence Intent

的 discord api 网站上启用它

答案 1 :(得分:1)

必须在事件触发之前缓存相关用户的成员。由于您使用延迟加载,这可能需要一段时间才能发生,因为成员是通过消息或语音状态添加到缓存中的。

您可以使用 setChunkingFilter(ChunkingFilter.ALL) 在启动时立即加载所有成员。


4.2.1_264 中已修复了导致这些事件无法触发的错误。