[英]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.