Добавление и удаление команд в динамическом режиме

Начиная с версии 0.5.0 появилась возможность добавлять динамически команды обработчики для типа reply, slash и inline

Создание новых команд

Пример создания нового метода обработки в коде

var method = async (ITelegramBotClient botClient, Update update) =>
{
        string message = "Сообщение";
        PRTelegramBot.Helpers.Message.Send(botClient, update, message);
};

После создания метода нужно обратиться к экземпляру класса бота и добавить только что созданный метод с названием команды которая будет задействована.

Внимание: название команд должно быть уникальным!

Пример для Reply обработчика

bot.Register.AddReplyCommand("Название команды", method);

Пример для Slash обработчика

bot.Register.AddSlashCommand("/Название команды", method);

Пример для Inline обработчика

bot.Register.AddInlineCommand(Enum.value, method);

Важно чтобы Enum был типа int, и чтобы значение были уникальны. Рекомендуется использовать значение команд не ниже 100, потому что начиная с 0 уже есть зарегистрированные команды.

/// <summary>
/// Идентификаторы для callback команд
/// </summary>
[InlineCommand]
public enum THeader
{
    [Description(nameof(None))]
    None = 0,
    [Description(nameof(PickMonth))]
    PickMonth = 1,
    [Description(nameof(PickYear))]
    PickYear = 2,
    [Description(nameof(ChangeTo))]
    ChangeTo = 3,
    [Description(nameof(YearMonthPicker))]
    YearMonthPicker = 4,
    [Description(nameof(PickDate))]
    PickDate = 5,
    [Description(nameof(NextPage))]
    NextPage = 6,
    [Description(nameof(CurrentPage))]
    CurrentPage = 7 ,
    [Description(nameof(PreviousPage))]
    PreviousPage = 8,
}

Пример с уникальными значениями. Здесь видно что используются 2 разных перечисления, но int значения не пересекаются.

В первом enum значение

  • 500

  • 501

  • 502

  • 503

  • 504

  • и т.д.

Во втором enum

  • 600

  • 601

  • 602

  • 603

  • и т.д.

    public enum CustomTHeader
    {
        [Description("Бесплатный ВИП")]
        GetFreeVIP = 500,
        [Description("Вип на 1 день")]
        GetVipOneDay,
        [Description("Вип на 1 неделю")]
        GetVipOneWeek,
        [Description("Вип на 1 месяц")]
        GetVipOneMonth,
        [Description("Вип навсегда")]
        GetVipOneForever
    }

    public enum CustomTHeaderTwo
    {
        [Description("Пример 1")]
        ExampleOne = 600,
        [Description("Пример 2")]
        ExampleTwo,
        [Description("Пример 3")]
        ExampleThree,
        [Description("Пример страниц")]
        CustomPageHeader,
        [Description("Пример страниц2")]
        CustomPageHeader2,
    }

Плохой пример

В данном примере видно, что enum значения будут пересекаться, где-то несколько раз 500, где-то 501. Чтобы система команд работала стабильно и правильно все значения должны быть уникальны!

    public enum CustomTHeader
    {
        [Description("Бесплатный ВИП")]
        GetFreeVIP = 500,
        [Description("Вип на 1 день")]
        GetVipOneDay,
        [Description("Вип на 1 неделю")]
        GetVipOneWeek,
        [Description("Вип на 1 месяц")]
        GetVipOneMonth,
        [Description("Вип навсегда")]
        GetVipOneForever
    }

    public enum CustomTHeaderTwo
    {
        [Description("Пример 1")]
        ExampleOne = 500,
        [Description("Пример 2")]
        ExampleTwo,
        [Description("Пример 3")]
        ExampleThree,
        [Description("Пример страниц")]
        CustomPageHeader,
        [Description("Пример страниц2")]
    }

    public enum CustomTHeaderThree
    {
        [Description("Пример страниц")]
        CustomPageHeader = 501,
        [Description("Пример страниц2")]
        CustomPageHeader2,
    }

Все методы возвращают true или false True - команда добавлена False - ошибка при добавление команды

Удаление команд

Пример для Reply

bot.Register.RemoveReplyCommand("Название команды");

Пример для Slash

bot.Register.RemoveSlashCommand("Название команды");

Пример для Inline

bot.Register.RemoveInlineCommand(Enum.value);

Данные методы возвращают true или false True - команда удалена False - ошибка при удаление команды

Last updated