【问题标题】:how to get an input from user from telegram bot in java?java - 如何从Java中的电报机器人获取用户的输入?
【发布时间】:2021-08-28 16:25:50
【问题描述】:

我已经创建了一个电报机器人,现在我需要问用户一些事情,并将输入的答案保存在一个字符串中。在这里我写了一个代码:如果第一个命令是“/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();
    }
}

请帮我解决这个问题。非常感谢!

【问题讨论】:

  • 用户会在哪里输入字符串?是在控制台还是其他地方
  • 在电报机器人上

标签: java bots telegram


【解决方案1】:

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

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

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

【讨论】:

    猜你喜欢
    • 2018-01-12
    • 2018-07-22
    • 2017-07-10
    • 2021-08-18
    • 2017-05-17
    • 2016-08-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多