InlineMenu В Телеграм

Как сделать похожее меню https://ru.stackoverflow.com/a/1076065/467311 только на С# с использованием Telegram.Bot и Telegram.Bot.Extensions.Polling?


Ответы (1 шт):

Автор решения: Георгий
using Telegram.Bot;
using Telegram.Bot.Exceptions;
using Telegram.Bot.Extensions.Polling;
using Telegram.Bot.Types;
using Telegram.Bot.Types.Enums;
using Telegram.Bot.Types.ReplyMarkups;

var botClient = new TelegramBotClient("TOKEN");

using var cts = new CancellationTokenSource();

var receiverOptions = new ReceiverOptions
{
    AllowedUpdates = { }
};
botClient.StartReceiving(
    HandleUpdateAsync,
    HandleErrorAsync,
    receiverOptions,
    cancellationToken: cts.Token);

var me = await botClient.GetMeAsync();

Console.WriteLine($"Start listening for @{me.Username}");
await Task.Delay(int.MaxValue);

cts.Cancel();

async Task HandleUpdateAsync(ITelegramBotClient botClient, Update update, CancellationToken cancellationToken)
{
    InlineKeyboardMarkup mainmenu = new(new[]
    {
        new []
        {
            InlineKeyboardButton.WithCallbackData(text: "ПО ТУДА", callbackData: "key_tuda"),
            InlineKeyboardButton.WithCallbackData(text: "ПО СЮДА", callbackData: "key_suda")
        } 
    });
    InlineKeyboardMarkup submenu_tuda = new(new[]
    {
       new []
       {
            InlineKeyboardButton.WithCallbackData(text: "ПО СЮДА", callbackData: "key_suda"),
            InlineKeyboardButton.WithCallbackData("НАЗАД", callbackData: "key_mainMenu") 
       } 
    });
    InlineKeyboardMarkup submenu_suda = new(new[] 
    {
      new[] 
      {
            InlineKeyboardButton.WithCallbackData(text: "ПО ТУДА", callbackData: "key_tuda"),
            InlineKeyboardButton.WithCallbackData("НАЗАД", callbackData: "key_mainMenu") 
      } 
    });
   
    if (update.Type == UpdateType.Message && update.Message!.Type == MessageType.Text)
    {
        var chatId = update.Message.Chat.Id;
        var messageText = update.Message.Text;
        string firstName = update.Message.From.FirstName;
        Console.WriteLine($"Received a '{messageText}' message in chat {chatId}.");

        if (messageText == "/start")
        {
            Message sentMessage = await botClient.SendTextMessageAsync(
            chatId: chatId,
            text: $"Привет {firstName}! \n\n Это главное меню.",
            replyMarkup: mainmenu,
            cancellationToken: cancellationToken);
        }
    }

    if (update.CallbackQuery != null)
    {
        if (update.CallbackQuery.Data == "key_tuda")
        {
            Message sentMessage = await botClient.EditMessageTextAsync(
            messageId: update.CallbackQuery.Message.MessageId,
            chatId: update.CallbackQuery.Message.Chat.Id,
            text: "Ты перешел по туда.",
            replyMarkup: submenu_tuda,
            cancellationToken: cancellationToken);
        }
        if (update.CallbackQuery.Data == "key_suda")
        {
            Message sentMessage = await botClient.EditMessageTextAsync(
            messageId: update.CallbackQuery.Message.MessageId,
            chatId: update.CallbackQuery.Message.Chat.Id,
            text: "Ты перешел по сюда.",
            replyMarkup: submenu_suda,
            cancellationToken: cancellationToken);
        }
        if (update.CallbackQuery.Data == "key_mainMenu")
        {
            Message sentMessage = await botClient.EditMessageTextAsync(
            messageId: update.CallbackQuery.Message.MessageId,
            chatId: update.CallbackQuery.Message.Chat.Id,
            text: "Это главное меню.",
            replyMarkup: mainmenu,
            cancellationToken: cancellationToken);
        }
    }
}

Task HandleErrorAsync(ITelegramBotClient botClient, Exception exception, CancellationToken cancellationToken)
{
    var ErrorMessage = exception switch
    {
        ApiRequestException apiRequestException
            => $"Telegram API Error:\n[{apiRequestException.ErrorCode}]\n{apiRequestException.Message}",
        _ => exception.ToString()
    };

    Console.WriteLine(ErrorMessage);
    return Task.CompletedTask;
}
→ Ссылка