我最近发现了这个错误:当用户在服务器中没有昵称并且您尝试使用我的命令重命名他们时,它会将其命名为 S!nickname <@userMention> e
=(用户名)<@userId> e
尝试做一些事情,比如重命名用户两次或两次替换提及但它不起作用......
这是我对其重命名的行(应该是唯一重要的行):
event.getMessage().getMentionedMembers().get(0).modifyNickname(event.getMessage().getContentRaw().substring(11).replace(event.getMessage().getMentionedMembers().get(0).getAsMention(), "")).queue();
答案 0 :(得分:1)
您可以使用 String#split
正确解析命令:
String command = "s!nickname <@!id> new nickname";
String[] parts = command.split("\\s+", 3);
member.modifyNickname(parts[2]).queue();
您的问题是您希望提及字符串始终相同。这是一个错误的假设,因为提及有 2 种不同的格式可以互换使用。如果提及格式不同,replace
函数将无法正确替换内容,只会返回相同的字符串。
考虑到您知道要删除的部分始终位于字符串的开头并后跟一个空格,因此您对替换的使用是有问题的。使用 split
或 indexOf
和 substring
很容易解析。我还建议开始使用变量来避免像这样的 200 个字符的长行。