代码之家  ›  专栏  ›  技术社区  ›  aorfevre

电报机器人-删除键盘-节点

  •  2
  • aorfevre  · 技术社区  · 7 年前

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

    就是这样。 我在nodejs中为电报开发了一个机器人。

    此bot以前有一个自定义键盘,它不是“inline\u键盘” 我决定改变这种行为,并实现了inline\u键盘。

    当前代码如下:

      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\u键盘工作正常,但我的旧代码(已被删除)仍在我的用户面前出现,非常令人担忧。

    就在这里;当我的用户登录到我的聊天室时,它会不断出现。 anoying keyboard

    我曾担任过以下资源:

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

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

    1 回复  |  直到 7 年前
        1
  •  3
  •   tashakori    7 年前

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

    您可以使用每个用户的第一个答案删除键盘,首先使用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\u模块对此代码进行一些修改。