Example #1
0
        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);
        }
Example #2
0
        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);
            }
        }