如何在电报机器人 api 的一个命令中获取多个输入?
How to get several inputs in one command in telegram bot api?
例如,机器人有命令/set_coordinates
。它接受纬度和经度,如下所示:
- 机器人:输入纬度
- 用户:16.4353
- 机器人:输入经度
- 用户:140.4325
问题是机器人每条消息只接收一个坐标,要理解它需要请求纬度还是经度,它应该记住之前的消息。例如:
latitude_was_set = False
latitude, longitude = 0, 0
def set_coordinates_handler(update: Update, context: Context):
received_text = update.message.text
# First coordinate
if not self.latitude_was_set:
latitude = float(received_text)
self.latitude_was_set = True
else:
longitude = float(received_text)
它是没有打印和其他东西的简化函数,以证明我需要 标志latitude_was_self
。问题是我应该将所有内容存储在数据库中,
因为两个用户可以有不同的 latitude_was_set
并且 python 中的变量不适合它。似乎不恰当地使用数据库在那里存储标志。如果我需要在一个命令中获取更多数据,这个问题会变得更大。除了使用数据库作为标志存储,还有其他选择吗?
这个问题可能很愚蠢,但这是我的第一个机器人 :)
PTB 为此类用例提供了两种有用的机制:
- Storing data
ConversationHandler
, see also the example
免责声明:我目前是 python-telegram-bot
的维护者
例如,机器人有命令/set_coordinates
。它接受纬度和经度,如下所示:
- 机器人:输入纬度
- 用户:16.4353
- 机器人:输入经度
- 用户:140.4325
问题是机器人每条消息只接收一个坐标,要理解它需要请求纬度还是经度,它应该记住之前的消息。例如:
latitude_was_set = False
latitude, longitude = 0, 0
def set_coordinates_handler(update: Update, context: Context):
received_text = update.message.text
# First coordinate
if not self.latitude_was_set:
latitude = float(received_text)
self.latitude_was_set = True
else:
longitude = float(received_text)
它是没有打印和其他东西的简化函数,以证明我需要 标志latitude_was_self
。问题是我应该将所有内容存储在数据库中,
因为两个用户可以有不同的 latitude_was_set
并且 python 中的变量不适合它。似乎不恰当地使用数据库在那里存储标志。如果我需要在一个命令中获取更多数据,这个问题会变得更大。除了使用数据库作为标志存储,还有其他选择吗?
这个问题可能很愚蠢,但这是我的第一个机器人 :)
PTB 为此类用例提供了两种有用的机制:
- Storing data
ConversationHandler
, see also the example
免责声明:我目前是 python-telegram-bot