首页 > 解决方案 > java - 如何从Java中的电报机器人获取用户的输入?

问题描述

我已经创建了一个电报机器人,现在我需要问用户一些事情,并将输入的答案保存在一个字符串中。在这里我写了一个代码:如果第一个命令是“/mytext”,我想显示这个“请输入您的文本”。之后,用户键入的任何内容都将保存在字符串中。一切都很好,但最后一部分,理解第二个输入,没有发生!这是我这部分的代码:

public void onUpdateReceived(Update update) {

    String command = update.getMessage().getText() ;
    long chatId = update.getMessage().getChatId();
    SendMessage message = new SendMessage() ;

    if (command.equals("/mytext")){
        message.setText("please enter your text");
        String command2 = update.getMessage().getText() ;
        if (command2.equals("hello")){
             message.setText("right");
        }else {
            message.setText("wrong");
        }
    }
    message.setChatId(chatId) ;

    try {
        execute(message);
    } catch (TelegramApiException e) {
        e.printStackTrace();
    }
}

请帮我解决这个问题。多谢 !

标签: javabotstelegram

解决方案


根据您的代码,我假设您正试图从用户发送的同一个 Update 实例中捕获多个输入/命令,这是错误的。因为,每个更新实例都会附带用户发送的每个输入/消息。例如,第一个命令将作为更新发送,然后您将读取该命令并使用它做任何您想做的事情(即将它临时存储在全局变量或 hashmap 中,以便为用户接下来的第二个命令取回它)。之后,对于第二个命令,您应该要求用户像这样发送它:

message.setText("please enter your text");
message.setChatId(chatId) ;
    try {
        execute(message);
    } catch (TelegramApiException e) {
        e.printStackTrace();
    }

发送您对第二个命令的请求后,用户将通过发送第二个命令进行响应,您现在已准备好处理这两个命令。第一个命令可以从临时全局变量中检索,第二个命令可以从最后收到的更新中检索。


推荐阅读