2016-06-16 45 views
7
  • 步骤1:发送用户的消息与ReplyKeyboardMarkup与几个按钮(例如["Yes", "No"]
  • 步骤2:如果用户点击(例如“Yes")的按钮中的一个我想显示的消息与内嵌键盘和隐藏在步骤1

发送按钮是否有可能呢?该消息刚一reply_markup财产,可以是InlinkeKeyboardMarkupReplyKeyboardHide。这样做,我看到的是唯一的办法发送2条消息(首先隐藏键盘,第二条隐藏键盘),但从用户体验的角度来看,这不是最好的解决方案。我可以做几个请求,但只想让用户看到1条消息。Telegram bot:如何使用内联键盘发送消息并同时隐藏自定义键盘?

有什么想法?

回答

7

现在不可能了。 Telegram Bot API目前只允许发送一种类型的键盘:内联或简单(包括KeyboardHide和其他)。

3

但你可以发送两个消息,第一个将发送ReplyKeyboardHide/ReplyKeyboardRemove和第二就送内嵌键盘

1

您更好地使用inlinekeyboard您要显示后两者是/否和前面的键盘按是或否。这样,您可以编辑是/否内嵌键盘消息并显示新键盘。

您可以发送inlineKeyboard,并通过检查它的callBackQuery.Data参数来重新编辑发送的消息并改为显示新消息。

下面

是一个示例更新消息JSON:

{"update_id":14603298, 
    "callback_query": 
    { 
    "id": "479899181065761766", 
    "from": { 
     "id": 111735238, 
     "first_name": "eric", 
     "username": "...." 
    }, 
    "message": { 
     "message_id": 22, 
     "from": { 
     "id": 3576731383, 
     "first_name": "the_bot_name", 
     "username": "mybot_bot" 
     }, 
     "chat": { 
     "id": 111745258, 
     "first_name": "eric", 
     "username": "....", 
     "type": "private" 
     }, 
     "date": 1492113810, 
     "text": "sent message" 
    }, 
    "chat_instance": "5419183837652256438", 
    "data": "yes" 
    }} 

所以,当用户点击yes或no,你会得到一个更新消息。基于以上的更新消息,chatid和邮件ID是已知的,因此使用C#Telegram.Bot库中编辑代码如下:

var chatid= 111745258; 
    var messageid=22;   
    TelegramBotClient api = new TelegramBotClient("YOUR_TOKEN"); 

var new_keyboard = new InlineKeyboardMarkup(
       new[] 
        { 
         new[] 
         { 
          new InlineKeyboardButton("step_1","step1") , 
          }, 
         new[] 
          { 
          new InlineKeyboardButton("step_2","step2"), 
          new InlineKeyboardButton("step_3","step3"), 
          }, 
         new[] 
          { 
          new InlineKeyboardButton("step_4","step4"), 
          } 
        }); 
    api.EditMessageReplyMarkupAsync(chatid, messageid, replyMarkup: new_keyboard); 
4

我猜你想要的按钮应该消失,一旦它压:

ReplyKeyboardMarkup MyButton = new ReplyKeyboardMarkup(); 
MyButton.OneTimeKeyboard = true; 

你甚至可以使其更适应加入这样的:

MyButton.ResizeKeyboard = true; 
3

没有任何合理的解决方案。但有一个窍门。您可以发送消息来删除以前的键盘,然后删除此消息,最后使用键盘发送下一条消息。

// send a fake message 
Message sentMsg = bot.SendTextMessageAsync(chatID, ".", replyKeyboardMarkup: new ReplyKeyboardRemove()).Result; 

// remove the fake message 
bot.DeleteMessageAsync(chatID, sentMsg.MessageId); 

// send the main message with it's keyboard 
bot.SendTextMessageAsync(chatID, "the next message", replyKeyboardMarkup: new ReplyKeyboardMarkup(keyboardData)); 
3

只需设置OneTimeKeyboard属性为true,

Button.OneTimeKeyboard = true; 

一旦按钮用于它不会再显示