Telegram Bot Api:多级测验

时间:2016-10-09 21:34:15

标签: telegram telegram-bot

我想开发一个带有多个选项的电报Bot,例如,首先我显示3个按钮:按钮1,按钮2,按钮3

当用户再次点击时,我再次显示其他三个按钮:按钮1,按钮2,按钮3

在第2步之后,我想显示他点击的用户第一个和第二个按钮,例如:

他首先点击按钮3,然后点击按钮1,所以,我想显示:

31

我怎么知道他先点击了哪个按钮?无论如何从bot获取聊天记录?或者我应该将他的点击保存在数据库中?或者你的解决方案是什么?

*我正在使用c#和telegram.bot,但只是给我一个解决方案,语言并不重要。

3 个答案:

答案 0 :(得分:1)

您应该保存在数据库中单击的chat_id和按钮。机器人的聊天记录很短暂,可能不太适合您的目的。

答案 1 :(得分:1)

首先,您可以使用内联键盘为您提供data的用户更新。这意味着您可以获得任何问题的ID,当用户点击时,您会收到问题ID。

  1. 将带问题键的InlineKeyboardMarkup用作数据。
  2. 我建议您将问题树保存到数据库并保存每个用户的当前状态。
  3. 然后当用户点击按钮时;你得到问题的关键并在树中找到它并询问下一个问题或找到它来自哪里(以前的问题)。

    如果您想运行与每个问题相关的任何方法,您只需将每个问题方法名称存储在树中,并在用户到达时使用Reflection触发该方法。

答案 2 :(得分:1)

您可以使用内联按钮。 JavaScript解决方案:

var options = {
  reply_markup: JSON.stringify({
    inline_keyboard: [
      [
        {text: 'button 1', callback_data: '1'},
        {text: 'button 2', callback_data: '2'},
        {text: 'button 3', callback_data: '3'},
      ],
    ]
  })
};

bot.sendMessage(chatId, 'Pick action:', options);

请参阅,您可以传递任何回调数据。所以我会在这个callback_data属性中保存当前路径。格式不重要,可以是数组,字符串等等。但它代表了堆栈。

例如,路径a2.a1.a3表示您单击按钮编号2,然后单击编号1,然后编号编号3.数据结构可以与此类似:

{
  q: 'Which path you wanna go?',
  a1: { ... },
  a2: {
    value: 'right',
    q: 'You're going right. You see the wall, what will you do?',
    a1: {
       a1: { ... },
       a2: { ... }
       a3: {
         value: 'go back',
         q: 'You\'re going back and you see the tiger, what will you do?',
         a1: { ... },
         a2: { ... }
       }
    },
    a2: { ... },
    a3: { ... }
  },
  a3: { ... }
}

它也很容易打包。只需从堆栈中弹出一个值即可进入上一个菜单。