Работа с кэшем

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