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

Posted

技术标签:

【中文标题】不和谐 jda 机器人 || UserUpdateActivityEvent 不触发【英文标题】:Discord jda bot || UserUpdateActivitiesEvent does not trigger 【发布时间】:2021-08-06 06:52:35 【问题描述】:

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

阅读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();检查缓存是否有效,我是缓存,但它仍然不起作用。

【问题讨论】:

也许可以把jda.addEventListener(new ActivityListener(jda));放在this.jda = builder.build()之前? 我在课堂上添加了一些其他的听众来测试它,他们工作了,所以我认为这不会改变。 【参考方案1】:

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

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


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

【讨论】:

谢谢,我添加了,但遗憾的是仍然没有任何反应。 @Dude2345 您可以尝试将 JDA 更新到 4.2.1_264 吗?我认为有一个错误导致事件无法正常触发。【参考方案2】:

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

【讨论】:

以上是关于不和谐 jda 机器人 || UserUpdateActivityEvent 不触发的主要内容,如果未能解决你的问题,请参考以下文章

关于我通过 jda 编码的不和谐机器人的问题

如何使用 JDA 禁止不和谐的人?

AFK 命令不和谐 (JDA)

如何修复不和谐的 jda bot 垃圾邮件

不和谐 Java JDA |从 SQLite 删除数据/从 SQLite 获取数据 [关闭]

JDA - 向特定频道发送消息