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