Как перебрать всех членов гильдии и изменить их псевдонимы с помощью бота Discord, построенного на JDA - PullRequest
1 голос
/ 25 октября 2019

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

У меня все хорошо с Java, я просто никогда раньше не использовал JDA. Я не могу найти примеры кода чего-то такого простого, как перечисление всех членов и их повторение. Может ли кто-нибудь, пожалуйста, указать мне в правильном направлении? Я немного поработал над REST в университете, но не очень.

Добавление блоков catch, но я не получаю значения ников в моем списке, поэтому мой код ничего не делает. Я пытался реализовать в списках, массивах и массивах, но похоже, что проблема заключается в получении информации от самой гильдии.

if(event.getMessage().getContentRaw().equals("!tags")){
        Guild guild = event.getGuild();
        List<Member> users = guild.getMembers();
        for(Member member: users){
            String s = "";
            try{
                s = member.getNickname();
                if(!member.getNickname().startsWith("[NNN]")) {
                    try {
                        member.modifyNickname("[NNN]" + member.getNickname()).queue();
                    } catch (Exception ignored) {
                    }
                }
            }
            catch(Exception ignored){ }
        }
    }

1 Ответ

0 голосов
/ 25 октября 2019

Псевдоним может иметь значение NULL, поскольку пользователь может не устанавливать его, это отображается как возвращаемое значение NULL. Вы можете проверить это, выполнив s == null || !s.startsWith("[NNN]"). В качестве альтернативы вы можете использовать getEffectiveName, который будет возвращать имя пользователя, если псевдоним не был установлен для сервера:

Member self = guild.getSelfMember();
for (Member member : guild.getMembers()) {
    String name = member.getEffectiveName(); // username or nickname
    if (!name.startsWith("[NNN]") && self.canInteract(member)) {
        member.modifyNickname("[NNN]" + name).queue();
    }
}

Я использовал canInteract, чтобы избежать исключений иерархии, которые неизбежно возникнут, если вы попытаетесь установитьпсевдоним владельца сервера или участника, который имеет более высокую роль, чем ваш бот.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...