首页 > 解决方案 > JDA 提到的成员 - 不工作的命令

问题描述

我正在使用JavaJDA API开发我的不和谐机器人。在那之前,我问了一个类似的问题,但我遇到了另一个问题。

从这一行开始,问题开始了:

final Member MentionedMem = event.getMessage().getMentionedMembers().get(0);

感谢https://stackoverflow.com/users/10630900/minn回答了上一个问题,他向我解释说这条线导致了错误:

java.lang.IndexOutOfBoundsException: Index 0 out of bounds for length 0

由于某种原因或其他原因,它会引发错误。

我试图找到为什么这个命令不起作用的答案。我唯一知道的是这个命令returns是一个空数组args。因此,我无法完成机器人,即无法检查成员是否可以踢其他人,也无法制作主代码块踢成员。

如何修复此错误和/或编写其余代码?对不起我的英语,非常感谢你。

一些代码:

public class KickComm extends ListenerAdapter {

    public void onGuildMessageReceived(GuildMessageReceivedEvent event) {
        String[] message = event
                .getMessage()
                .getContentRaw()
                .split(" ");

        // final Member target = event.getMessage().getMentionedMembers().get(0); ERROR CUZ I DONT NOW WHY
        
        final Member SelfMember = event
                .getGuild()
                .getSelfMember();

        if(message[0].equalsIgnoreCase(Main.prefix + "kick"))
        {                                                                                                   
            if (message.length < 2) {

                EmbedBuilder NoUser = new EmbedBuilder();
                NoUser.setColor(0xff3923);
                NoUser.setTitle("\uD83D\uDD34You need to add a <@username> and <reason>");
                NoUser.setFooter("Usage: " + Main.prefix + "kick <@username> <reason>.",
                        Objects
                                .requireNonNull(event.getMember())
                                .getUser()
                                .getAvatarUrl());

                event
                        .getChannel()
                        .sendMessage(NoUser.build())
                        .queue();

                NoUser.clear();

            } else if (message.length < 3) {                                                                

                EmbedBuilder NoReason = new EmbedBuilder();
                NoReason.setColor(0xff3923);
                NoReason.setTitle("\uD83D\uDD34You need to add a <reason>.");
                NoReason.setFooter("Usage: " + Main.prefix + "kick <@username> <reason>.",
                        Objects
                                .requireNonNull(event.getMember())
                                .getUser()
                                .getAvatarUrl());

                event
                        .getChannel()
                        .sendMessage(NoReason.build())
                        .queue();

                NoReason.clear();

            } else if(!SelfMember.hasPermission(Permission.KICK_MEMBERS)) {

                EmbedBuilder NoPermission = new EmbedBuilder();
                NoPermission.setColor(0xff3923);
                NoPermission.setTitle("\uD83D\uDD34You don't have permission to use this command.");
                NoPermission.setFooter("Usage: " + Main.prefix + "kick <@username> <reason>.",
                        Objects
                                .requireNonNull(event.getMember())
                                .getUser()
                                .getAvatarUrl());

                event
                        .getChannel()
                        .sendMessage(NoPermission.build())
                        .queue();

                NoPermission.clear();

            } else if(!Objects.requireNonNull(event.getMember()).hasPermission(Permission.KICK_MEMBERS) || !event.getMember().canInteract(target)) {        //Example, don't works 

                EmbedBuilder NoPermission = new EmbedBuilder();
                NoPermission.setColor(0xff3923);
                NoPermission.setTitle("\uD83D\uDD34You don't have permission to use this command.");
                NoPermission.setFooter("Usage: " + Main.prefix + "kick <@username> <reason>.",
                        Objects
                                .requireNonNull(event.getMember())
                                .getUser()
                                .getAvatarUrl());

                event
                        .getChannel()
                        .sendMessage(NoPermission.build())
                        .queue();

                NoPermission.clear();
            }
        }
    }
}

UPD:如果你降级,请指出我犯的错误,而不是仅仅因为你想降级。我要纠正错误,而不是破坏你的心情

标签: javadiscorddiscord-jda

解决方案


User mentionedUser = event.getMessage().getMentionedMembers().get(0).getUser();

如果有人还需要它...

出于某种原因,问题是您使用了Member而不是User。此外,您必须使用.getUser()才能真正获得您想要的用户。


推荐阅读