1
0
Fork 1
mirror of https://github.com/TeamOctolings/Octobot.git synced 2025-04-20 00:43:36 +03:00

Fix /unmute doesn't check if the target is muted

Signed-off-by: Macintosh II <mctaylxrs@outlook.com>
This commit is contained in:
Macintxsh 2023-10-03 15:49:15 +03:00
parent 413b8a4781
commit 2609689906
Signed by: mctaylors
GPG key ID: 361D326747B61E65

View file

@ -285,17 +285,11 @@ public class MuteCommandGroup : CommandGroup
return await _feedback.SendContextualEmbedResultAsync(embed, CancellationToken); return await _feedback.SendContextualEmbedResultAsync(embed, CancellationToken);
} }
if (data.GetOrCreateMemberData(target.ID).MutedUntil is not null) return await RemoveMuteAsync(
{
return await RemoveMuteRoleUserAsync(
target, reason, guildId, data, channelId, user, currentUser, CancellationToken); target, reason, guildId, data, channelId, user, currentUser, CancellationToken);
} }
return await RemoveTimeoutUserAsync( private async Task<Result> RemoveMuteAsync(
target, reason, guildId, data, channelId, user, currentUser, CancellationToken);
}
private async Task<Result> RemoveMuteRoleUserAsync(
IUser target, string reason, Snowflake guildId, GuildData data, Snowflake channelId, IUser user, IUser target, string reason, Snowflake guildId, GuildData data, Snowflake channelId, IUser user,
IUser currentUser, CancellationToken ct = default) IUser currentUser, CancellationToken ct = default)
{ {
@ -315,58 +309,37 @@ public class MuteCommandGroup : CommandGroup
return await _feedback.SendContextualEmbedResultAsync(failedEmbed, ct); return await _feedback.SendContextualEmbedResultAsync(failedEmbed, ct);
} }
var guildMemberResult = await _guildApi.GetGuildMemberAsync(guildId, user.ID, ct);
DateTimeOffset? communicationDisabledUntil = null;
if (guildMemberResult.IsDefined(out var guildMember))
{
communicationDisabledUntil = guildMember.CommunicationDisabledUntil.OrDefault(null);
}
var memberData = data.GetOrCreateMemberData(target.ID); var memberData = data.GetOrCreateMemberData(target.ID);
var unmuteResult = await _guildApi.ModifyGuildMemberAsync( var isMuted = memberData.MutedUntil is not null || communicationDisabledUntil is not null;
guildId, target.ID, roles: memberData.Roles.ConvertAll(r => r.ToSnowflake()),
reason: $"({user.GetTag()}) {reason}".EncodeHeader(), ct: ct);
memberData.MutedUntil = null;
if (!unmuteResult.IsSuccess)
{
return Result.FromError(unmuteResult.Error);
}
var title = string.Format(Messages.UserUnmuted, target.GetTag()); if (!isMuted)
var description = $"- {string.Format(Messages.DescriptionActionReason, reason)}";
var logResult = _utility.LogActionAsync(
data.Settings, channelId, user, title, description, target, ColorsList.Green, ct: ct);
if (!logResult.IsSuccess)
{ {
return Result.FromError(logResult.Error); var failedEmbed = new EmbedBuilder().WithSmallTitle(Messages.UserNotMuted, currentUser)
}
var embed = new EmbedBuilder().WithSmallTitle(
string.Format(Messages.UserUnmuted, target.GetTag()), target)
.WithColour(ColorsList.Green).Build();
return await _feedback.SendContextualEmbedResultAsync(embed, ct);
}
private async Task<Result> RemoveTimeoutUserAsync(
IUser target, string reason, Snowflake guildId, GuildData data, Snowflake channelId, IUser user,
IUser currentUser, CancellationToken ct = default)
{
var interactionResult
= await _utility.CheckInteractionsAsync(
guildId, user.ID, target.ID, "Unmute", ct);
if (!interactionResult.IsSuccess)
{
return Result.FromError(interactionResult);
}
if (interactionResult.Entity is not null)
{
var failedEmbed = new EmbedBuilder().WithSmallTitle(interactionResult.Entity, currentUser)
.WithColour(ColorsList.Red).Build(); .WithColour(ColorsList.Red).Build();
return await _feedback.SendContextualEmbedResultAsync(failedEmbed, ct); return await _feedback.SendContextualEmbedResultAsync(failedEmbed, ct);
} }
var unmuteResult = await _guildApi.ModifyGuildMemberAsync( if (memberData.MutedUntil is not null)
{
await _guildApi.ModifyGuildMemberAsync(
guildId, target.ID, roles: memberData.Roles.ConvertAll(r => r.ToSnowflake()),
reason: $"({user.GetTag()}) {reason}".EncodeHeader(), ct: ct);
memberData.MutedUntil = null;
}
if (communicationDisabledUntil is not null)
{
await _guildApi.ModifyGuildMemberAsync(
guildId, target.ID, reason: $"({user.GetTag()}) {reason}".EncodeHeader(), guildId, target.ID, reason: $"({user.GetTag()}) {reason}".EncodeHeader(),
communicationDisabledUntil: null, ct: ct); communicationDisabledUntil: null, ct: ct);
if (!unmuteResult.IsSuccess)
{
return Result.FromError(unmuteResult.Error);
} }
var title = string.Format(Messages.UserUnmuted, target.GetTag()); var title = string.Format(Messages.UserUnmuted, target.GetTag());