【问题标题】:Telegram bot - Remove keyboard - Nodejs电报机器人 - 删除键盘 - Nodejs
【发布时间】:2018-09-25 07:33:41
【问题描述】:

我面临一个可能与缓存有关的非常奇怪的问题。

原来如此。 我在 nodejs 中为电报开发了一个机器人。

这个机器人过去有一个不是“inline_keyboard”的自定义键盘 我决定改变这种行为并实现了 inline_keyboard。

当前代码是这样的:

  var options = {
    parse_mode: "Markdown",
    disable_web_page_preview: true,
    reply_markup: JSON.stringify({
      inline_keyboard: [
        [{
          text: '???????? English',
          callback_data: "SET ENGLISH"
        },{
          text: '???????? Français',
          callback_data: "SET FRENCH"
        }]
      ]
    })
  };

  bot.sendMessage(msg.chat.id, "Please choose your language",options);

Inline_keyboard 工作正常,但我的旧代码(已被删除)仍然出现在我的用户面前,而且非常烦人。

在这里;当我的用户登录我的聊天时,它会继续出现。

我一直是以下资源:

但我不知道如何实现它,所以我可以为我的用户删除这个烦人的聊天。

有什么建议吗? 感谢您的支持

【问题讨论】:

    标签: node.js telegram telegram-bot


    【解决方案1】:

    我的建议可能有不同的解决方案:

    您可以使用每个用户的第一个答案删除键盘,首先使用 editMessageText 删除键盘,然后向他发送适当的答案。(请注意,您已删除他们的键盘的持久聊天 ID,因此您将为每个用户执行此操作用户一次)

    bot.on('callback_query', function onCallbackQuery(callbackQuery) {
        if(!didWeRemoveHisKeyboard(callbackQuery.from.id))
            removeHisKeyboard(callbackQuery)
        //then handle the user response
    })
    
    removeHisKeyboard = function(callbackQuery){
        bot.editMessageText(callbackQuery.message.text,
        {message_id:callbackQuery.message.message_id , chat_id:callbackQuery.from.id,
        reply_markup: {
            remove_keyboard: true
        }}).catch((err) => {
            //some error handling
        }).then(function(res){
             if(res)
                 addThisChatToHandledList(callbackQuery.from.id)
        })
    
    }
    

    请注意,您可能需要根据您使用的 node_module 对此代码进行一些修改。

    【讨论】:

    • 感谢您的回复。如果对我有帮助,我会对其进行测试并投票!
    • 对我来说,这个答案中真正重要的一点是remove_keyboard: true 行。没有它,键盘会持续显示每条消息。
    猜你喜欢
    • 2018-03-23
    • 2016-03-22
    • 2020-10-08
    • 1970-01-01
    • 2017-08-01
    • 2022-10-05
    • 2022-11-02
    • 2016-10-22
    • 2017-12-10
    相关资源
    最近更新 更多