首页 > 解决方案 > 如何使用我的电报机器人存储来自用户的输入,然后在需要时获取输入

问题描述

我希望我的 BOT 向用户提问。

假设我有一个名为“email”的空字符串

我设置 email=''

让问题成为用户的电子邮件。所以机器人会要求用户输入他的电子邮件,然后无论用户在问题之后输入什么,机器人都会保存回复并更新电子邮件。

我已经知道,默认情况下,发送到电报机器人的任何回复/消息都会被存储,您可以使用 getUpdates 方法检索它。

假设用户回复:“name@Gmailcom”

所以现在我想将此回复存储在变量“电子邮件”中

所以变量“email”现在将包含值“name@Gmail.com”

我希望机器人包含一个帐户部分。因此,当用户单击此按钮时,它将显示如下内容:

User: 

Email:

No of Referrals:

因此,当用户单击“帐户”按钮时,它将显示:

User: JOHN

Email:

No of Referrals:

#Since email='' therefore email is blank.

现在,当用户更新他的电子邮件然后返回并单击“帐户”时,我们现在拥有:

User: JOHN

Email: name@Gmail.com

No of Referrals:

另外请在用户更新他的电子邮件并发送回复后,是否可以立即回复,然后 BOT 会回复如下消息:

Thank you for updating your Email address 

Your email is : name@Gmail.com

另外,如果您对如何使用电报机器人创建推荐链接有想法,请分享。

我怎样才能做到这一点。我正在使用 pyTelegramBotAPI。

标签: pythontelegrampython-telegram-bot

解决方案


简单的回答:

你需要一个数据库

例如,我开发了一个预算电报机器人,用于存储日常购买并分析支出。

我将所有用户数据存储在一个单独的数据库中(在这种情况下redis)并稍后访问它。

鉴于您的用例,我会推荐一个简单的基于键的数据库,例如redis您可以在其中存储和访问简单的类似字典的数据。Heroku 和其他流行的托管电报机器人的网络服务也提供免费redis实例。

这是我的机器人的示例代码

# Load/create pickle and add new record, afterwards save pickle
    try:
        user_id = str(update.effective_user.id)
        db = pickle.loads(r.get(user_id))
        db.append(entry)
        pdb = pickle.dumps(db)
        r.set(user_id,pdb)
    except:
        user_id = str(update.effective_user.id)
        db = list()
        db.append(entry)
        pdb = pickle.dumps(db)
        r.set(user_id,pdb)

    update.message.reply_text('Saved!')

推荐阅读