/// <inheritdoc /> public async Task <IReadOnlyCollection <AuthorizationClaim> > GetGuildUserClaimsAsync(IGuildUser guildUser, params AuthorizationClaim[] filterClaims) { if (guildUser == null) { throw new ArgumentNullException(nameof(guildUser)); } if (guildUser.Id == CurrentUserId) { return(CurrentClaims); } var selfUser = await SelfUserProvider.GetSelfUserAsync(); if (guildUser.Id == selfUser.Id || guildUser.GuildPermissions.Administrator) { return(Enum.GetValues(typeof(AuthorizationClaim)).Cast <AuthorizationClaim>().ToArray()); } return(await LookupPosessedClaimsAsync(guildUser.GuildId, guildUser.RoleIds, guildUser.Id, filterClaims)); }
/// <inheritdoc /> public async Task AutoConfigureGuildAsync(IGuild guild, CancellationToken cancellationToken = default) { if (await ClaimMappingRepository.AnyAsync(new ClaimMappingSearchCriteria() { GuildId = guild.Id, IsDeleted = false, })) { return; } var selfUser = await SelfUserProvider.GetSelfUserAsync(cancellationToken); // Need the bot user to exist, before we start adding claims, created by the bot user. await UserService.TrackUserAsync(guild, selfUser.Id); using (var transaction = await ClaimMappingRepository.BeginCreateTransactionAsync()) { foreach (var claim in Enum.GetValues(typeof(AuthorizationClaim)).Cast <AuthorizationClaim>()) { foreach (var role in guild.Roles.Where(x => x.Permissions.Administrator)) { await ClaimMappingRepository.CreateAsync(new ClaimMappingCreationData() { Type = ClaimMappingType.Granted, GuildId = guild.Id, RoleId = role.Id, UserId = null, Claim = claim, CreatedById = selfUser.Id }); } } transaction.Commit(); } }