using System.Collections.Concurrent; using Remora.Discord.API.Abstractions.Objects; using Remora.Discord.API.Abstractions.Rest; using Remora.Rest.Core; namespace Catalogger.Backend.Cache.InMemoryCache; public class UserCache(IDiscordRestUserAPI userApi) { private readonly ConcurrentDictionary _cache = new(); public int Size => _cache.Count; public async Task GetUserAsync(Snowflake userId) { if (_cache.TryGetValue(userId, out var user)) return user; var res = await userApi.GetUserAsync(userId); if (!res.IsSuccess) return null; _cache[userId] = res.Entity; return res.Entity; } public void UpdateUser(IUser user) => _cache[user.ID] = user; }