【问题标题】:How to wait for the user answer and keep the answer for select如何等待用户回答并保留选择的答案
【发布时间】:2018-01-20 18:38:22
【问题描述】:

我想为月薪制作一个电报机器人。 用户发送用户名,然后是密码。 机器人发送工资信息。 问题就在这里,用户发送salary的命令, 我要发送

bot:  user name
user: tiger
bot: password
user: 985468

我在等待用户并保留第一条消息(用户名)时遇到问题。

【问题讨论】:

  • 在数据库、文件或更好的解决方案中记录您的用户数据:redis。

标签: c# bots telegram telegram-bot


【解决方案1】:

电报 API 不允许您这样做。 不过,您可以使用多种方法来做到这一点。

  • 您可以使用您的数据库来存储此对话的状态
  • 您可以要求用户回复您的消息,以便查看回复的消息是什么
  • 您可以在可能的情况下使用内联键盘(可选择的选项),以便检查 callback_data
  • 您可以要求用户以特定关键字开始消息
  • 您可以要求用户在一条消息中写下所有内容,可能用一个字符分割,然后再分割该字符

现在什么对用户更好?

  • 对于用户来说最好是第一个选项,因此您将对话的状态存储在数据库中,并在机器人收到消息后检查对话的状态并获得所引用的内容

什么对你更好?

  • 我想说对你来说最好使用回复黑客,所以你不需要数据库来存储每个用户的聊天状态。您可以使用 force_reply 参数让用户更清楚。

  • 我建议在可能的情况下使用内联键盘,因为它们使用 callback_data 使事情变得更容易。例如,您向用户询问年龄,您可以使用 80 个按钮(100 个是限制)回复,他可以按正确的年龄。这更好,因为当用户编写文本而不是数字时,您不必担心奇怪的情况(例如,他编写 ten 而不是 10)并且您不需要检查数据库上的状态或检查回复。您只需检查 callback_data。一个想法是每个按钮都可以有一个以“age_ {age option}”开头的callback_data,并且您处理以age_开头的callback_data,只取最后一部分。你不需要db,你不需要检查回复,你不需要处理用户发送错误格式的奇怪情况,你只需要处理回调

【讨论】:

    【解决方案2】:

    您可以发送Hi Sean, please enter your passwordForceReply,并阅读.message.reply_to_message.text 字段。

    我认为这是解决此问题的唯一方法,但我建议您像其他答案一样使用自己的数据库。

    【讨论】:

    • 首先我应该得到用户名然后密码
    【解决方案3】:

    User Action StepUser Input Data 保存在数据库中。 并在每条收到的消息中检查User Action Step 以完成正确的工作。

    【讨论】:

      猜你喜欢
      • 2020-06-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-01-16
      • 2021-09-17
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多