Exemplo n.º 1
0
        /// <inheritdoc />
        public async Task RescindInfractionAsync(long infractionId, string reason)
        {
            AuthorizationService.RequireClaims(AuthorizationClaim.ModerationRescind);

            var infraction = await InfractionRepository.ReadAsync(infractionId);

            if (infraction == null)
            {
                throw new ArgumentException("Infraction does not exist", nameof(infractionId));
            }

            switch (infraction.Type)
            {
            case InfractionType.Mute:
                await DoDiscordUnMuteAsync(infraction.Subject.Id);

                break;

            case InfractionType.Ban:
                await DoDiscordUnBanAsync(infraction.Subject.Id);

                break;
            }

            var actionId = await ModerationActionRepository.CreateAsync(new ModerationActionCreationData()
            {
                Type         = ModerationActionType.InfractionRescinded,
                CreatedById  = AuthorizationService.CurrentUserId.Value,
                Reason       = reason,
                InfractionId = infractionId
            });

            // TODO: Log action to a channel, pulled from IModerationConfigRepository.
        }
        public void Constructor_Always_InvokesBaseConstructor()
        {
            var modixContext = Substitute.For <ModixContext>();

            var uut = new ModerationActionRepository(modixContext);

            uut.ModixContext.ShouldBeSameAs(modixContext);
        }
Exemplo n.º 3
0
        /// <inheritdoc />
        public async Task CreateInfractionAsync(InfractionType type, ulong subjectId, string reason, TimeSpan?duration)
        {
            AuthorizationService.RequireClaims(_createInfractionClaimsByType[type]);

            switch (type)
            {
            case InfractionType.Mute:
                await DoDiscordMuteAsync(subjectId);

                break;

            case InfractionType.Ban:
                await DoDiscordBanAsync(subjectId);

                break;
            }

            var actionId = await ModerationActionRepository.CreateAsync(new ModerationActionCreationData()
            {
                Type        = ModerationActionType.InfractionCreated,
                CreatedById = AuthorizationService.CurrentUserId.Value,
                Reason      = reason
            });

            var infractionId = await InfractionRepository.CreateAsync(new InfractionCreationData()
            {
                Type           = type,
                SubjectId      = subjectId,
                Duration       = duration,
                CreateActionId = actionId
            });

            await ModerationActionRepository.UpdateAsync(actionId, data =>
            {
                data.InfractionId = infractionId;
            });

            // TODO: Log action to a channel, pulled from IModerationConfigRepository.

            // TODO: Implement InfractionAutoExpirationBehavior (or whatever) to automatically rescind infractions, based on Duration, and notify it here that a new infraction has been created, if it has a duration.
        }
Exemplo n.º 4
0
 /// <inheritdoc />
 public Task <IReadOnlyCollection <ModerationActionSummary> > SearchModerationActionsAsync(ModerationActionSearchCriteria searchCriteria)
 => ModerationActionRepository.SearchSummariesAsync(searchCriteria);
Exemplo n.º 5
0
        /// <inheritdoc />
        public Task <ModerationActionSummary> GetModerationActionSummaryAsync(long moderationActionId)
        {
            AuthorizationService.RequireClaims(AuthorizationClaim.ModerationRead);

            return(ModerationActionRepository.ReadSummaryAsync(moderationActionId));
        }
Exemplo n.º 6
0
 /// <inheritdoc />
 public Task <ModerationActionSummary> GetModerationActionSummaryAsync(long moderationActionId)
 {
     return(ModerationActionRepository.ReadSummaryAsync(moderationActionId));
 }
Exemplo n.º 7
0
 /// <inheritdoc />
 public async Task <ServiceResult <IReadOnlyCollection <ModerationActionSummary> > > SearchModerationActionsAsync(ModerationActionSearchCriteria searchCriteria)
 => await AuthorizationService.CheckClaims(AuthorizationClaim.ModerationRead)
 .ShortCircuitAsync(ModerationActionRepository.SearchSummariesAsync(searchCriteria));
Exemplo n.º 8
0
 /// <inheritdoc />
 public async Task <ServiceResult <ModerationActionSummary> > GetModerationActionSummaryAsync(long moderationActionId)
 => await AuthorizationService.CheckClaims(AuthorizationClaim.ModerationRead)
 .ShortCircuitAsync(ModerationActionRepository.ReadSummaryAsync(moderationActionId));