Java 无法在GuidMemberJoin上使用getMember替换所有
出于某种原因,jda不允许我在guildjoinevent上使用replaceAll时使用event.getMember(),我真的不知道为什么会这样。您有两个问题Java 无法在GuidMemberJoin上使用getMember替换所有,java,discord-jda,Java,Discord Jda,出于某种原因,jda不允许我在guildjoinevent上使用replaceAll时使用event.getMember(),我真的不知道为什么会这样。您有两个问题 有一个打字错误 replaceAll的第一个参数被解释为,并且[]定义了一个字符类(在正则表达式中具有特殊含义) 如何解决 修正你的打字错误:“[member]]”⟹ “[成员]” 如果要使用replaceAll,则需要转义[]⟹ “\\[成员]” 作为一种替代方法,您可以使用replace方法,该方法不将正则表达式作为其第一个参数
replaceAll
的第一个参数被解释为,并且[]
定义了一个字符类(在正则表达式中具有特殊含义)“[member]]”
⟹ <代码>“[成员]”replaceAll
,则需要转义[]
⟹ <代码>“\\[成员]”replace
方法,该方法不将正则表达式作为其第一个参数,而是将传入的字符串作为文本(意思是原样的)。但是,您仍然需要修复键入错误,如消息[number]。替换(“[member]”,…)
也许用一种简单的方式来看待它是最容易的
import net.dv8tion.jda.core.EmbedBuilder;
import net.dv8tion.jda.core.hooks.ListenerAdapter;
import java.awt.*;
import java.util.Random;
public class GuildMemberJoinEvent extends ListenerAdapter {
String[] messages = {
"[member] joined. You must construct additional pylons.",
"Never gonna give [member] up. Never let [member] down!",
"Hey! Listen! [member] has joined!",
"Ha! [member] has joined! You activated my trap card!",
"We've been expecting you, [member].",
"It's dangerous to go alone, take [member]!",
"Swoooosh. [member] just landed.",
"Brace yourselves. [member] just joined the server.",
"A wild [member] appeared.",
"Is it hot in here or is it just me? Oh [member] joined that explains it"
};
public void onGuildMemberJoin(GuildMemberJoinEvent event){
Random rand = new Random();
int number = rand.nextInt(messages.length);
EmbedBuilder join = new EmbedBuilder();
join.setColor(Color.red);
join.setDescription(messages[number].replaceAll("[member]]", event.getMember().getAsMention()));
}
}
然后将给您这个示例输出
永远不会放弃[membeStanley42],永远不会让[membeStanley42]失望!
永远不会放弃[会员]。永远不会让[会员]失望!
永远不要放弃Stanley42,永远不要让Stanley42失望!
永远不会放弃[会员]。永远不会让[会员]失望!
永远不要放弃Stanley42,永远不要让Stanley42失望!
尝试使用replace
而不是replaceAll
。我厌倦了使用replace,但它仍然不起作用。出于某种原因,jda不允许我使用event.getMember()当在guildjoinevent上使用replaceAll时——始终要尽可能具体——根据这一描述,我们不得不猜测,您的问题可能是使用了replaceAll
;但可能还有另一个问题(不容易看到)。因此,如果有错误消息,请将其包括在内;如果没有错误消息,请将您的预期和实际发生的情况(意外结果)包括在内。也请参阅。我真的不知道为什么会这样。-看一看。此外,别忘了接受答案(勾选答案旁边的复选标记)当它回答您的问题时。这样,您的问题就不会在搜索中显示为未回答。非常感谢!这有助于我更好地理解它,感谢简化的示例,它仍然不允许我使用event.getMember().getAsMention,但我认为它是“public void onbuildmemberjoin(GuildMemberJoinEvent)”的bcs由于某种原因,它不允许这种情况发生,因此将其更改为“public void onGuildMemberJoin(net.dv8tion.jda.core.events.guild.member.GuildMemberJoinEvent事件)”
static String[] messages = {
"[member] joined. You must construct additional pylons.",
"Never gonna give [member] up. Never let [member] down!",
"Hey! Listen! [member] has joined!",
"Ha! [member] has joined! You activated my trap card!",
"We've been expecting you, [member].",
"It's dangerous to go alone, take [member]!",
"Swoooosh. [member] just landed.",
"Brace yourselves. [member] just joined the server.",
"A wild [member] appeared.",
"Is it hot in here or is it just me? Oh [member] joined that explains it"
};
public static void main(String[] args) {
Random rand = new Random();
int number = rand.nextInt(messages.length);
String member = "Stanley42";
String original = messages[number].replaceAll("[member]]", member);
String originalWithEscaping = messages[number].replaceAll("\\[member]]", member);
String fixedOriginal = messages[number].replaceAll("\\[member]", member);
String useReplace = messages[number].replace("[member]]", member);
String fixedUseReplace = messages[number].replace("[member]", member);
System.out.println(original);
System.out.println(originalWithEscaping);
System.out.println(fixedOriginal);
System.out.println(useReplace);
System.out.println(fixedUseReplace);
}