Бот Discord jda || Событие UserUpdateActivitiesEvent не запускается

#java #listener #discord-jda

Вопрос:

Я пытался отслеживать, меняют ли люди в гильдии ботов свою деятельность (например, начинают играть в игру).

Прочитав javadoc, я узнал:

  • Охранник ворот.ГИЛЬДИ_ПРЕДСТАВЛЕНИЯ
  • Кешефлаг.Активность
  • Политика в отношении членов.ОНЛАЙН (следовательно, GatewayIntent.ЧЛЕНЫ ГИЛЬДИИ)

должен быть активным.

так вот в чем моя Главная:

         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 ();, чтобы проверить, работало ли кэширование, и я ли я кэш, но он все равно не работает.

Комментарии:

1. Может быть, может быть, поставить jda.addEventListener(new ActivityListener(jda)); перед this.jda = builder.build() собой ?

2. Я добавил в класс еще несколько слушателей, чтобы проверить это, и они сработали, так что я не думаю, что это что-то изменит.

Ответ №1:

Участники для связанных пользователей должны быть кэшированы до начала события. Поскольку вы используете ленивую загрузку, это может занять некоторое время, поскольку участники добавляются в кэш с помощью сообщений или голосовых состояний.

Вы можете использовать setChunkingFilter(ChunkingFilter.ALL) для быстрой загрузки всех участников при запуске.


Была ошибка, из-за которой эти события не запускались, которая была исправлена в 4.2.1_264.

Комментарии:

1. Спасибо, я добавил это, и, к сожалению, до сих пор ничего не происходит.

2. @Dude2345 можете ли вы попробовать обновить JDA до 4.2.1_264? Я думаю, что была ошибка, из-за которой события не запускались должным образом.

Ответ №2:

событие UserUpdateActivitiesEvent требует включения намерения присутствия Гильдии. Вы включили его в своем коде, но он также должен быть включен на веб-сайте discord api по адресу https://discord.com/developers/applications -> Ваше приложение ->> Бот ->>> Включить Намерение присутствия