如何允许 java telegram bot 等待用户回复?

how to allow java telegram bot wait user reply?

大家好。我可以让我的 java telegram bot 等待用户回复并继续问另一个问题吗?

if(msg.contains("/register"))
            {
    SendMessage message = SendMessage
            .builder()
            .chatId(Long.toString(telegram_id))
            .text("Please enter your name.\n" +
                    "/cancelReg To cancel Registration")
            .build();
    executeMessageMethod(message);

    message = SendMessage
            .builder()
            .chatId(Long.toString(telegram_id))
            .text("Please enter your handicap.\n" +
                    "/cancelReg To cancel Registration")
            .build();
    executeMessageMethod(message);
}

我的代码不允许我的机器人问 1 个问题并等待用户的回复...所以我该如何解决...

您应该明白您的消息接收线程不应该“等待”任何东西。它应该立即处理每条收入消息,否则你所有的收入消息都会卡住等待用户回复。

我将向用户对象添加“dialogId”字段并以这种方式处理传入消息:

public void process(Message message) {
    User user = UserDAO.getOrCreateUserByChatId(message.fromId);

    String msg = message.getMessage();
    if (msg.contains("/register")) {
        user.dialogId = Dialogs.REGISTER; // Dialogs - your enum or an interface/class with static final fields.
    } else if (/*all other commands possible*/) {}

    if (user.dialogId == null) {
        return;
    }

    switch (user.dialogId) {
        case REGISTER:
            processRegister(user, msg);
            break;

        /*all other dialogs possible*/
    }
}

private static final String PLEASE_ENTER_NAME_MESSAGE = "Please enter your name.\n/cancelReg To cancel Registration";
private static final String PLEASE_ENTER_HANDICAP_MESSAGE = "Please enter your handicap.\n/cancelReg To cancel Registration";
private static final String REGISTRATION_SUCCESSFULL_MESSAGE = "Registration successfull";

private void processRegister(User user, String msg) {
    if (msg.equals("/register")) {
        sendMessage(user.chatId, PLEASE_ENTER_NAME_MESSAGE);
        return;
    }

    if (!user.hasName()) {
        user.setName(msg);
        sendMessage(user.chatId, PLEASE_ENTER_HANDICAP_MESSAGE);
        return;
    }

    if (!user.hasHandicap()) {
        user.setHandicap(msg);
        user.dialogId = GENERAL; // for example
        sendMessage(user.chatId, REGISTRATION_SUCCESSFULL_MESSAGE);
        return;
    }
}

private void sendMessage(long chatId, String msg) {
    SendMessage message = new SendMessage
                        .builder()
                        .chatId(Long.toString(chatId))
                        .text(msg)
                        .build();
    executeMessageMethod(message);
}

至少,这是我自己找到并成功使用的方式,如果有人能给出如何使它优雅的建议,我将不胜感激。