Как реализовать обработу callback'ов telegram боте для группового чата?

Пишу телеграм бота, который бы реализовывал логику простого квиза для чатика друзей. Один пользователь запускает бота, всплывает вопрос с инлайновыми кнопками и тот пользователь чата, кто первый нажмет правильный ответ, поулчает баллы, после чего клавиатура на этом сообщении скрывается.

На данном этапе у меня возникла проблема, что если несколько пользователей нажимают на инлайновую кнопку одновременно или кто-то ещё успевает нажать кнопку до сокрытия клавиатуры, то засчитываются все нажатия от разных пользователей.

Собственно можете подсказать как реализовать обработку нескольких одновременных callback'ов с одного чата и одного сообщения, так чтобы вычленить первый и обработать только его? Ну или как реализовать такую логику иначе?

Код:


    final BotConfig config;

    public TelegramBot(BotConfig config) {
        this.config = config;

    }

    @Override
    public void onUpdateReceived(Update update) {

        if (update.hasMessage() && update.getMessage().hasText()) {
            String messageText = update.getCallbackQuery().getMessage().getText();
            long chatId = update.getMessage().getChatId();        //в какой чат отправили

            switch (messageText) {
                case "/start@dr_camp_bot", "/start" -> {
                    askQuestion(chatId);
                }
            }
        }
        if (update.hasCallbackQuery()) {
            String callbackData = update.getCallbackQuery().getData();
            String text = update.getCallbackQuery().getMessage().getText();
            int messageId = update.getCallbackQuery().getMessage().getMessageId();
            long chatId = update.getCallbackQuery().getMessage().getChatId();
            String userName = update.getCallbackQuery().getFrom().getUserName();

            if(callbackData.equals("ANSWER1")) {
                changeMessage(text,messageId,chatId);//старое сообщение заменяется и клавиатура исчезает
                String answer = userName+" корректно ответил на вопрос. +25 баллов.";
                sendSimpleMessage(chatId,answer);//в чат выкидывается сообщение, что вот этот конкретный пользователь правильно ответил
                //тут какая-то логика начисления баллов
            }
        }
    }


    private void askQuestion(long chatId) {
        SendMessage message = new SendMessage();
        message.setChatId(String.valueOf(chatId));

        message.setText("Сложный вопрос");

        InlineKeyboardMarkup markupInLine = new InlineKeyboardMarkup();
        List<List<InlineKeyboardButton>> rowsInLine = new ArrayList<>();
        List<InlineKeyboardButton> rowInLine1 = new ArrayList<>();

        var answerButton1 = new InlineKeyboardButton();
        answerButton1.setText("Первый вариант");
        answerButton1.setCallbackData("ANSWER1");
        var answerButton2 = new InlineKeyboardButton();
        answerButton2.setText("Второй вариант");
        answerButton2.setCallbackData("ANSWER2");

        rowInLine1.add(answerButton1);
        rowInLine1.add(answerButton2);
        rowsInLine.add(rowInLine1);

        markupInLine.setKeyboard(rowsInLine);

        message.setReplyMarkup(markupInLine);

        try {
            execute(message);
        }catch(TelegramApiException e) {
            log.error("Error occurred: "+e.getMessage());
        }
    }

    private void sendSimpleMessage(long chatId,String text) {
        SendMessage message = new SendMessage();
        message.setChatId(String.valueOf(chatId));
        message.setText(text);
        try {
            execute(message);
        }catch(TelegramApiException e) {
            log.error("Error occurred: "+e.getMessage());
        }
    }

    private void changeMessage(String newText, int messageId, long chatId) {
        EditMessageText message = new EditMessageText();
        message.setChatId(String.valueOf(chatId));
        message.setText(newText);
        message.setMessageId(messageId);

        try {
            execute(message);
        }catch(TelegramApiException e) {
            log.error("Error occurred: "+e.getMessage());
        }
    }

    @Override
    public String getBotUsername() {
        return config.getBotName();
    }

    @Override
    public String getBotToken() {
        return config.getToken();
    }
}

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