Как я могу получить список прореагировавших пользователей JDA?

Я пытаюсь создать бота, который редактирует встроенное сообщение после добавления реакции. Конкретно addField к старому встраиванию со Списком реакции пользователей.

Как я могу получить список прореагировавших пользователей?

Я использую последнюю версию Discord JDA.

    public void onMessageReactionAdd(MessageReactionAddEvent e) {
        if (e.getReactionEmote().getName().equals("????")) {
            if (!e.getUser().isBot()) {
                e.getChannel().retrieveMessageById(e.getMessageId()).queue(p -> {
                    if (p.getEmbeds().size() > 0) {
                        if (p.getEmbeds().get(0) != null) {
                            EmbedBuilder gameEmbedWithPlayers = new EmbedBuilder()
                                    .setTitle(p.getEmbeds().get(0).getTitle())
                                    .setDescription(p.getEmbeds().get(0).getDescription())
                                    .setThumbnail(p.getEmbeds().get(0).getThumbnail().getUrl())
                                    .setFooter(p.getEmbeds().get(0).getFooter().getText(), p.getEmbeds().get(0).getFooter().getIconUrl())
                                    .setColor(p.getEmbeds().get(0).getColor())
                                                              //help here
                                    .addField("???? Players", REACTIONED USERS, false);

                            p.editMessage(gameEmbedWithPlayers.build()).queue();
                        }
                    }
                });
            }
        }
    }

person qwertydev    schedule 29.11.2020    source источник
comment
Чтобы избежать вложенных ветвей if, вы можете использовать оператор &&, чтобы объединить их в одну if   -  person Minn    schedule 29.11.2020


Ответы (1)


Вы захотите использовать MessageReaction # retrieveUsers (). Вы можете получить MessageReaction, используя Сообщение # getReactions ().


Пример:

List<User> reactedUsers = new ArrayList<>();
for (MessageReaction reaction : msg.getReactions()){
    reactedUsers.addAll(reaction.retrieveUsers().complete());
}
person MrBorder    schedule 29.11.2020
comment
Complete () получит только до 100 пользователей. Вам следует использовать один из других методов, предоставляемых PaginationAction, и вам следует избегать блокировки подобного кода. - person Minn; 29.11.2020
comment
@Minn Я в курсе. Это всего лишь простой пример, я предоставил ссылки на javadocs обоих методов, чтобы они могли понять это сами и использовать их так, как они считают нужным. - person MrBorder; 29.11.2020