Работа с кэшем
PRTelegramBot предоставляет базовый функционал работы с кэшем.
В библиотеке присутствует интерфейс ITelegramCache. Для работы к кэшем требуется реализовать данный интерфейс. В нашем примере создадим класс UserCache который его реализует и будет записывать временную информацию для каждого пользователя используя его Update.
Для примера создадим свой класс кэша
public class UserCache : ITelegramCache
{
/// <summary>
/// Идентификатор
/// </summary>
public long Id { get; set; }
/// <summary>
/// Временные данные
/// </summary>
public string Data { get; set; }
public bool ClearData()
{
Id = 0;
Data = "";
return true;
}
}
Библиотека предоставляет следующие методы расширения для работы с кэшем.
/// <summary>
/// Создает кэш для пользователя
/// </summary>
/// <param name="update">Обновление данных telegram</param>
public static void CreateCacheData<T>(this Update update) where T : ITelegramCache
/// <summary>
/// Получает кэш пользователя
/// </summary>
/// <param name="update">Обновление данных telegram</param>
/// <returns>Кеш пользователя</returns>
public static T GetCacheData<T>(this Update update) where T : ITelegramCache
/// <summary>
/// Очищает кэш пользователя
/// </summary>
/// <param name="update">Обновление данных telegram</param>
public static void ClearCacheData(this Update update)
/// <summary>
/// Проверяет существуют ли кэш данные пользователя
/// </summary>
/// <param name="update">Обновление данных telegram</param>
/// <returns>true/false</returns>
public static bool HasCacheData(this Update update)
/// <summary>
/// Полностью удаляет кэш пользователя из словаря.
/// </summary>
/// <param name="update">Обновление данных telegram.</param>
public static void RemoveCacheData(this Update update)
Пример
/// <summary>
/// Напишите в боте "cache"
/// Функция записывает данные в кэш
/// </summary>
[ReplyMenuHandler("cache")]
public static async Task GetCache(ITelegramBotClient botClient, Update update)
{
string msg = $"Запись в кэш пользователя данных: {update.GetChatId()}";
//Записываем данные в кеш пользователя
update.GetCacheData<UserCache>().Id = update.GetChatId();
await PRTelegramBot.Helpers.Message.Send(botClient, update, msg);
}
/// <summary>
/// Напишите в боте "resultcache"
/// Функция получает данные из кэша
/// </summary>
[ReplyMenuHandler("resultcache")]
public static async Task CheckCache(ITelegramBotClient botClient, Update update)
{
//Получаем данные с кэша
var cache = update.GetCacheData<UserCache>();
string msg = "";
if(cache.Id != null)
{
msg = $"Данные в кэше пользователя: {cache.Id}";
}
else
{
msg = $"Данные в кэше пользователя отсутствуют.";
}
await PRTelegramBot.Helpers.Message.Send(botClient, update, msg);
}
/// <summary>
/// Напишите в боте "clearcache"
/// Функция очищает данные в кэше пользователя
/// </summary>
[ReplyMenuHandler("clearcache")]
public static async Task ClearCache(ITelegramBotClient botClient, Update update)
{
string msg = "Тестирование функции пошагового выполнения";
//Очищаем кеш для пользователя
update.GetCacheData<UserCache>().ClearData();
await PRTelegramBot.Helpers.Message.Send(botClient, update, msg);
}
Last updated