Ejemplo n.º 1
0
        private async Task <AuditLogQueryFilter> CreateQueryFilterAsync(LogsFilter filter, SocketGuild guild)
        {
            var users = await UserSearchService.FindUsersAsync(guild, filter.UserQuery);

            var userIds = users != null ? (await UserSearchService.ConvertUsersToIDsAsync(users)).Select(o => o.Value).Where(o => o != null).Select(o => (long)o) : null;

            var botAccounts = filter.IgnoreBots ? await guild.GetBotsAsync() : new List <SocketGuildUser>();

            var botAccountIds = (await UserSearchService.ConvertUsersToIDsAsync(botAccounts)).Select(o => o.Value).Where(o => o != null).Select(o => (long)o);

            if (filter.Page < 0)
            {
                filter.Page = 0;
            }

            var types = filter.GetSelectedTypes();

            return(new AuditLogQueryFilter()
            {
                From = filter.From,
                GuildId = filter.GuildId.ToString(),
                Skip = (filter.Page == 0 ? 0 : filter.Page - 1) * PaginationInfo.DefaultPageSize,
                SortDesc = filter.SortDesc,
                Take = PaginationInfo.DefaultPageSize,
                To = filter.To,
                Types = types.ToArray(),
                UserIds = userIds?.ToList(),
                IgnoredIds = botAccountIds.ToList()
            });
        }
Ejemplo n.º 2
0
        public async Task <List <AuditItem> > GetAuditLogsAsync(LogsFilter filter)
        {
            var guild = Client.GetGuild(filter.GuildId);

            if (guild == null)
            {
                return(new List <AuditItem>());
            }

            var queryFilter = await CreateQueryFilterAsync(filter, guild);

            var data = await GrillBotRepository.AuditLogs.GetAuditLogsQuery(queryFilter)
                       .Skip(queryFilter.Skip).Take(queryFilter.Take).ToListAsync();

            var items = new List <AuditItem>();

            foreach (var item in data)
            {
                var user = item.User == null ? null : await UserHelper.MapUserAsync(Client, BotState, item.User);

                var auditItem = await AuditItem.CreateAsync(guild, item, user, MessageCache);

                items.Add(auditItem);
            }

            return(items);
        }
Ejemplo n.º 3
0
        /// <summary>
        /// addLog.
        /// receive a MsgCommand, extract from it all the info about
        /// the message, create appropriate log and add it to list.
        /// </summary>
        /// <param name="m"></param>
        public void addLog(MsgCommand m)
        {
            MessageRecievedEventArgs cmd = MessageRecievedEventArgs.FromJSON(m.args[0]);
            Log lg = new Log(Log.ConverToString((int)cmd.Status), cmd.Message);

            Logs.Add(lg);
            if (TypeChose != null)
            {
                if (TypeChose.Equals(lg.Type))
                {
                    LogsFilter.Add(lg);
                }
            }
        }
Ejemplo n.º 4
0
        public async Task <PaginationInfo> GetPaginationInfoAsync(LogsFilter filter)
        {
            var guild = Client.GetGuild(filter.GuildId);

            if (guild == null)
            {
                return(new PaginationInfo());
            }

            var queryFilter = await CreateQueryFilterAsync(filter, guild);

            var totalCount = await GrillBotRepository.AuditLogs.GetAuditLogsQuery(queryFilter).CountAsync();

            return(new PaginationInfo(queryFilter.Skip, filter.Page, totalCount));
        }
Ejemplo n.º 5
0
        public async Task <IActionResult> IndexAsync(LogsFilter filter = null)
        {
            if (filter == null)
            {
                filter = new LogsFilter();
            }
            if (filter.GuildId == 0)
            {
                filter.GuildId = DiscordClient.Guilds.FirstOrDefault()?.Id ?? 0;
            }

            var logs = await AuditService.GetAuditLogsAsync(filter);

            var pagination = await AuditService.GetPaginationInfoAsync(filter);

            var viewModel = new AuditViewModel(logs, filter, pagination, DiscordClient.Guilds.ToList());

            return(View(viewModel));
        }