Как считать данные с отправленного сообщения в telegram bot

Использую Telegram LongPollingBot, возник вопрос, как мне в методе-ответе на сообщение, взять отправленный текст человеком (update) и сделать из него String для дальнейшего использования?

// Ответ на команду /add
private void addAnswer(long chatId, Update update) {
        String name = null;
        
        String messageName = 
                "Окно для добавления пользователя в таблицу\n"
                + "\nВведите имя пользователя\n"
                + "\n_(подсказка - введите username без @)_";
                sendMessage(chatId, messageName, false);
                
        // По моей логике, я должен заняться обработкой update нового, но как именно сказать боту 
        // что я хочу обработать новый update?
        if (update.hasMessage() && update.getMessage().hasText()) {
            name = update.getMessage().getText();
            sendMessage(chatId, "2 этап после скана", false);
        }
    } 

Ответы (2 шт):

Автор решения: Ewrey

Самый лаконичный вариант (вернее, вариант со сном и отдыхом, а не 24/7 залипанием в экран в поиске ответа) - изначально вводить команду как /add (name) {point} (Мне нужны и баллы еще)

Далее, преобразовывать введенное значение в char[], затем с начала массива искать "(", с конца ")" а, то что посередине преобразовывать в отдельный массив, далее в нужную переменную (аналогично с {})

И все, вуа-ля вы получили 2 переменные из одной команды

Практично? - ДА! Идеально? - Явно нет(

Все равно это для администраторов и тратить на это время я не хочу совсем

String command = "/add (yasha) {100}";
        char[] arrayOfCommand = command.toCharArray();
        
        String first = "(";
        char first0 = first.charAt(0);
        
        String second = ")";
        char second0 = second.charAt(0);
        
        String third = "{";
        char third0 = third.charAt(0);
        
        String fourth = "}";
        char fourth0 = fourth.charAt(0);
        
        
        int index1 = 0;
        int index2 = 0;
        int index3 = 0;
        int index4 = 0;
        // [/, a, d, d,  , (, y, a, s, h, a, ),  , {, 1, 0, 0, }]
        for(int i = 0; i<arrayOfCommand.length; i++)
        {
            if (command.charAt(i) == first0)
            {
                index1 = i;
            }
            else if (command.charAt(i) == second0)
            {
                index2 = i;
            }
            else if (command.charAt(i) == third0)
            {
                index3 = i;
            }
            else if (command.charAt(i) == fourth0)
            {
                index4 = i;
            }
        }
        //( - 5, ) - 11, { - 13, } - 17
        // Между 5 и 11 - name
        // Между 13 и 17 points
        
        char firstWordOfName = arrayOfCommand[index1+1];  // Первая буква имени [6]
        char lastWordOfName = arrayOfCommand[index2-1]; // Последняя буква имени [10]
        
        char[] arrayName = new char[index2-index1-1]; // 5 символов как у имени
        
        for (int i = 0; i<arrayName.length; i++)
        {
            if (i<index2-1)
                arrayName[i] = arrayOfCommand[index1+1+i];
            else 
                arrayName[i] = arrayOfCommand[index2-1-i];
        }
        
        String name = new String(arrayName);
→ Ссылка
Автор решения: Ewrey

Придумал альтернативный вариант, думаю будет полезен всем тем, кто не знает как заставить бота "ждать" ответ:

boolean startWait = false; // <- Инициализация булеан переменной в самом начале

@Override
    public void onUpdateReceived(Update update) {
        if (update.hasMessage() && update.getMessage().hasText() && startWait == false) { // Переменная = false значит идет "запрос" на продолжение
            String command = update.getMessage().getText();
            
            if (command.equals("/start")) {
                sendMessage(update, "*Напиши текст!*");
                startWait = true; // Переменная = true в этом цикле она не будет false, а значит будет считка сообщения до те пор, пока она снова не станет false
            }
        }
        
        else if (update.hasMessage() && update.getMessage().hasText() && startWait == true) {
            sendMessage(update, "Вы ввели - "+update.getMessage().getText());
            startWait = false; // "Считка" закончена
        }
    }
→ Ссылка