Проблемы с ответом бота телеграммы - PullRequest
0 голосов
/ 09 мая 2018

Проблема:

При одновременном запросе на бота пользователи могут получить ответ другого. Я пытался разделить каждый обработчик в отдельном потоке, я попытался sendMessageAsync. Но из этого ничего не вышло. Возможно, есть какой-то другой способ? Я пишу на Java длинный опросный бот. Библиотека Rubenlagus / TelegramBots. Заранее спасибо.

Служба исполнения:

public synchronized void onUpdateReceived(Update update) {

    boolean isFound = false;

    if (update.hasMessage() && update.getMessage().hasText()) {

        if (update.getMessage().getText().equals("/stats")) {
            executorService.execute(() -> logger.getStats(update, this));
            return;
        }

        for (User user : usersList) {
            if (user.getId().equals(update.getMessage().getFrom().getId())) {
                executorService.execute(() -> user.handle(update));
                isFound = true;
                break;
            }
        }

        if (isFound == false) {
            logger.addUser(update);
            User newUser = new User(update, new CommandHandler(this));
            usersList.add(newUser);
            executorService.execute(() -> newUser.handle(update));
        }
    }


}

sendMessageAsync:

 public void onUpdateReceived(Update update) {

    boolean isFound = false;
    SendMessage message = new SendMessage()
            .setChatId(update.getMessage().getChatId())
            .setText("I don't understand you:(");

    if (update.hasMessage() && update.getMessage().hasText()) {

        if (update.getMessage().getText().equals("/stats")) {
            logger.getStats(update, this);
            return;
        }

        for (User user : usersList) {
            if (user.getId().equals(update.getMessage().getFrom().getId())) {
                message = user.handle(update);
                isFound = true;
                break;
            }
        }

        if (isFound == false) {
            logger.addUser(update);
            User newUser = new User(update, new CommandHandler());
            usersList.add(newUser);
            message = newUser.handle(update);
        }
    }

    throwMessage(message);
}

public void throwMessage(SendMessage message) {
    try {
        this.executeAsync(message, new SentCallback<Message>() {
            @Override
            public void onResult(BotApiMethod<Message> botApiMethod, Message message) {

            }

            @Override
            public void onError(BotApiMethod<Message> botApiMethod, TelegramApiRequestException e) {

            }

            @Override
            public void onException(BotApiMethod<Message> botApiMethod, Exception e) {

            }
        });
    } catch (TelegramApiException e) {
        e.printStackTrace();
    }
}
...