using Catalogger.Backend.Cache; using Remora.Discord.API.Abstractions.Gateway.Events; using Remora.Discord.Gateway.Responders; using Remora.Results; namespace Catalogger.Backend.Bot.Responders.MemberUpdate; public class GuildMemberUpdateResponder(ILogger logger, IMemberCache memberCache) : IResponder { private readonly ILogger _logger = logger.ForContext(); public async Task RespondAsync( IGuildMemberUpdate newMember, CancellationToken ct = default ) { try { var oldMember = await memberCache.TryGetAsync(newMember.GuildID, newMember.User.ID); if (oldMember == null) { _logger.Information( "Received member update event for {MemberId} in {GuildId} but they weren't cached, ignoring", newMember.User.ID, newMember.GuildID ); return Result.Success; } } finally { await memberCache.UpdateAsync(newMember); } return Result.Success; } }