#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 -> Ваше приложение ->> Бот ->>> Включить Намерение присутствия