From be77a1098bef771dffe85d94e8ed4ddeb53cc768 Mon Sep 17 00:00:00 2001 From: Matt Jankowski Date: Fri, 6 Sep 2024 03:49:38 -0400 Subject: [PATCH] Extract `Account::AUTOMATED_ACTOR_TYPES` for "bot" actor_type values (#31772) --- app/models/account.rb | 7 +++++-- lib/mastodon/cli/accounts.rb | 2 +- 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/app/models/account.rb b/app/models/account.rb index c20b72658bc..d773d334417 100644 --- a/app/models/account.rb +++ b/app/models/account.rb @@ -75,6 +75,8 @@ class Account < ApplicationRecord DISPLAY_NAME_LENGTH_LIMIT = 30 NOTE_LENGTH_LIMIT = 500 + AUTOMATED_ACTOR_TYPES = %w(Application Service).freeze + include Attachmentable # Load prior to Avatar & Header concerns include Account::Associations @@ -127,7 +129,8 @@ class Account < ApplicationRecord scope :without_silenced, -> { where(silenced_at: nil) } scope :without_instance_actor, -> { where.not(id: INSTANCE_ACTOR_ID) } scope :recent, -> { reorder(id: :desc) } - scope :bots, -> { where(actor_type: %w(Application Service)) } + scope :bots, -> { where(actor_type: AUTOMATED_ACTOR_TYPES) } + scope :non_automated, -> { where.not(actor_type: AUTOMATED_ACTOR_TYPES) } scope :groups, -> { where(actor_type: 'Group') } scope :alphabetic, -> { order(domain: :asc, username: :asc) } scope :matches_uri_prefix, ->(value) { where(arel_table[:uri].matches("#{sanitize_sql_like(value)}/%", false, true)).or(where(uri: value)) } @@ -183,7 +186,7 @@ class Account < ApplicationRecord end def bot? - %w(Application Service).include? actor_type + AUTOMATED_ACTOR_TYPES.include?(actor_type) end def instance_actor? diff --git a/lib/mastodon/cli/accounts.rb b/lib/mastodon/cli/accounts.rb index 0cdf68158fa..8a138323d49 100644 --- a/lib/mastodon/cli/accounts.rb +++ b/lib/mastodon/cli/accounts.rb @@ -502,7 +502,7 @@ module Mastodon::CLI - not muted/blocked by us LONG_DESC def prune - query = Account.remote.where.not(actor_type: %i(Application Service)) + query = Account.remote.non_automated query = query.where('NOT EXISTS (SELECT 1 FROM mentions WHERE account_id = accounts.id)') query = query.where('NOT EXISTS (SELECT 1 FROM favourites WHERE account_id = accounts.id)') query = query.where('NOT EXISTS (SELECT 1 FROM statuses WHERE account_id = accounts.id)')