简体   繁体   English

Discord bot 无法验证用户是否存在,引发 indexoutofbounds 错误

[英]Discord bot cannot verify if the user is not existing, throws an indexoutofbounds error

I'm creating a discord bot, I've managed to call the names of the user input, however, if the user is not existing in the server, I couldn't throw an error message and keeps giving me IndexOutOfBoundsError.我正在创建一个不和谐的机器人,我设法调用了用户输入的名称,但是,如果用户不存在于服务器中,我无法抛出错误消息并不断给我 IndexOutOfBoundsError。

 String[] message = e.getMessage().getContentRaw().split(" ");
            if(message.length == 1 && message[0].equalsIgnoreCase("!user")){
                e.getChannel().sendMessage("To get a user's info, type !user [name]").queue();
            }
            else if(message.length == 2 && message[0].equalsIgnoreCase("!user")){
    
               String username = message[1];
               User user = e.getGuild().getMembersByName(username, true).get(0).getUser();
               EmbedBuilder avatarEmbed = new EmbedBuilder();
               String avatar = user.getAvatarUrl();
    
               avatarEmbed.setTitle(user.getName() + "'s Info:");
               avatarEmbed.addField("Name", user.getName(), true);
               avatarEmbed.addField("Online Status: ", e.getGuild().getMembersByName(username,
               true).get(0).getOnlineStatus().toString(), true);

For example, if I input !user Mark then the bot will show the information of the user if the user is existing in the server.例如,如果我输入 !user Mark 那么如果用户存在于服务器中,机器人将显示用户的信息。

if(!user.getName().equalsIgnoreCase(username)){
                   e.getChannel().sendMessage("User doesn't exist!").queue();
               }

And this is the code for verifying if the user is not existing, the bot would message but it gives me an IndexOutOfBoundError.这是用于验证用户是否不存在的代码,机器人会发送消息,但它会给我一个 IndexOutOfBoundError。 What could be the reason?可能是什么原因? Please leave an answer if you need more codes but I believe this would be enough, other codes are just adding fields and design, etc.如果您需要更多代码,请留下答案,但我相信这已经足够了,其他代码只是添加字段和设计等。

    [JDA MainWS-ReadThread] ERROR JDA - One of the EventListeners had an uncaught exception
java.lang.IndexOutOfBoundsException: Index: 0, Size: 0
    at java.base/java.util.LinkedList.checkElementIndex(LinkedList.java:559)
    at java.base/java.util.LinkedList.get(LinkedList.java:480)
    at java.base/java.util.Collections$UnmodifiableList.get(Collections.java:1310)
    at UserInfoCommand.onGuildMessageReceived(UserInfoCommand.java:25)
    at net.dv8tion.jda.core.hooks.ListenerAdapter.onEvent(ListenerAdapter.java:373)
    at net.dv8tion.jda.core.hooks.InterfacedEventManager.handle(InterfacedEventManager.java:84)
    at net.dv8tion.jda.core.handle.MessageCreateHandler.handleInternally(MessageCreateHandler.java:90)
    at net.dv8tion.jda.core.handle.SocketHandler.handle(SocketHandler.java:37)
    at net.dv8tion.jda.core.requests.WebSocketClient.handleEvent(WebSocketClient.java:1040)
    at net.dv8tion.jda.core.requests.WebSocketClient.onTextMessage(WebSocketClient.java:680)

This is the error code.这是错误代码。 Thank you!谢谢!

The problem lies within the User user = e.getGuild().getMembersByName(username, true).get(0).getUser();问题在于User user = e.getGuild().getMembersByName(username, true).get(0).getUser();

See, you're calling a arraylist of members with the getMembersByName("name", ignoreCase);看,您正在使用getMembersByName("name", ignoreCase);调用成员getMembersByName("name", ignoreCase); method.方法。 But because no members can be found, that arraylist will be given 0 members.但是因为找不到成员,该数组列表将被赋予 0 个成员。

Try this code for a change:尝试更改此代码:

        String[] message = e.getMessage().getContentRaw().split(" ");
        if(message.length == 1 && message[0].equalsIgnoreCase("!user")){
            e.getChannel().sendMessage("To get a user's info, type !user [name]").queue();
        }
        else if(message.length == 2 && message[0].equalsIgnoreCase("!user")){

            String username = message[1];
            ArrayList<Member> memberList = e.getGuild().getMembersByName(username, true);

            if (memberList.size()>0) {
                User user = memberList.get(0);
                EmbedBuilder avatarEmbed = new EmbedBuilder();
                String avatar = user.getAvatarUrl();

                avatarEmbed.setTitle(user.getName() + "'s Info:");
                avatarEmbed.addField("Name", user.getName(), true);
                avatarEmbed.addField("Online Status: ", memberList.get(0).getOnlineStatus().toString(), true);
            } else {
                e.getChannel().sendMessage("User doesn't exist!").queue();
            }
        }

This checks if there are members in the guild that suffice the argument.这将检查公会中是否有满足论点的成员。 If it doesn't (No members with the name) it will go to the error message!如果没有(没有名字的成员),它将转到错误消息!

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM