Создание Inline меню

Перед созданием меню требуется познакомиться со следующими элементами:

  • InlineCallback – Метод которые создает Inline кнопку с callback.

  • TCommand – Вспомогательный класс для отправки данных в callback.

InlineCallback принимает следующие параметры:

  • buttonName – название кнопки.

  • commandType – команда или тип команды. Принимает перечисление типа THeader, о котором написано ранее.

  • data – (не обязательный параметр) данные которые нужно передать в callback.

TCommand является базовым классом в котором хранятся данные которые нужно передать через callback. TCommand можно отнаследовать и создать свои переменные которые должны содержать свои данные.

ВНИМАНИЕ: Максимальный допустимый размер данных для обработки в callback 128 байт!

В PRTelegramBot есть уже несколько готовых TCommand классов:

  • CallendarTCommand – используется для передачи даты (DateTime)

  • EntityTCommand<T> – используется для передачи id или другой не большой информации.

Пример создания inline меню

public class Commands
{
    /// <summary>
    /// Напишите в чате "Тест"
    /// </summary>
    [ReplyMenuHandler("Тест")]
    public static async Task ExampleReply(ITelegramBotClient botClient, Update update)
    {
         /* Создание новой кнопки с callback данными
           * Название кнопки
           * Models.Enums.CustomTHeader.ExampleOne - Заголовок команды
           */
        var exampleItemOne = new InlineCallback("Пример 1", CustomTHeader.ExampleOne);
        /* Создание новой кнопки с callback данными
         * Название кнопки
         * Models.Enums.CustomTHeader.ExampleOne - Заголовок команды
         * new EntityTCommand(2) - Данные которые требуется передать
         */
        var exampleItemTwo = new InlineCallback<EntityTCommand<long>>("Пример 2", CustomTHeader.ExampleTwo, new EntityTCommand<long>(2));
        /* Создание новой кнопки с callback данными
         * Models.Enums.CustomTHeader.ExampleOne - Заголовок команды
         * new EntityTCommand(2) - Данные которые требуется передать
         */
        var exampleItemThree = new InlineCallback<EntityTCommand<long>>("Пример 3", CustomTHeader.ExampleThree, new EntityTCommand<long>(3));
        // Создает inline кнопку с ссылкой
        var url = new InlineURL("Google", "https://google.com");
        // Создаем кнопку для работы с webApp
        var webdata = new InlineWebApp("WA", "https://prethink.github.io/telegram/webapp.html");

        //IInlineContent - реализуют все inline кнопки
        List<IInlineContent> menu = new();

        menu.Add(exampleItemOne);
        menu.Add(exampleItemTwo);
        menu.Add(exampleItemThree);
        menu.Add(url);
        menu.Add(webdata);

        //Генерация меню на основе данных в 1 столбец
        var testMenu = MenuGenerator.InlineKeyboard(1, menu);

        //Создание настроек для передачи в сообщение
        var option = new OptionMessage();
        //Передача меню в настройки
        option.MenuInlineKeyboardMarkup = testMenu;
        string msg = "Пример работы меню";
        await PRTelegramBot.Helpers.Message.Send(botClient, update, msg, option);
    }
}

Last updated