/// <inheritdoc/> public Task <Result> RespondAsync(IGuildMemberUpdate gatewayEvent, CancellationToken ct = default) { var key = KeyHelpers.CreateGuildMemberKey(gatewayEvent.GuildID, gatewayEvent.User.ID); // Since this event isn't playing nice, we'll have to update by creating an object of our own. if (_cacheService.TryGetValue <IGuildMember>(key, out var cachedInstance)) { cachedInstance = new GuildMember ( new Optional <IUser>(gatewayEvent.User), gatewayEvent.Nickname.HasValue ? gatewayEvent.Nickname : cachedInstance.Nickname, gatewayEvent.Roles, gatewayEvent.JoinedAt, gatewayEvent.PremiumSince.HasValue ? gatewayEvent.PremiumSince.Value : cachedInstance.PremiumSince, cachedInstance.IsDeafened, cachedInstance.IsMuted, cachedInstance.IsPending, cachedInstance.Permissions ); } else if (gatewayEvent.PremiumSince.HasValue) { cachedInstance = new GuildMember ( new Optional <IUser>(gatewayEvent.User), gatewayEvent.Nickname, gatewayEvent.Roles, gatewayEvent.JoinedAt, gatewayEvent.PremiumSince.Value, false, false,
/// <inheritdoc /> public async Task <Result> RespondAsync(IGuildMemberUpdate gatewayEvent, CancellationToken ct = default) { var oldMemberKey = KeyHelpers.CreateGuildMemberKey(gatewayEvent.GuildID, gatewayEvent.User.ID); if (!_cache.TryGetValue(oldMemberKey, out IGuildMember oldMember)) { return(Result.FromSuccess()); } if (oldMember.Nickname != gatewayEvent.Nickname) { var notifyResult = await _channelLogging.NotifyUserNicknameChangedAsync ( gatewayEvent.GuildID, gatewayEvent.User.ID, oldMember.Nickname, gatewayEvent.Nickname ); if (!notifyResult.IsSuccess) { return(notifyResult); } } if (!oldMember.User.IsDefined(out var oldUser)) { return(Result.FromSuccess()); } if (oldUser.Discriminator != gatewayEvent.User.Discriminator) { return(await _channelLogging.NotifyUserDiscriminatorChangedAsync ( gatewayEvent.GuildID, gatewayEvent.User.ID, oldUser.Discriminator, gatewayEvent.User.Discriminator, ct )); } return(Result.FromSuccess()); }