更改昵称时,昵称命令不会用任何内容替换 UserMention
Posted
技术标签:
【中文标题】更改昵称时,昵称命令不会用任何内容替换 UserMention【英文标题】:Nickname command doesn't replace UserMention with nothing when changing nickname 【发布时间】:2021-03-29 21:37:51 【问题描述】:我最近发现了这个错误:当用户在服务器中没有昵称并且您尝试使用我的命令重命名他们时,它会将其命名为 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】:您可以使用String#split
正确解析命令:
String command = "s!nickname <@!id> new nickname";
String[] parts = command.split("\\s+", 3);
member.modifyNickname(parts[2]).queue();
您的问题是您希望提及字符串始终相同。这是一个不正确的假设,因为有两种不同的提及格式可以互换使用。如果提及格式不同,replace
函数将无法正确替换内容,只会返回相同的字符串。
考虑到您知道要删除的部分是 always 在字符串的开头并后跟一个空格,因此您对 replace 的使用是有问题的。这很容易使用split
或indexOf
和substring
解析。我还建议开始使用变量以避免像这样长 200 个字符的行。
【讨论】:
以上是关于更改昵称时,昵称命令不会用任何内容替换 UserMention的主要内容,如果未能解决你的问题,请参考以下文章