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

310 Views Asked by At

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.

 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.

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. 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!

1

There are 1 best solutions below

2
On BEST ANSWER

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

See, you're calling a arraylist of members with the getMembersByName("name", ignoreCase); method. But because no members can be found, that arraylist will be given 0 members.

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!