public async Task UnmuteAsync([RequireInvokerHierarchy("unmute")] SocketGuildUser user) { SocketRole role = await modRolesDatabase.Muted.GetMuteRole(Context.Guild); List <SocketRole> roles = await modRolesDatabase.UserRoles.GetUserRolesAsync(user); if ((role == null || !user.Roles.Contains(role)) && roles.Count == 0) { await Context.Channel.SendMessageAsync($"Our security team has informed us that {user.Nickname ?? user.Username} is not muted."); return; } EmbedBuilder embed = new EmbedBuilder() .WithColor(new Color(12, 156, 24)) .WithDescription($"{user.Mention} has been freed from house arrest after a good amount of ~~brainwashing~~ self-reflection."); List <Task> cmds = new() { Context.Channel.SendMessageAsync(embed: embed.Build()), UnmuteModLog.SendToModLogAsync(Context.User as SocketGuildUser, user) }; if (roles.Count > 0) { cmds.AddRange(new List <Task>() { user.AddRolesAsync(roles), modRolesDatabase.UserRoles.RemoveUserRolesAsync(user) }); } if (role != null) { cmds.Add(user.RemoveRoleAsync(role)); } await Task.WhenAll(cmds); }
public async Task TempMuteAsync([RequireBotHierarchy("mute")][RequireInvokerHierarchy("mute")] SocketGuildUser user, string timeout = null, [Remainder] string reason = null) { IRole role = await modRolesDatabase.Muted.GetMuteRole(Context.Guild) ?? await CreateMuteRoleAsync(); if (user.Roles.Contains(role)) { await Context.Channel.SendMessageAsync($"Our security team has informed us that {user.Nickname ?? user.Username} is already under house arrest."); return; } List <SocketRole> roles = user.Roles.ToList(); roles.Remove(Context.Guild.EveryoneRole); roles.RemoveAll(x => x.IsManaged); List <Task> cmds = new(); bool modifyRoles = await configDatabase.ModifyMuted.GetModifyMutedAsync(Context.Guild); if (modifyRoles) { cmds.AddRange(new List <Task>() { modRolesDatabase.UserRoles.SaveUserRolesAsync(roles, user), user.RemoveRolesAsync(roles) }); } cmds.Add(user.AddRoleAsync(role)); await Task.WhenAll(cmds); bool isTimeout = double.TryParse(timeout, out double minutes); EmbedBuilder embed = new EmbedBuilder() .WithColor(new Color(255, 110, 24)) .WithDescription($"{user.Mention} has been placed under house arrest{(timeout != null && isTimeout ? $" for {timeout} {(minutes == 1 ? "minute" : "minutes")}" : "")}."); EmbedFieldBuilder reasonField = new EmbedFieldBuilder() .WithIsInline(false) .WithName("Reason") .WithValue($"{reason ?? "[none given]"}"); embed.AddField(reasonField); await Task.WhenAll ( Context.Channel.SendMessageAsync(embed: embed.Build()), MuteModLog.SendToModLogAsync(Context.User as SocketGuildUser, user, timeout, reason) ); if (isTimeout) { await Task.Delay((int)(minutes * 60 * 1000)); if (!user.Roles.Contains(role)) { return; } cmds = new List <Task>() { user.RemoveRoleAsync(role), modRolesDatabase.UserRoles.RemoveUserRolesAsync(user), UnmuteModLog.SendToModLogAsync(Context.Guild.CurrentUser, user) }; if (modifyRoles) { cmds.Add(user.AddRolesAsync(roles)); } await Task.WhenAll(cmds); } }