Как использовать функцию JDA getUserById

#java #discord

#java #Discord

Вопрос:

Я работаю на Java над ботом Discord, и у меня есть команда, которая добавляет DiscordID пользователя, который отправляет сообщение в базу данных. С помощью другой команды я пытаюсь извлечь эти данные для их вывода. Однако, похоже, я не могу получить пользователя, если идентификатор отличается от пользователя, выдавшего команду. Я извлек нужные мне идентификаторы пользователей и поместил их в ArrayList, а затем я пытаюсь выполнить следующее:

User user = jda.getUserById(id);

Здесь id получается из ArrayList. Если этот идентификатор совпадает с идентификатором пользователя, отправляющего команду, все пройдет нормально. Но, если это идентификатор другого пользователя, который не выполнял команду, он просто вернет null . Я уверен, что ArrayList содержит правильную информацию.

Ограничена ли функция getUserById пользователем, который выдает команду? И если да, то как я могу обойти это, чтобы получить любого пользователя по его идентификатору, независимо от того, кто отправляет сообщение?

Пример

Я добавил необходимые данные от двух разных пользователей, поэтому ArrayList содержит два разных идентификатора Discord.

 User userName = jda.getUserById(id);
System.out.println(userName);
 

При выполнении команды из учетной записи xAur0ra возвращается следующее:

 U:xAur0ra(myID)
null
 

Ответ №1:

Как объясняется в документации: это будет проверять только кэшированных пользователей!

Это означает, что пользователь просто не кэшируется в данный момент. Вы можете использовать методы retrieveUserById и User.fromId, чтобы получить пользователя для конкретного варианта использования, который вы хотите.

Пример

 jda.retrieveUserById(userId).queue(user -> {
    System.out.println(user);
});
 

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

1. Мне не удалось найти эти другие функции при поиске решения, но использование retrieveUserById помогло мне! Лямбда-выражение не сработало, потому что оно говорит, что .queue не удалось разрешить в «User».

2. Это была опечатка, исправлена