[C#] 使用 Telegram.Bot v22.4.4 建立互動式選單,並清除舊訊息

2025-03-07

繼續 Telegram 系列,因為最近幫系統改成 Telegram.Bot v22.4 ,遇到一些問題,剛好也碰到一個需求,就是發出給客戶選項 ( InlineKeyboardMarkup )後

得到答案之後就是要將原本的問題刪除,今天就來筆記一下


1. 首先你得先安裝 Telegram.Bot v22.4

2.你得先去跟 bot father 申請一組機器人,可以參考這裡 https://sendpulse.com/knowledge-base/chatbot/telegram/create-telegram-chatbot

3. Init Telegram bot ,並且加入指令 /menu,並且其中我加入了 InlineKeyboardMarkup

static TelegramBotClient _TelegramBotClient; static CancellationTokenSource cts = new CancellationTokenSource(); public static void InitTelegramBotClient() { _TelegramBotClient = new TelegramBotClient("1234567890:AAD98dMandhVhEW4jDEu-LTm6fX9MYL9PKU4",httpClient:default,cts.Token); _TelegramBotClient.OnMessage += _TelegramBotClient_OnMessage; } private static Task _TelegramBotClient_OnMessage(Telegram.Bot.Types.Message message, Telegram.Bot.Types.Enums.UpdateType type) { if (message.Text is not { } text) { _TelegramBotClient.SendMessage(message.Chat.Id, "抱歉我們只支持指令", replyMarkup: new ReplyKeyboardRemove()); } //設定 /menu 當作指令 if (message.Text.ToLower().StartsWith("/menu")) { InlineKeyboardMarkup inlineKeyboard = new(new[] { new [] { InlineKeyboardButton.WithCallbackData(text: "同意", callbackData: "agree:VoteA"), InlineKeyboardButton.WithCallbackData(text: "不同意", callbackData: "deny:VoteA"), } }); _TelegramBotClient.SendMessage( //該用戶或是群組的 Id chatId: message.Chat.Id, text: message.From.FirstName + " 您好&#65292;請選擇你要使用的功能", replyMarkup: inlineKeyboard, cancellationToken: cts.Token); } else { Console.WriteLine($"純文字:" + message.Text); _TelegramBotClient.SendMessage(message.Chat, $"Echo: Your Text is {message.Text}", replyMarkup: new ReplyKeyboardRemove()); } return Task.FromResult<object>(null); }

4. OnUpdate Event

private static Task _TelegramBotClient_OnUpdate(Telegram.Bot.Types.Update update) { if (update.CallbackQuery != null) { Console.WriteLine(update.CallbackQuery.From.Id + ":" + update.CallbackQuery.Data); var sentMessage = _TelegramBotClient.SendMessage( //該用戶或是群組的 Id chatId: update.CallbackQuery.From.Id, text: "收回應訊息 :" + update.CallbackQuery.Data, cancellationToken: cts.Token); //刪除原本的問句 return _TelegramBotClient.DeleteMessage(update.CallbackQuery.Message.Chat.Id, update.CallbackQuery.Message.Id); } return Task.FromResult<object>(null); }


Result:



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