Динамические reply команды из json файла
Библиотека предоставляет возможность работать с динамическими reply командами. Это значит, что значения можно сохранить в json файле, и потом изменять название кнопок без перекомпиляции приложения.
Для работы с динамическими командами используется атрибут ReplyMenuDynamicHandlerAttribute
/// <summary>
/// Конструктор.
/// </summary>
/// <param name="botId">Идентификатор бота.</param>
/// <param name="botIds">Идентификаторы ботов.</param>
/// <param name="commandComparison">Как сравнивать команду.</param>
/// <param name="stringComparison">Как сравнивать строку.</param>
/// <param name="commands">Команды.</param>
public ReplyMenuDynamicHandlerAttribute(params string[] commands)
public ReplyMenuDynamicHandlerAttribute(long botId, params string[] commands)
public ReplyMenuDynamicHandlerAttribute(long[] botIds, params string[] commands)
public ReplyMenuDynamicHandlerAttribute(CommandComparison commandComparison, params string[] commands)
public ReplyMenuDynamicHandlerAttribute(long botId, CommandComparison commandComparison, params string[] commands)
public ReplyMenuDynamicHandlerAttribute(long[] botIds, CommandComparison commandComparison, params string[] commands)
public ReplyMenuDynamicHandlerAttribute(StringComparison stringComparison, params string[] commands)
public ReplyMenuDynamicHandlerAttribute(long botId, StringComparison stringComparison, params string[] commands)
public ReplyMenuDynamicHandlerAttribute(long[] botIds, StringComparison stringComparison, params string[] commands)
public ReplyMenuDynamicHandlerAttribute(CommandComparison commandComparison, StringComparison stringComparison, params string[] commands)
public ReplyMenuDynamicHandlerAttribute(long botId, CommandComparison commandComparison, StringComparison stringComparison, params string[] commands)
public ReplyMenuDynamicHandlerAttribute(long[] botIds, CommandComparison commandComparison, StringComparison stringComparison, params string[] commands)
Пример: Создадим json файл commands.json. Формат файла key:value. В нем будут находится команды.
{
"DYNAMIC_COMMANT_EXAMPLE": "Динамическая команда",
"MAIN_MENU": "Главное меню",
"MENU": "Меню",
"RP_START": "Start"
}
Создание бота с загрузкой динамических команд.
// json провайдер для динамических команд
var botJsonProvider = new BotConfigJsonProvider(".\\Configs\\commands.json");
// Получаем команды в формате ключ:значение.
var dynamicCommands = botJsonProvider.GetKeysAndValues();
// В билдере при создание бота используем AddReplyDynamicCommands и передаем туда динамические команды
var telegram = new PRBotBuilder("Token")
.SetBotId(0)
.AddAdmin(1111111)
.SetClearUpdatesOnStart(true)
.AddReplyDynamicCommands(dynamicCommands)
.Build();
Создаем метод обработки динамической команды:
/// <summary>
/// Команда отработает для бота с botId 0.
/// Команда отработает при написание в чат значения по ключу "DYNAMIC_COMMANT_EXAMPLE" из файла commands.json.
/// Настройка конфигурационных файла при создание экземпляра PRBot <see cref="Program"/>
/// "DYNAMIC_COMMANT_EXAMPLE": "Динамическая команда"
/// </summary>
[ReplyMenuDynamicHandler(nameof(ExampleConstants.DYNAMIC_COMMANT_EXAMPLE))]
public static async Task ExampleReplyDynamicCommand(ITelegramBotClient botClient, Update update)
{
/*
* Создание провайдера работы с json файлом commands.json
* var botJsonProvider = new BotConfigJsonProvider(".\\Configs\\commands.json");
*
* Выгрузка всех команд в формате ключ:значение
* var dynamicCommands = botJsonProvider.GetKeysAndValues();
*
* var telegram = new PRBotBuilder("")
* .AddReplyDynamicCommands(dynamicCommands)
* .Build();
*
* .AddReplyDynamicCommands(dynamicCommands) - добавляет в список все динамические команды.
*
* [ReplyMenuDynamicHandler(nameof(ExampleConstants.DYNAMIC_COMMANT_EXAMPLE))] - работа динамической команды по ключу DYNAMIC_COMMANT_EXAMPLE
*/
string msg = nameof(ExampleReplyDynamicCommand);
await Helpers.Message.Send(botClient, update, msg);
}
Пишем в боте сообщение "Динамическая команда" и получаем результат выполнения.

Теперь можно без всякой компиляции, просто отредактировать файл commands.json, поменять название команды и она будет выполнена.
{
"DYNAMIC_COMMANT_EXAMPLE": "Тес команда",
"MAIN_MENU": "Главное меню",
"MENU": "Меню",
"RP_START": "Start"
}

Last updated