python - 如何使用我的电报机器人存储来自用户的输入,然后在需要时获取输入
问题描述
我希望我的 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。
解决方案
简单的回答:
你需要一个数据库
例如,我开发了一个预算电报机器人,用于存储日常购买并分析支出。
我将所有用户数据存储在一个单独的数据库中(在这种情况下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!')
推荐阅读
- amazon-web-services - 是否有工具可以使用 CloudWatch putMetric API 将 AWS QLDB 表中的全部内容发布到 Cloudwatch?
- mqtt - 用户:Bob 在地址 test/signal/abc 上没有队列 bob.test/test/signal/abc 的权限 ='CREATE_DURABLE_QUEUE'
- php - 错误号:1064 CodeIgniter 查询生成器
- java - Azure BlockBlobClient downloadWithResponse 文件大小问题
- c++ - 在 LinkedList 中查找元素 - C++
- sql-server - SQL Server,如果值存在于我的 ID 列表中,则递增所需的所有值
- c# - 读取嵌套结构时遇到问题
- java - 使用 MapStruct 将 2 个字符串字段映射到 OffsetDateTime
- verilog - 如何在系统verilog中创建不同大小的接口数组
- shell - 如何使用 shell 脚本生成 63 到 2048 之间的十六进制数