【问题标题】:Telegram Bot Api : multi level QuizTelegram Bot Api:多级测验
【发布时间】:2016-10-11 03:56:03
【问题描述】:

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

当用户再次点击每个按钮时,我会显示另外三个按钮:按钮 1、按钮 2、按钮 3

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

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

31

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

*我用的是c#和telegram.bot,不过只是给我一个解决方案,语言不重要。

【问题讨论】:

    标签: telegram telegram-bot


    【解决方案1】:

    首先,您可以使用内联键盘,通过data 为您提供用户更新。这意味着您可以获得任何问题的 Id,并且当用户单击时,您会获得问题 Id。

    1. 使用 InlineKeyboardMarkup 和问题键作为数据。
    2. 我建议您将问题树保存到数据库并保存每个用户的当前状态。

    然后当用户点击一个按钮时;您得到问题键并在树中找到它并提出下一个问题或找到它的来源(上一个问题)。

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

    【讨论】:

      【解决方案2】:

      您应该将 chat_id 和单击的按钮保存在数据库中。机器人的聊天历史是短暂的,对于您的目的可能不可靠。

      【讨论】:

        【解决方案3】:

        您可以使用内联按钮。 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: { ... }
        }
        

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

        【讨论】:

          猜你喜欢
          • 2018-04-07
          • 2021-11-26
          • 2017-02-17
          • 1970-01-01
          • 1970-01-01
          • 2019-02-17
          • 2019-08-07
          • 2022-10-06
          • 1970-01-01
          相关资源
          最近更新 更多