39 lines
1.1 KiB
C#
39 lines
1.1 KiB
C#
|
|
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<IGuildMemberUpdate>
|
||
|
|
{
|
||
|
|
private readonly ILogger _logger = logger.ForContext<GuildMemberUpdateResponder>();
|
||
|
|
|
||
|
|
public async Task<Result> 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;
|
||
|
|
}
|
||
|
|
}
|