更改昵称时,昵称命令不会用任何内容替换 UserMention

时间:2020-12-19 13:47:23

标签: java discord

我最近发现了这个错误:当用户在服务器中没有昵称并且您尝试使用我的命令重命名他们时,它会将其命名为 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();

哦还有截图: https://gyazo.com/bdb15091497ecb7d4e3d545a4f2eb582

1 个答案:

答案 0 :(得分:1)

您可以使用 String#split 正确解析命令:

String command = "s!nickname <@!id> new nickname";
String[] parts = command.split("\\s+", 3);
member.modifyNickname(parts[2]).queue();

您的问题是您希望提及字符串始终相同。这是一个错误的假设,因为提及有 2 种不同的格式可以互换使用。如果提及格式不同,replace 函数将无法正确替换内容,只会返回相同的字符串。

考虑到您知道要删除的部分始终位于字符串的开头并后跟一个空格,因此您对替换的使用是有问题的。使用 splitindexOfsubstring 很容易解析。我还建议开始使用变量来避免像这样的 200 个字符的长行。