Exemple #1
0
        private async Task <TempUnverifyItem> RemoveAccessAsync(GrillBotRepository repository, SocketGuildUser user,
                                                                int unverifyTime, string reason, SocketUser fromUser, SocketGuild guild, bool ignoreHigherRoles)
        {
            var rolesToRemove = user.Roles
                                .Where(o => !o.IsEveryone && !o.IsManaged && !string.Equals(o.Name, "muted", StringComparison.InvariantCultureIgnoreCase))
                                .ToList(); // Ignore Muted roles.

            if (ignoreHigherRoles)
            {
                var botMaxRolePosition = guild.GetUser(Client.CurrentUser.Id).Roles.Max(o => o.Position);
                rolesToRemove = rolesToRemove.Where(o => o.Position < botMaxRolePosition).ToList();
            }

            var rolesToRemoveNames = rolesToRemove.Select(o => o.Name).ToList();
            var overrides          = GetChannelOverrides(user);

            var data = new UnverifyLogSet()
            {
                Overrides = overrides,
                Roles     = rolesToRemoveNames,
                StartAt   = DateTime.Now,
                TimeFor   = unverifyTime.ToString(),
                Reason    = reason
            };

            data.SetUser(user);
            await repository.TempUnverify.LogOperationAsync(UnverifyLogOperation.Set, fromUser, guild, data).ConfigureAwait(false);

            await Logger.WriteAsync($"RemoveAccess {unverifyTime} secs (Roles: {string.Join(", ", rolesToRemoveNames)}, " +
                                    $"ExtraChannels: {string.Join(", ", overrides.Select(o => $"{o.ChannelId} => AllowVal: {o.AllowValue}, DenyVal => {o.DenyValue}"))}), " +
                                    $"{user.GetFullName()} ({user.Id}) Reason: {reason}").ConfigureAwait(false);

            await FindAndToggleMutedRole(user, guild, true).ConfigureAwait(false);

            await PreRemoveAccessToPublicChannels(user, guild).ConfigureAwait(false); // Set SendMessage: Deny for extra channels.

            await user.RemoveRolesAsync(rolesToRemove).ConfigureAwait(false);         // Remove all roles for user.

            // Remove all extra channel permissions.
            foreach (var channelOverride in overrides)
            {
                var channel = user.Guild.GetChannel(channelOverride.ChannelIdSnowflake);

                // Where had access, now not have.
                channel?.AddPermissionOverwriteAsync(user, new OverwritePermissions(viewChannel: PermValue.Deny));
            }

            var unverify = await repository.TempUnverify
                           .AddItemAsync(rolesToRemoveNames, user.Id, user.Guild.Id, unverifyTime, overrides, reason)
                           .ConfigureAwait(false);

            var formatedPrivateMessage = GetFormatedPrivateMessage(user, unverify, reason, false);
            await user.SendPrivateMessageAsync(formatedPrivateMessage).ConfigureAwait(false);

            return(unverify);
        }
        public async Task <UnverifyLog> LogSelfUnverifyAsync(UnverifyUserProfile profile, IGuild guild)
        {
            var data = UnverifyLogSet.FromProfile(profile);

            var userEntity = await GrillBotRepository.UsersRepository.GetOrCreateUserAsync(guild.Id, profile.DestinationUser.Id, UsersIncludes.None);

            await GrillBotRepository.CommitAsync();

            GrillBotRepository.Detach(userEntity);

            return(await SaveLogOperationAsync(UnverifyLogOperation.Selfunverify, data.ToJObject(), userEntity.ID, userEntity.ID));
        }
Exemple #3
0
        public void LogSet(List <ChannelOverride> overrides, List <ulong> roleIDs, int unverifyTime, string reason, IUser toUser, IUser fromUser,
                           IGuild guild, bool isSelfUnverify, string[] subjects)
        {
            var data = new UnverifyLogSet()
            {
                Overrides      = overrides,
                Reason         = reason,
                Roles          = roleIDs,
                StartAt        = DateTime.Now,
                TimeFor        = unverifyTime.ToString(),
                IsSelfUnverify = isSelfUnverify,
                Subjects       = subjects?.ToList() ?? new List <string>()
            };

            Save(UnverifyLogOperation.Set, fromUser, toUser, guild, data);
        }