繼續 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 + " 您好,請選擇你要使用的功能",
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
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
Result:
