diff --git a/src/Discord.Net.Core/Utils/Cache.cs b/src/Discord.Net.Core/Utils/Cache.cs new file mode 100644 index 000000000..f61c41793 --- /dev/null +++ b/src/Discord.Net.Core/Utils/Cache.cs @@ -0,0 +1,23 @@ +using System; +using System.Reflection; +using System.Threading.Tasks; +using TId = Discord.IEntity; + + +namespace Discord +{ + public abstract class Cache where T : IEntity + { + public bool IsCached => Value != null; + public TId Id { get; } + public T Value { get; } + + protected Cache(TId id) + { + Id = id; + } + + public async Task DownloadAsync() => typeof(T).GetRuntimeMethod("DownloadAsync",{ulong id}); + public async Task GetOrDownloadAsync() => IsCached ? Value : await DownloadAsync(); + } +} \ No newline at end of file