Java电报Bot转换摄氏度到华氏度?



我试图有一个电报机器人响应用户的输入,并将C转换为F(反之亦然)。在最简单的层面上,这是我想要实现的一个细分:

  1. 用户说"转换">
  2. Bot说"您想转换什么?">
  3. 用户输入"摄氏度"或";Fahrenheit"
  4. 如果是"摄氏度",系统回复"请输入值转换">

我尝试了一种使用布尔值的方法,每当捕获感兴趣的命令(在这种情况下为'Convert')时,该布尔值从'false'切换到'true'。一旦机器人做出回应,它就会切换回"假"状态。然而,这是相当有限的,我不确定是否准确:

public class Bot extends TelegramLongPollingBot {
private static Boolean example = false;
public void onUpdateReceived(Update update) {
System.out.println(update.getMessage().getText());
String command = update.getMessage().getText();
SendMessage message = new SendMessage();
// Conversation example
if (command.contains("Convert")) {
example = true;
String ask = "What would you like to convert?";
message.setText(String.valueOf(ask));
}
if (example == true && command.contains("Celsius")) {
example = false;
String answer = "Please enter value to convert.";
message.setText(String.valueOf(answer));
}
}

这就是我被卡住的地方…我不确定这种方法是否有效,也不确定如何捕获用户输入的Double并使用它执行计算。

一旦你得到ConvertCelcius的命令,你显然会结束在example == false状态:

if (command.contains("Convert")) {
example = true;
...
}
if (example == true && command.contains("Celsius")) {
example = false;
...
} 

这里的问题不仅仅是不完整状态——不可能用布尔值保存状态,你需要一个数据类型来保存至少3种状态:请求"转换"请求"celcius/fahhrenheit"请求值。

这里的另一个问题是你必须将当前状态映射到当前用户-如果两个或更多用户同时使用你的bot,你的bot将响应不相关的消息

我建议您使用基于事件的体系结构。你可以创建一个抽象类Method,包括一个方法,如果方法本身被调用,这个方法将被调用。完成这些之后,注册所有需要的方法(例如Convert, Celsius…)并执行所需的代码。这将减少您所需的代码量,并使您的应用程序更具可扩展性。

最新更新