我正在尝试编写一个简单的电话,列出所有行会用户,检查他们的姓名旁边是否有氏族标签,如果没有,则添加它们,但是我一生都无法正常工作。检查昵称时获取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){ }
        }
    }

最佳答案

昵称可为空,因为用户可以选择不设置一个,这通过返回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来避免层次结构异常,如果您尝试设置服务器所有者或角色比机械手更高的成员的昵称,将不可避免地发生层次结构异常。

关于java - 如何使用基于JDA的Discord机器人遍历公会的所有成员并更改其昵称,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/58558220/

10-10 02:39