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}).")); }
public async Task AddWarningAsync ( [NotNull] IGuildUser user, [NotNull] string content, 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, content, expiresOn : expiresOn); if (!addWarning.IsSuccess) { await _feedback.SendErrorAsync(this.Context, addWarning.ErrorReason); return; } var warning = addWarning.Entity; await _feedback.SendConfirmationAsync(this.Context, $"Warning added (ID {warning.ID})."); await _logging.NotifyUserWarningAdded(warning); var getSettings = await _moderation.GetOrCreateServerSettingsAsync(this.Context.Guild); if (!getSettings.IsSuccess) { return; } var settings = getSettings.Entity; var warningCount = await _warnings.GetWarnings(user).CountAsync(); if (warningCount >= settings.WarningThreshold) { await _feedback.SendWarningAsync ( this.Context, $"The warned user now has {warningCount} warnings. Consider further action." ); } }
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)); }