解禁命令 JDA 4.1.1_101,无法正常运行,我不知道为什么
Unban command JDA 4.1.1_101, can't make it work and I don't know why
我正在使用 JDA 4.1 编写 Discord 机器人。1_101。我创建了 "ban" 命令,但我无法使 unban 命令起作用。我真的不明白为什么...谢谢你的帮助。
if (args[0].equalsIgnoreCase(Main.prefix + "unban")) {
if(event.getGuild().getSelfMember().hasPermission(Permission.BAN_MEMBERS)) {
if (args.length > 0 && args.length < 3) {
try {
event.getMessage().delete().queue();
User member = event.getMessage().getMentionedMembers().get(0).getUser();
String id = member.getId();
event.getGuild().unban(id).queue();
EmbedBuilder ban = new EmbedBuilder();
ban.setColor(Color.GREEN);
ban.setTitle("UnBan");
ban.setDescription("UnBan Report");
ban.addField("Staffer: ", event.getMessage().getAuthor().getName(), true);
ban.addField("Unban: ", member.getName(), true);
logs.sendMessage(ban.build()).queue();
} catch (IndexOutOfBoundsException exx) {
EmbedBuilder error = new EmbedBuilder();
error.setColor(0xff3923);
error.setTitle("Error: User");
error.setDescription("Invalid user.");
event.getChannel().sendMessage(error.build()).queue(message -> {
message.delete().queueAfter(5, TimeUnit.SECONDS);
});
}
} else {
EmbedBuilder error = new EmbedBuilder();
error.setColor(0xff3923);
error.setTitle("Error: Wrong usage.");
error.setDescription("Use: .unban [@user].");
event.getChannel().sendMessage(error.build()).queue(message -> {
message.delete().queueAfter(5, TimeUnit.SECONDS);
});
}
}
}
问题是,您正在尝试从消息中的提及中检索用户。
由于用户不再是公会的一员,这似乎不起作用。
要解决此问题,您必须手动检索 ID。
提及的格式始终为 <@userid>
或 <!@userid>
。
要获取 ID,您可以拆分消息并替换不需要的部分,例如String id = event.getMessage().getContentRaw().split("<")[1].split(">")[0].replace("!", "").replace("@", "");
我相信有更好更流畅的方法可以做到这一点。 ;)
检索 ID 的更好方法是使用正则表达式,例如 Minn 提到的 <@!?(\d+)>
。
为了获取用户名,您只需通过 event.getJDA().getUserById(id).getName()
获得 ID。
重要的是要提到您不能正确提及不在服务器上的用户(当他们被禁止时就是这种情况)。
(补充:我尝试使用 .getMentionedUsers()
,结果与 OP 相同。)
我正在使用 JDA 4.1 编写 Discord 机器人。1_101。我创建了 "ban" 命令,但我无法使 unban 命令起作用。我真的不明白为什么...谢谢你的帮助。
if (args[0].equalsIgnoreCase(Main.prefix + "unban")) {
if(event.getGuild().getSelfMember().hasPermission(Permission.BAN_MEMBERS)) {
if (args.length > 0 && args.length < 3) {
try {
event.getMessage().delete().queue();
User member = event.getMessage().getMentionedMembers().get(0).getUser();
String id = member.getId();
event.getGuild().unban(id).queue();
EmbedBuilder ban = new EmbedBuilder();
ban.setColor(Color.GREEN);
ban.setTitle("UnBan");
ban.setDescription("UnBan Report");
ban.addField("Staffer: ", event.getMessage().getAuthor().getName(), true);
ban.addField("Unban: ", member.getName(), true);
logs.sendMessage(ban.build()).queue();
} catch (IndexOutOfBoundsException exx) {
EmbedBuilder error = new EmbedBuilder();
error.setColor(0xff3923);
error.setTitle("Error: User");
error.setDescription("Invalid user.");
event.getChannel().sendMessage(error.build()).queue(message -> {
message.delete().queueAfter(5, TimeUnit.SECONDS);
});
}
} else {
EmbedBuilder error = new EmbedBuilder();
error.setColor(0xff3923);
error.setTitle("Error: Wrong usage.");
error.setDescription("Use: .unban [@user].");
event.getChannel().sendMessage(error.build()).queue(message -> {
message.delete().queueAfter(5, TimeUnit.SECONDS);
});
}
}
}
问题是,您正在尝试从消息中的提及中检索用户。
由于用户不再是公会的一员,这似乎不起作用。
要解决此问题,您必须手动检索 ID。
提及的格式始终为 <@userid>
或 <!@userid>
。
要获取 ID,您可以拆分消息并替换不需要的部分,例如String id = event.getMessage().getContentRaw().split("<")[1].split(">")[0].replace("!", "").replace("@", "");
我相信有更好更流畅的方法可以做到这一点。 ;)
检索 ID 的更好方法是使用正则表达式,例如 Minn 提到的 <@!?(\d+)>
。
为了获取用户名,您只需通过 event.getJDA().getUserById(id).getName()
获得 ID。
重要的是要提到您不能正确提及不在服务器上的用户(当他们被禁止时就是这种情况)。
(补充:我尝试使用 .getMentionedUsers()
,结果与 OP 相同。)