我正在编写一个电报机器人来注册任务。我使用 rubenlagus 的图书馆。处理传入消息时出现问题。方法:public void onUpdateReceived(Update update){},允许您处理每条单独的消息,在收到消息后调用其他方法,例如“/newtask”,但是如何使它在向机器人发送命令后,机器人等待下一条消息并写入例如,此文本到一个变量。对话框示例: 用户:/newtask 机器人:输入任务名称 用户:与医生预约。短语:“预约医生”应写入变量。
我正在编写一个电报机器人来注册任务。我使用 rubenlagus 的图书馆。处理传入消息时出现问题。方法:public void onUpdateReceived(Update update){},允许您处理每条单独的消息,在收到消息后调用其他方法,例如“/newtask”,但是如何使它在向机器人发送命令后,机器人等待下一条消息并写入例如,此文本到一个变量。对话框示例: 用户:/newtask 机器人:输入任务名称 用户:与医生预约。短语:“预约医生”应写入变量。
在最简单的实现中,您可以拥有一个包含用户 ID 的列表,该命令对其
/newtask处于活动状态(需要文本输入)。从头开始(在机器人类中):
如果你在方法
onUpdateReceived()中定义了命令来了/newtask,那么将它传递给handleNewTaskCommand(),用户 id 将被添加到活动列表中(processingUsers);如果您在方法中确定
onUpdateReceived()纯文本已到达,则将 update 传递给handleSimpleMessage(),它检查当前是否需要该用户输入。如果需要,请从列表中删除用户并对文本执行必要的操作。这个实现并不假装是最好的,但是从库和电报 api 中分析机器人的工作以进一步规划应用程序就足够了。
另请注意,传入
Update消息可能不包含“常规”消息(请参阅Update字段editedMessage等channelPost),在这种情况下,调用将getFrom()引发 NPE。因此,在处理更新之前,建议首先检查它是什么以及它基本上包含什么。