示例#1
0
    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));
    }
示例#2
0
    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();
        }
    }