[C#] Telegram.Bot v19 - ReplyKeyboardMarkup, InlineKeyboardMarkup 的範例應用

2023-05-10

上一篇文章  Telegram.Bot v19  回應訊息,回覆訊息的處理,我們寫最簡單的回應訊息,還有回覆訊息的方法

這一篇主要是使用另一個比較常用到的功能是關於實作  ReplyMarkup 的部份



1. 你得先跟 BotFather 建立一個機器人,並且跟拿到 TOKEN ,可以參考這裡 https://sendpulse.com/knowledge-base/chatbot/telegram/create-telegram-chatbot

我就不贅述了,我之所以不得不升級就上去就是因為你建新的機器人,拿到的 token ,在 Telegram.Bot SDK  v15 版本裡面會被報錯誤,非正確格式的 token

2. Nuget Library : https://www.nuget.org/packages/Telegram.Bot 目前版本為 19.0.0



3. Init TelegramBotClient:

public static void InitTelegramBotClient() { _TelegramBotClient = new TelegramBotClient("1234567:4TT8bAc8GHUspu3ERYn-KGcvsvGB9u_n4ddy"); _TelegramBotClient.StartReceiving( updateHandler: HandleUpdateAsync, pollingErrorHandler: (botClient, exception, cancellationToken) => { return Task.CompletedTask; }, default); }


4. 使用 ReplyKeyboardMarkup ,這是會出現在下方,直接讓用戶可以直接選擇,目的在於導引用戶可以使用哪些關鍵字


static async Task HandleUpdateKeyboardMarkupAsync(ITelegramBotClient botClient, Update update, CancellationToken cancellationToken) { if (update.Message == null) return; Console.WriteLine("收到訊息:" + update.Message.Text); if (update.Message.Text == "功能A") { await botClient.SendTextMessageAsync( chatId: update.Message.Chat.Id, text: "您選中了功能A", cancellationToken: cancellationToken); return; } if (update.Message.Text == "功能B") { await botClient.SendTextMessageAsync( chatId: update.Message.Chat.Id, text: "您選中了功能B", cancellationToken: cancellationToken); return; } ReplyKeyboardMarkup replyKeyboardMarkup = new(new[] { new KeyboardButton[] { "功能A", "功能B" }, }) { ResizeKeyboard = true }; var sentMessage = await botClient.SendTextMessageAsync( //該用戶或是群組的 Id chatId: update.Message.Chat.Id, text: update.Message.From.FirstName + " 您好,請選擇你要使用的功能", replyMarkup: replyKeyboardMarkup, cancellationToken: cancellationToken); Console.WriteLine(update.Message.Chat.Id + ":" + sentMessage.Text); }



5. 使用 InlineKeyboardButton,這主要是針對一個問題,對那個答案的回答,你可以透過 value 的方式去知道對方的選擇

static async Task HandleUpdateInlinebuttonsAsync(ITelegramBotClient botClient, Update update, CancellationToken cancellationToken) { if (update.Message != null) { Console.WriteLine("收到訊息:" + update.Message.Text); InlineKeyboardMarkup inlineKeyboard = new(new[] { // first row new [] { InlineKeyboardButton.WithCallbackData(text: "同意", callbackData: "agree:VoteA"), InlineKeyboardButton.WithCallbackData(text: "不同意", callbackData: "deny:VoteA"), } }); var sentMessage = await botClient.SendTextMessageAsync( //該用戶或是群組的 Id chatId: update.Message.Chat.Id, text: "您是否同意這個決定?!", null, null, null, null, null, null, null, replyMarkup: inlineKeyboard, cancellationToken: cancellationToken); Console.WriteLine(update.Message.Chat.Id + ":" + sentMessage.Text); } if (update.CallbackQuery != null) { Console.WriteLine("收到回應:" + update.CallbackQuery.Data); var sentMessage = await botClient.SendTextMessageAsync( //該用戶或是群組的 Id chatId: update.CallbackQuery.From.Id, text: "收回應訊息 :" + update.CallbackQuery.Data, cancellationToken: cancellationToken); Console.WriteLine(update.CallbackQuery.From.Id + ":" + update.CallbackQuery.Data); } }




大概就紀錄到這裡,基本上有這兩個應用在一般商用實務上就很夠用了,其他有些花里胡哨,下一篇我在繼續分享。



當麻許的碎念筆記 2014 | Donma Hsu Design.