nickname命令不会用nothing替换usernotice

k2fxgqgv  于 2021-06-30  发布在  Java
关注(0)|答案(1)|浏览(328)

我最近发现了这个错误:当一个用户在服务器上没有昵称,而你试图用我的命令重命名他们时,它会这样命名 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

gdx19jrr

gdx19jrr1#

你可以用 String#split 要正确分析命令:

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

您的问题是,您希望提及字符串总是相同的。这是一个不正确的假设,因为有两种不同的格式的提及是互换使用。这个 replace 如果提到的格式不同,函数将无法正确替换内容,并且只返回相同的字符串。
考虑到您知道要删除的部分始终位于字符串的开头,后跟空格,因此使用replace是有问题的。这是非常容易解析使用任何一个 split 或者 indexOfsubstring . 我还建议开始使用变量来避免像这样长200个字符的行。

相关问题