ReplyKeyboardMarkup
avec quelques boutons (par exemple["Yes", "No"]
)Yes"
) Je souhaite afficher un message avec le clavier intégré et masquer les boutons envoyés à l'étape 1.Est-il possible de faire? Le message n'a qu'un seul reply_markup
et peut être InlinkeKeyboardMarkup
ou ReplyKeyboardHide
. La seule façon de le faire est d'envoyer 2 messages (le premier pour masquer le clavier et le second avec le clavier intégré), mais ce ne serait pas la meilleure solution du point de vue de l'expérience utilisateur. Je suis d'accord pour faire quelques demandes mais je veux qu'un seul message soit visible pour l'utilisateur.
Des pensées?
C'est impossible en ce moment. L'API Telegram Bot ne permet actuellement d'envoyer qu'un seul type de clavier: en ligne ou simple (y compris KeyboardHide et autres).
Je suppose que vous voulez que le bouton disparaisse une fois qu'il est enfoncé:
ReplyKeyboardMarkup MyButton = new ReplyKeyboardMarkup();
MyButton.OneTimeKeyboard = true;
Vous pouvez même le rendre plus réactif en ajoutant ceci:
MyButton.ResizeKeyboard = true;
Mais vous pouvez envoyer deux messages, le premier enverrait ReplyKeyboardHide/ReplyKeyboardRemove et le second enverrait le clavier en ligne
Il n'y a pas de solution logique. mais il y a un truc. vous pouvez envoyer un message pour supprimer le clavier précédent, puis supprimer ce message, enfin envoyer le message suivant avec son clavier.
// 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));
Définissez simplement la propriété OneTimeKeyboard sur true,
Button.OneTimeKeyboard = true;
Une fois le bouton utilisé, il ne s'affiche plus jamais
il vaut mieux utiliser le clavier intégré pour oui/non et le clavier précédent que vous souhaitez afficher après avoir appuyé sur oui ou non. de cette façon, vous pouvez modifier le message de clavier intégré oui/non et afficher un nouveau clavier.
vous pouvez envoyer le inlineKeyboard et en vérifiant son paramètre callBackQuery.Data, vous pouvez à nouveau modifier le message envoyé et afficher votre nouveau message à la place.
ci-dessous est un exemple de message de mise à jour 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"
}}
ainsi, lorsque l'utilisateur clique sur oui ou non, vous recevrez un message de mise à jour. sur la base du message de mise à jour ci-dessus, le chatid et le messageid sont connus, donc en utilisant la bibliothèque c # Telegram.Bot, le code d'édition est comme:
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);