From 4f2b793c762791e67a20a9f830b922ed82905f7f Mon Sep 17 00:00:00 2001 From: Macintosh II Date: Tue, 3 Oct 2023 16:19:31 +0300 Subject: [PATCH] Resolve conversations pt.2 Signed-off-by: Macintosh II --- src/Commands/MuteCommandGroup.cs | 53 ++++++++++++++++++++++++++------ 1 file changed, 44 insertions(+), 9 deletions(-) diff --git a/src/Commands/MuteCommandGroup.cs b/src/Commands/MuteCommandGroup.cs index 25091c2..31660dd 100644 --- a/src/Commands/MuteCommandGroup.cs +++ b/src/Commands/MuteCommandGroup.cs @@ -327,19 +327,18 @@ public class MuteCommandGroup : CommandGroup return await _feedback.SendContextualEmbedResultAsync(failedEmbed, ct); } - if (memberData.MutedUntil is not null) + var removeMuteRoleAsync = + await RemoveMuteRoleAsync(target, reason, guildId, memberData, user, CancellationToken); + if (!removeMuteRoleAsync.IsSuccess) { - await _guildApi.ModifyGuildMemberAsync( - guildId, target.ID, roles: memberData.Roles.ConvertAll(r => r.ToSnowflake()), - reason: $"({user.GetTag()}) {reason}".EncodeHeader(), ct: ct); - memberData.MutedUntil = null; + return Result.FromError(removeMuteRoleAsync.Error); } - if (communicationDisabledUntil is not null) + var removeTimeoutResult = + await RemoveTimeoutAsync(target, reason, guildId, communicationDisabledUntil, user, CancellationToken); + if (!removeTimeoutResult.IsSuccess) { - await _guildApi.ModifyGuildMemberAsync( - guildId, target.ID, reason: $"({user.GetTag()}) {reason}".EncodeHeader(), - communicationDisabledUntil: null, ct: ct); + return Result.FromError(removeTimeoutResult.Error); } var title = string.Format(Messages.UserUnmuted, target.GetTag()); @@ -357,4 +356,40 @@ public class MuteCommandGroup : CommandGroup return await _feedback.SendContextualEmbedResultAsync(embed, ct); } + + private async Task RemoveMuteRoleAsync( + IUser target, string reason, Snowflake guildId, MemberData memberData, IUser user, CancellationToken ct = default) + { + if (memberData.MutedUntil is null) + { + return Result.FromSuccess(); + } + + var muteResult = await _guildApi.ModifyGuildMemberAsync( + guildId, target.ID, roles: memberData.Roles.ConvertAll(r => r.ToSnowflake()), + reason: $"({user.GetTag()}) {reason}".EncodeHeader(), ct: ct); + if (!muteResult.IsSuccess) + { + return Result.FromError(muteResult.Error); + } + + memberData.MutedUntil = null; + + return Result.FromSuccess(); + } + + private async Task RemoveTimeoutAsync( + IUser target, string reason, Snowflake guildId, DateTimeOffset? communicationDisabledUntil, + IUser user, CancellationToken ct = default) + { + if (communicationDisabledUntil is null) + { + return Result.FromSuccess(); + } + + var muteResult = await _guildApi.ModifyGuildMemberAsync( + guildId, target.ID, reason: $"({user.GetTag()}) {reason}".EncodeHeader(), + communicationDisabledUntil: null, ct: ct); + return !muteResult.IsSuccess ? Result.FromError(muteResult.Error) : Result.FromSuccess(); + } }