电报message_handler Python

时间:2018-07-28 15:44:05

标签: python telegram

我的代码中有一个非常简单的message_handler东西,我希望以此方式工作:

如果用户说“是”,则机器人会要求输入名字,然后再输入名字。但是,我不问名字和名字。但是,我的输出将是:

  

名字:是

我该如何解决?

@bot.message_handler(content_types=['text'])
def handle_text(message):
    if message.text == 'YES':
        bot.send_message(message.from_user.id, "Your first Name")
        FirstName = message.text
        bot.send_message(message.from_user.id, "Your second Name")
        SecondName = message.text
        bot.send_message(message.from_user.id, "First Name: " + str(FirstName) + " Second Name: " + str(SecondName))

1 个答案:

答案 0 :(得分:0)

尝试使用FSM。一些库(例如aiogram)具有内置工具和examples的用法。

但是,如果您的库没有FSM,则可以制作自己的简单状态机。只需将用户步骤保存到字典中即可。

states = {}  # key - user_id, value - state

def abstract_handler(...):
    if not states.get(user_id):
        # ask user about his first name here
        states[user_id] = 'first name'
        return

    if states.get(user_id) == 'first name':
        first_name = message.text
        # ask about second name here
        states[user_id] = 'second name'
        return

    if states.get(user_id) == 'second name':
        second_name = message.text
        # etc

P.S .:这只是过程的简单说明。您可以将此代码拆分为多个处理程序。并且不要忘记保存用户数据。

P.P.S:请勿使用CamelCase调用变量:)