当前位置: 首页 > 知识库问答 >
问题:

如何迭代一个公会的所有成员,并使用基于JDA的Discord机器人更改他们的昵称

邓翼
2023-03-14

我试图写一个简单的调用,列出一个公会的所有用户,检查他们的名字旁边是否有氏族标签,如果没有添加他们,但我不能为我的生活得到它的工作。我得到空指针时,检查昵称,所以我认为我没有得到这些值正确。

我对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个答案

阮星火
2023-03-14

昵称可以为null,因为用户可以选择不设置昵称,这由返回null表示。您可以通过执行s==null | |来检查这一点!s、 以“[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来避免层次结构异常,如果您试图设置服务器所有者或角色高于您的bot的成员的昵称,就会不可避免地发生这种异常。

 类似资料: