mirror of
https://github.com/PluralKit/PluralKit.git
synced 2026-02-07 14:27:54 +00:00
feat: add last message cache to gateway
This commit is contained in:
parent
15c992c572
commit
a8664665a6
10 changed files with 172 additions and 18 deletions
|
|
@ -1,6 +1,7 @@
|
|||
#nullable enable
|
||||
using System.Collections.Concurrent;
|
||||
|
||||
using Myriad.Cache;
|
||||
using Myriad.Types;
|
||||
|
||||
namespace PluralKit.Bot;
|
||||
|
|
@ -9,9 +10,18 @@ public class LastMessageCacheService
|
|||
{
|
||||
private readonly IDictionary<ulong, CacheEntry> _cache = new ConcurrentDictionary<ulong, CacheEntry>();
|
||||
|
||||
private readonly IDiscordCache _maybeHttp;
|
||||
|
||||
public LastMessageCacheService(IDiscordCache cache)
|
||||
{
|
||||
_maybeHttp = cache;
|
||||
}
|
||||
|
||||
public void AddMessage(Message msg)
|
||||
{
|
||||
var previous = GetLastMessage(msg.ChannelId);
|
||||
if (_maybeHttp is HttpDiscordCache) return;
|
||||
|
||||
var previous = _GetLastMessage(msg.ChannelId);
|
||||
var current = ToCachedMessage(msg);
|
||||
_cache[msg.ChannelId] = new CacheEntry(current, previous?.Current);
|
||||
}
|
||||
|
|
@ -19,12 +29,26 @@ public class LastMessageCacheService
|
|||
private CachedMessage ToCachedMessage(Message msg) =>
|
||||
new(msg.Id, msg.ReferencedMessage.Value?.Id, msg.Author.Username);
|
||||
|
||||
public CacheEntry? GetLastMessage(ulong channel) =>
|
||||
_cache.TryGetValue(channel, out var message) ? message : null;
|
||||
public async Task<CacheEntry?> GetLastMessage(ulong guild, ulong channel)
|
||||
{
|
||||
if (_maybeHttp is HttpDiscordCache)
|
||||
return await (_maybeHttp as HttpDiscordCache).GetLastMessage<CacheEntry>(guild, channel);
|
||||
|
||||
return _cache.TryGetValue(channel, out var message) ? message : null;
|
||||
}
|
||||
|
||||
public CacheEntry? _GetLastMessage(ulong channel)
|
||||
{
|
||||
if (_maybeHttp is HttpDiscordCache) return null;
|
||||
|
||||
return _cache.TryGetValue(channel, out var message) ? message : null;
|
||||
}
|
||||
|
||||
public void HandleMessageDeletion(ulong channel, ulong message)
|
||||
{
|
||||
var storedMessage = GetLastMessage(channel);
|
||||
if (_maybeHttp is HttpDiscordCache) return;
|
||||
|
||||
var storedMessage = _GetLastMessage(channel);
|
||||
if (storedMessage == null)
|
||||
return;
|
||||
|
||||
|
|
@ -39,7 +63,9 @@ public class LastMessageCacheService
|
|||
|
||||
public void HandleMessageDeletion(ulong channel, List<ulong> messages)
|
||||
{
|
||||
var storedMessage = GetLastMessage(channel);
|
||||
if (_maybeHttp is HttpDiscordCache) return;
|
||||
|
||||
var storedMessage = _GetLastMessage(channel);
|
||||
if (storedMessage == null)
|
||||
return;
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue