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() }); }
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); }
/// <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); } } }
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)); }
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)); }