refactor: move guildMember caching to IDiscordCache

This commit is contained in:
spiral
2021-11-21 12:06:08 -05:00
parent 99b81085ed
commit 24ac0725af
4 changed files with 32 additions and 16 deletions

View File

@@ -29,7 +29,6 @@ namespace PluralKit.Bot
{
public class Bot
{
private readonly ConcurrentDictionary<ulong, GuildMemberPartial> _guildMembers = new();
private readonly Cluster _cluster;
private readonly DiscordApiClient _rest;
@@ -84,7 +83,7 @@ namespace PluralKit.Bot
if (channel.GuildId != null)
{
var member = _guildMembers.GetValueOrDefault(channel.GuildId.Value);
var member = await _cache.TryGetSelfMember(channel.GuildId.Value);
return await _cache.PermissionsFor(channelId, _cluster.User?.Id ?? default, member);
}
@@ -93,10 +92,9 @@ namespace PluralKit.Bot
private async Task OnEventReceived(Shard shard, IGatewayEvent evt)
{
await _cache.TryUpdateSelfMember(shard, evt);
await _cache.HandleGatewayEvent(evt);
TryUpdateSelfMember(shard, evt);
// HandleEvent takes a type parameter, automatically inferred by the event type
// It will then look up an IEventHandler<TypeOfEvent> in the DI container and call that object's handler method
// For registering new ones, see Modules.cs
@@ -120,18 +118,6 @@ namespace PluralKit.Bot
await HandleResumed(shard);
}
private void TryUpdateSelfMember(Shard shard, IGatewayEvent evt)
{
if (evt is GuildCreateEvent gc)
_guildMembers[gc.Id] = gc.Members.FirstOrDefault(m => m.User.Id == shard.User?.Id);
if (evt is MessageCreateEvent mc && mc.Member != null && mc.Author.Id == shard.User?.Id)
_guildMembers[mc.GuildId!.Value] = mc.Member;
if (evt is GuildMemberAddEvent gma && gma.User.Id == shard.User?.Id)
_guildMembers[gma.GuildId] = gma;
if (evt is GuildMemberUpdateEvent gmu && gmu.User.Id == shard.User?.Id)
_guildMembers[gmu.GuildId] = gmu;
}
private Task HandleResumed(Shard shard)
{
return UpdateBotStatus(shard);