diff --git a/app/logical/approver_pruner.rb b/app/logical/approver_pruner.rb index 7421eb4c3..67e7933b5 100644 --- a/app/logical/approver_pruner.rb +++ b/app/logical/approver_pruner.rb @@ -30,4 +30,19 @@ module ApproverPruner end end end + + def dmail_inactive_approvers! + days_until_next_month = (Date.current.next_month.beginning_of_month - Date.current).to_i + return unless days_until_next_month <= 21 + + inactive_approvers.each do |user| + Dmail.create_automated(to: user, title: "You will lose approval privileges soon", body: <<~BODY) + You've approved fewer than #{MINIMUM_APPROVALS} posts in the past + #{APPROVAL_PERIOD.inspect}. You will lose your approval privileges in + #{days_until_next_month} #{"day".pluralize(days_until_next_month)} + unless you have approved at least #{MINIMUM_APPROVALS} posts by the end + of the month. + BODY + end + end end diff --git a/app/logical/danbooru_maintenance.rb b/app/logical/danbooru_maintenance.rb index ee9c56949..a76cfc9b1 100644 --- a/app/logical/danbooru_maintenance.rb +++ b/app/logical/danbooru_maintenance.rb @@ -21,6 +21,7 @@ module DanbooruMaintenance def weekly safely { UserPasswordResetNonce.prune! } safely { TagRelationshipRetirementService.find_and_retire! } + safely { ApproverPruner.dmail_inactive_approvers! } end def monthly diff --git a/test/unit/approver_pruner_test.rb b/test/unit/approver_pruner_test.rb index 444ae498e..b1f9b1952 100644 --- a/test/unit/approver_pruner_test.rb +++ b/test/unit/approver_pruner_test.rb @@ -27,5 +27,13 @@ class ApproverPrunerTest < ActiveSupport::TestCase assert_not_includes(ApproverPruner.inactive_approvers.map(&:id), @user.id) end + + should "dmail inactive approvers" do + travel_to(Date.parse("2020-01-20")) do + ApproverPruner.dmail_inactive_approvers! + end + + assert_equal("You will lose approval privileges soon", @approver.dmails.received.last.title) + end end end