public async Task <RuntimeResult> AddWarningAsync
        (
            IGuildUser user,
            string reason,
            TimeSpan?expiresAfter = null
        )
        {
            DateTime?expiresOn = null;

            if (!(expiresAfter is null))
            {
                expiresOn = DateTime.Now.Add(expiresAfter.Value);
            }

            var addWarning = await _warnings.CreateWarningAsync(this.Context.User, user, reason, expiresOn : expiresOn);

            if (!addWarning.IsSuccess)
            {
                return(addWarning.ToRuntimeResult());
            }

            var warning     = addWarning.Entity;
            var getSettings = await _moderation.GetOrCreateServerSettingsAsync(this.Context.Guild);

            if (!getSettings.IsSuccess)
            {
                return(getSettings.ToRuntimeResult());
            }

            var settings = getSettings.Entity;

            var notifyResult = await _logging.NotifyUserWarningAddedAsync(warning);

            if (!notifyResult.IsSuccess)
            {
                return(notifyResult.ToRuntimeResult());
            }

            var warnings = await _warnings.GetWarningsAsync(user);

            if (warnings.Count >= settings.WarningThreshold)
            {
                await _feedback.SendWarningAsync
                (
                    this.Context, $"The warned user now has {warnings.Count} warnings. Consider further action."
                );
            }

            return(RuntimeCommandResult.FromSuccess($"Warning added (ID {warning.ID})."));
        }
Пример #2
0
    public async Task <Result <FeedbackMessage> > AddWarningAsync
    (
        IUser user,
        string reason,
        TimeSpan?expiresAfter = null
    )
    {
        DateTimeOffset?expiresOn = null;

        if (expiresAfter is not null)
        {
            expiresOn = DateTimeOffset.UtcNow.Add(expiresAfter.Value);
        }

        var addWarning = await _warnings.CreateWarningAsync
                         (
            _context.User.ID,
            user.ID,
            _context.GuildID.Value,
            reason,
            expiresOn : expiresOn
                         );

        if (!addWarning.IsSuccess)
        {
            return(Result <FeedbackMessage> .FromError(addWarning));
        }

        var warning     = addWarning.Entity;
        var getSettings = await _moderation.GetOrCreateServerSettingsAsync(_context.GuildID.Value);

        if (!getSettings.IsSuccess)
        {
            return(Result <FeedbackMessage> .FromError(getSettings));
        }

        var settings = getSettings.Entity;

        var notifyResult = await _logging.NotifyUserWarningAddedAsync(warning);

        if (!notifyResult.IsSuccess)
        {
            return(Result <FeedbackMessage> .FromError(notifyResult));
        }

        var warnings = await _warnings.GetWarningsAsync(user.ID);

        if (warnings.Count < settings.WarningThreshold)
        {
            return(new FeedbackMessage
                   (
                       $"Warning added (ID {warning.ID}): {warning.Reason}.", _feedback.Theme.Secondary
                   ));
        }

        var sendAlert = await _feedback.SendContextualWarningAsync
                        (
            $"The warned user now has {warnings.Count} warnings. Consider further action.",
            _context.User.ID
                        );

        return(sendAlert.IsSuccess
            ? new FeedbackMessage($"Warning added (ID {warning.ID}): {warning.Reason}.", _feedback.Theme.Secondary)
            : Result <FeedbackMessage> .FromError(sendAlert));
    }