示例#1
0
        public async Task <IRole> GetOrCreateDesignatedMuteRoleAsync(IGuild guild, ulong currentUserId)
        {
            using (var transaction = await DesignatedRoleMappingRepository.BeginCreateTransactionAsync())
            {
                var mapping = (await DesignatedRoleMappingRepository.SearchBriefsAsync(new DesignatedRoleMappingSearchCriteria()
                {
                    GuildId = guild.Id,
                    Type = DesignatedRoleType.ModerationMute,
                    IsDeleted = false
                })).FirstOrDefault();

                if (!(mapping is null))
                {
                    return(guild.Roles.First(x => x.Id == mapping.Role.Id));
                }

                var role = guild.Roles.FirstOrDefault(x => x.Name == MuteRoleName)
                           ?? await guild.CreateRoleAsync(MuteRoleName);

                await DesignatedRoleMappingRepository.CreateAsync(new DesignatedRoleMappingCreationData()
                {
                    GuildId     = guild.Id,
                    RoleId      = role.Id,
                    Type        = DesignatedRoleType.ModerationMute,
                    CreatedById = currentUserId
                });

                transaction.Commit();
                return(role);
            }
        }
示例#2
0
        /// <inheritdoc />
        public async Task UnConfigureGuildAsync(IGuild guild)
        {
            AuthorizationService.RequireAuthenticatedUser();
            AuthorizationService.RequireClaims(AuthorizationClaim.DesignatedRoleMappingDelete);

            using (var transaction = await DesignatedRoleMappingRepository.BeginDeleteTransactionAsync())
            {
                foreach (var mapping in await DesignatedRoleMappingRepository
                         .SearchBriefsAsync(new DesignatedRoleMappingSearchCriteria()
                {
                    GuildId = guild.Id,
                    Type = DesignatedRoleType.ModerationMute,
                    IsDeleted = false,
                }))
                {
                    await DesignatedRoleMappingRepository.TryDeleteAsync(mapping.Id, AuthorizationService.CurrentUserId.Value);

                    var role = guild.Roles.FirstOrDefault(x => x.Id == mapping.Role.Id);
                    if ((role != null) && (role.Name == MuteRoleName) && (role is IDeletable deletable))
                    {
                        await deletable.DeleteAsync();
                    }
                }

                transaction.Commit();
            }
        }
示例#3
0
 private async Task <IEnumerable <GuildRoleBrief> > GetRankRolesAsync(ulong guildId)
 => (await DesignatedRoleMappingRepository
     .SearchBriefsAsync(new DesignatedRoleMappingSearchCriteria
 {
     GuildId = guildId,
     Type = DesignatedRoleType.Rank,
     IsDeleted = false,
 }))
 .Select(r => r.Role);
示例#4
0
 private async Task <IEnumerable <GuildRoleBrief> > GetRankRolesAsync()
 => (await DesignatedRoleMappingRepository
     .SearchBriefsAsync(new DesignatedRoleMappingSearchCriteria
 {
     GuildId = AuthorizationService.CurrentGuildId,
     Type = DesignatedRoleType.Rank,
     IsDeleted = false,
 }))
 .Select(r => r.Role);
        /// <inheritdoc />
        public Task <IReadOnlyCollection <DesignatedRoleMappingBrief> > GetDesignatedRolesAsync(ulong guildId)
        {
            AuthorizationService.RequireClaims(AuthorizationClaim.DesignatedRoleMappingRead);

            return(DesignatedRoleMappingRepository.SearchBriefsAsync(new DesignatedRoleMappingSearchCriteria()
            {
                GuildId = guildId,
                IsDeleted = false
            }));
        }
示例#6
0
        private async Task <IRole> GetDesignatedMuteRoleAsync(IGuild guild)
        {
            var mapping = (await DesignatedRoleMappingRepository.SearchBriefsAsync(new DesignatedRoleMappingSearchCriteria()
            {
                GuildId = guild.Id,
                Type = DesignatedRoleType.ModerationMute,
                IsDeleted = false
            })).FirstOrDefault();

            if (mapping == null)
            {
                throw new InvalidOperationException($"There are currently no designated mute roles within guild {guild.Id}");
            }

            return(guild.Roles.First(x => x.Id == mapping.Role.Id));
        }
示例#7
0
        private async Task SetUpMentionableRoles(IGuild guild)
        {
            var mentionableRoleMappings = await DesignatedRoleMappingRepository.SearchBriefsAsync(new DesignatedRoleMappingSearchCriteria
            {
                GuildId   = guild.Id,
                Type      = DesignatedRoleType.RestrictedMentionability,
                IsDeleted = false
            });

            Log.Information("Roles with RestrictedMentionability are: {Roles}", mentionableRoleMappings.Select(d => d.Role.Name));

            //Get the actual roles that correspond to our mappings
            var mentionableRoles = mentionableRoleMappings
                                   .Join(guild.Roles, d => d.Role.Id, d => d.Id, (map, role) => role)
                                   .Where(d => d.IsMentionable);

            try
            {
                //Ensure all roles with restricted mentionability are not mentionable
                foreach (var role in mentionableRoles)
                {
                    Log.Information("Role @{Role} has RestrictedMentionability but was marked as Mentionable.", role.Name);
                    await role.ModifyAsync(d => d.Mentionable = false);

                    Log.Information("Role @{Role} was set to unmentionable.", role.Name);
                }
            }
            catch (HttpException ex)
            {
                var errorTemplate = "An exception was thrown when attempting to set up mention-restricted roles for {Guild}. " +
                                    "This is likely due to Modix not having the \"Manage Roles\" permission, or Modix's role being below one of " +
                                    "the mention-restricted roles in your server's Role list - please check your server settings.";

                Log.Error(ex, errorTemplate, guild.Name);
            }
        }
 /// <inheritdoc />
 public Task <IReadOnlyCollection <DesignatedRoleMappingBrief> > SearchDesignatedRolesAsync(DesignatedRoleMappingSearchCriteria searchCriteria)
 => DesignatedRoleMappingRepository.SearchBriefsAsync(searchCriteria);