Как заставить моего бота разногласия генерировать случайный ответ - PullRequest
0 голосов
/ 14 января 2019

Это общий бот, который я сделал из просмотра короткого обучающего видео.

public class App extends ListenerAdapter
{ 
    public static void main( String[] args ) throws Exception
  {
    JDA jda = new JDABuilder(AccountType.BOT).setToken(reference.token).buildBlocking();
    jda.addEventListener(new App());


    } 
    @Override
    public void onMessageReceived(MessageReceivedEvent evt)
    {

        User objUser = evt.getAuthor();
        MessageChannel obgMsgCh = evt.getChannel();
        Message obgMsg = evt.getMessage();

        //Ping bot
        if (obgMsg.getContentRaw().equalsIgnoreCase(reference.prefix+"ping")||(obgMsg.getContentRaw().contains("angry"))) 
                {


            // Response
             obgMsgCh.sendMessage(objUser.getAsMention()+" HI").queue();
      }  


   }

}

Как заставить бот отвечать строками в массиве или массиве списков? например. раньше я пытался сделать

String [] responses = new String[5];
responses[0] = "HELLO";
responses[1] = "I'M ANGRY";
responses[2] = "STOP DOING THAT";
responses[3] = "DO NOT";
responses[4] = "NO";
Random randNum = new Random();

obgMsgCh.sendMessage(objUser.getAsMention()+responses[(randNum.nextInt(responses.length))]).queue();

Тем не менее, он продолжает давать мне ошибку Array index of bounds. Нужен ли мне цикл? В настоящее время я изучаю основы Java, поэтому объясню, используя //, если вы можете решить эту проблему.

Редактировать: исправил мой индекс с 5 до 4, чтобы он оставался в пределах длины массива. Мой бот на самом деле отвечает, но эта ошибка происходит в консоли 10 раз. Мой бот дважды ответил на один пинг.

[JDA MainWS-ReadThread] ERROR JDA - One of the EventListeners had an uncaught exception
java.lang.ArrayIndexOutOfBoundsException: 5

Редактировать: Бот теперь отвечает случайными ответами. Но у него есть странные интервалы. изображение

1 Ответ

0 голосов
/ 16 января 2019

Вы делаете responses[(randNum.nextInt(responses.length))], где responses.length возвращает 5, поэтому randNum.nextInt(responses.length) может возвращать 5, но в вашем массиве (потому что он начинается с 0) responses[4] - это максимум!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...