diff --git a/src/Services/Update/MemberUpdateService.cs b/src/Services/Update/MemberUpdateService.cs index 712fe93..6a83fbd 100644 --- a/src/Services/Update/MemberUpdateService.cs +++ b/src/Services/Update/MemberUpdateService.cs @@ -80,9 +80,16 @@ public sealed partial class MemberUpdateService : BackgroundService var failedResults = new List(); var id = data.Id.ToSnowflake(); - var punishmentsResult = await CheckMemberPunishmentsAsync(guildId, id, data, ct); + var guildMemberResult = await _guildApi.GetGuildMemberAsync(guildId, id, ct); + + var punishmentsResult = await CheckMemberPunishmentsAsync(guildId, id, data, guildMemberResult, ct); failedResults.AddIfFailed(punishmentsResult); + if (!guildMemberResult.IsDefined(out var guildMember)) + { + return failedResults.AggregateErrors(); + } + if (defaultRole.Value is not 0 && !data.Roles.Contains(defaultRole.Value)) { var addResult = await _guildApi.AddGuildMemberRoleAsync( @@ -90,12 +97,6 @@ public sealed partial class MemberUpdateService : BackgroundService failedResults.AddIfFailed(addResult); } - var guildMemberResult = await _guildApi.GetGuildMemberAsync(guildId, id, ct); - if (!guildMemberResult.IsDefined(out var guildMember)) - { - return failedResults.AggregateErrors(); - } - if (!guildMember.User.IsDefined(out var user)) { failedResults.AddIfFailed(new ArgumentNullError(nameof(guildMember.User))); @@ -118,7 +119,8 @@ public sealed partial class MemberUpdateService : BackgroundService } private async Task CheckMemberPunishmentsAsync( - Snowflake guildId, Snowflake id, MemberData data, CancellationToken ct) + Snowflake guildId, Snowflake id, MemberData data, Result guildMemberResult, + CancellationToken ct) { if (DateTimeOffset.UtcNow > data.BannedUntil) { @@ -132,14 +134,8 @@ public sealed partial class MemberUpdateService : BackgroundService return unbanResult; } - if (DateTimeOffset.UtcNow > data.MutedUntil) + if (DateTimeOffset.UtcNow > data.MutedUntil && guildMemberResult.IsSuccess) { - var isOnServer = await _guildApi.GetGuildMemberAsync(guildId, id, ct); - if (!isOnServer.IsSuccess) - { - return Result.FromSuccess(); - } - var unmuteResult = await _guildApi.ModifyGuildMemberAsync( guildId, id, roles: data.Roles.ConvertAll(r => r.ToSnowflake()), reason: Messages.PunishmentExpired.EncodeHeader(), ct: ct);