Esempio n. 1
0
        public IQueryable <UserEntity> GetUsersQuery(UserListFilter filter, UsersIncludes includes)
        {
            var query = GetBaseQuery(includes)
                        .Where(o => o.GuildID == filter.Guild.Id.ToString());

            if (filter.Users != null)
            {
                var ids = filter.Users.ConvertAll(o => o.Id.ToString());
                query = query.Where(o => ids.Contains(o.UserID));
            }

            if (!string.IsNullOrEmpty(filter.InviteCode))
            {
                query = query.Where(o => o.UsedInviteCode.Contains(filter.InviteCode));
            }

            if (filter.OnlyWebAdmin)
            {
                query = query.Where(o => o.WebAdminPassword != null);
            }

            if (filter.OnlyApiAccess)
            {
                query = query.Where(o => o.ApiToken != null);
            }

            if (filter.OnlyBotAdmin)
            {
                query = query.Where(o => (o.Flags & (int)UserFlags.BotAdmin) != 0);
            }

            return(OrderUsers(query, filter.Desc, filter.Order));
        }
Esempio n. 2
0
        /// <summary>
        /// Gets complete information about user.
        /// </summary>
        public async Task <DiscordUser> GetUserAsync(long userId)
        {
            const UsersIncludes includes = UsersIncludes.Unverify | UsersIncludes.UsedInvite;

            var entity = await GrillBotRepository.UsersRepository.GetUserAsync(userId, includes);

            if (entity == null)
            {
                return(null);
            }

            entity.Channels = (await GrillBotRepository.ChannelStatsRepository.GetChannelsOfUser(entity.ID).ToListAsync()).ToHashSet();

            var incomingUnverifiesQuery = GrillBotRepository.UnverifyRepository.GetIncomingUnverifies(entity.ID)
                                          .Where(o => o.Operation == UnverifyLogOperation.Selfunverify || o.Operation == UnverifyLogOperation.Unverify)
                                          .OrderByDescending(o => o.ID);

            entity.IncomingUnverifyOperations = (await incomingUnverifiesQuery.ToListAsync()).ToHashSet();

            var outgoingUnverifiesQuery = GrillBotRepository.UnverifyRepository.GetOutgoingUnverifies(entity.ID)
                                          .Where(o => o.Operation == UnverifyLogOperation.Unverify);

            entity.OutgoingUnverifyOperations = (await outgoingUnverifiesQuery.ToListAsync()).ToHashSet();

            var createdInvitesQuery = GrillBotRepository.InviteRepository.GetInvitesOfUser(entity.ID)
                                      .OrderByDescending(o => o.UsedUsers.Count).ThenByDescending(o => o.Code);

            entity.CreatedInvites = (await createdInvitesQuery.ToListAsync()).ToHashSet();

            var remindersQuery = GrillBotRepository.ReminderRepository.GetRemindersOfUser(entity.ID)
                                 .OrderByDescending(o => o.At).ThenByDescending(o => o.RemindID);

            entity.Reminders = (await remindersQuery.ToListAsync()).ToHashSet();

            return(await UserHelper.MapUserAsync(DiscordClient, BotState, entity));
        }
Esempio n. 3
0
        private IQueryable <UserEntity> GetBaseQuery(UsersIncludes includes, bool noTracking)
        {
            var query = Context.Users.AsQueryable();

            if (includes == UsersIncludes.None)
            {
                return(query);
            }

            if ((includes & UsersIncludes.Channels) != 0)
            {
                query = query.Include(o => o.Channels);
            }

            if ((includes & UsersIncludes.Reminders) != 0)
            {
                query = query.Include(o => o.Reminders);
            }

            if ((includes & UsersIncludes.CreatedInvites) != 0)
            {
                query = query
                        .Include(o => o.CreatedInvites);
            }

            if ((includes & UsersIncludes.UsedInvite) != 0)
            {
                query = query
                        .Include(o => o.UsedInvite)
                        .ThenInclude(o => o.Creator);
            }

            if ((includes & UsersIncludes.Emotes) != 0)
            {
                query = query.Include(o => o.UsedEmotes);
            }

            if ((includes & UsersIncludes.Unverify) != 0)
            {
                query = query
                        .Include(o => o.Unverify)
                        .ThenInclude(o => o.SetLogOperation)
                        .ThenInclude(o => o.FromUser);
            }

            if ((includes & UsersIncludes.UnverifyLogIncoming) != 0)
            {
                query = query
                        .Include(o => o.IncomingUnverifyOperations)
                        .ThenInclude(o => o.FromUser);
            }

            if ((includes & UsersIncludes.UnverifyLogOutgoing) != 0)
            {
                query = query
                        .Include(o => o.OutgoingUnverifyOperations)
                        .ThenInclude(o => o.ToUser);
            }

            return(noTracking ? query.AsNoTracking() : query);
        }