public async Task <IEnumerable <GuildMemberDto> > Get([FromQuery] string[]?role, bool force = false) { var guild = await _discordClientProvider.GetGuildAsync(); IEnumerable <DiscordMember> members; if (force) { members = await guild.GetAllMembersAsync(); } else { members = guild.Members.Values; } if (role?.Length > 0) { members = members.Where(m => role.Any(r => _discordClientProvider.HasAppRole(m, r))); } return(members.Select(_discordClientProvider.CreateDto)); }
private async Task LoadAllMembersAsync() { using var scope = _serviceProvider.CreateScope(); var context = scope.ServiceProvider.GetRequiredService <ApplicationDbContext>(); var guild = await _discordClientProvider.GetGuildAsync(); await foreach (var user in context.Users.AsTracking().AsAsyncEnumerable()) { if (guild.Members.TryGetValue((ulong)user.Id, out var member) && member.DisplayName != user.UserName) { user.UserName = member.DisplayName; user.NormalizedUserName = member.DisplayName.Normalize().ToUpper(); } } await context.SaveChangesAsync(); if (scope is IAsyncDisposable asyncDisposable) { await asyncDisposable.DisposeAsync(); } }