解禁命令 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 相同。)