#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. Это была опечатка, исправлена