Add filter to block sending some posts

This commit is contained in:
KMY 2023-04-27 18:17:39 +09:00
parent 401847d8cc
commit 4c08ce9d43
4 changed files with 26 additions and 6 deletions

View file

@ -96,7 +96,7 @@ class StatusReachFinder
def banned_domains def banned_domains
blocks = [] blocks = []
blocks << DomainBlock.where(reject_send_not_public_searchability: true).pluck(:domain) if @status.computed_searchability != 'public' blocks << DomainBlock.where(reject_send_not_public_searchability: true).pluck(:domain) if @status.compute_searchability != 'public'
blocks << DomainBlock.where(reject_send_unlisted_dissubscribable: true).pluck(:domain) if @status.unlisted_visibility? && @status.account.dissubscribable blocks << DomainBlock.where(reject_send_unlisted_dissubscribable: true).pluck(:domain) if @status.unlisted_visibility? && @status.account.dissubscribable
blocks << DomainBlock.where(reject_send_public_unlisted: true).pluck(:domain) if @status.public_unlisted_visibility? blocks << DomainBlock.where(reject_send_public_unlisted: true).pluck(:domain) if @status.public_unlisted_visibility?
blocks << DomainBlock.where(reject_send_dissubscribable: true).pluck(:domain) if @status.account.dissubscribable blocks << DomainBlock.where(reject_send_dissubscribable: true).pluck(:domain) if @status.account.dissubscribable

View file

@ -26,17 +26,20 @@ class AccountStatusesFilter
scope.merge!(no_reblogs_scope) if exclude_reblogs? scope.merge!(no_reblogs_scope) if exclude_reblogs?
scope.merge!(hashtag_scope) if tagged? scope.merge!(hashtag_scope) if tagged?
scope.merge!(scope.where(searchability: :public)) if domain_block&.reject_send_not_public_searchability
scope.merge!(scope.where.not(visibility: :unlisted)) if domain_block&.reject_send_unlisted_dissubscribable && @account.dissubscribable
scope.merge!(scope.where.not(visibility: :public_unlisted)) if domain_block&.reject_send_public_unlisted
scope.merge!(scope.where(spoiler_text: ['', nil])) if domain_block&.reject_send_sensitive
scope scope
end end
private private
def initial_scope def initial_scope
if suspended? if suspended? || (domain_block&.reject_send_dissubscribable && @account.dissubscribable)
Status.none Status.none
elsif domain_block != nil && (domain_block&.reject_send_not_public_searchability || domain_block&.reject_send_unlisted_dissubscribable || elsif domain_block&.reject_send_media
domain_block&.reject_send_public_unlisted || domain_block&.reject_send_media || domain_block&.reject_send_sensitive ||
domain_block&.reject_send_sensitive)
Status.none Status.none
elsif anonymous? elsif anonymous?
account.statuses.where(visibility: %i(public unlisted public_unlisted)) account.statuses.where(visibility: %i(public unlisted public_unlisted))

View file

@ -49,7 +49,18 @@ class DomainBlock < ApplicationRecord
if suspend? if suspend?
[:suspend] [:suspend]
else else
[severity.to_sym, reject_media? ? :reject_media : nil, reject_favourite? ? :reject_favourite : nil, reject_reply? ? :reject_reply : nil, reject_reports? ? :reject_reports : nil].reject { |policy| policy == :noop || policy.nil? } [severity.to_sym,
reject_media? ? :reject_media : nil,
reject_favourite? ? :reject_favourite : nil,
reject_reply? ? :reject_reply : nil,
reject_send_not_public_searchability? ? :reject_send_not_public_searchability : nil,
reject_send_unlisted_dissubscribable? ? :reject_send_unlisted_dissubscribable : nil,
reject_send_public_unlisted? ? :reject_send_public_unlisted : nil,
reject_send_dissubscribable? ? :reject_send_dissubscribable : nil,
reject_send_media? ? :reject_send_media : nil,
reject_send_sensitive? ? :reject_send_sensitive : nil,
reject_reports? ? :reject_reports : nil
].reject { |policy| policy == :noop || policy.nil? }
end end
end end

View file

@ -493,6 +493,12 @@ ja:
reject_media: メディアを拒否する reject_media: メディアを拒否する
reject_reply: リプライを拒否 reject_reply: リプライを拒否
reject_reports: 通報を拒否 reject_reports: 通報を拒否
reject_send_dissubscribable: 購読拒否投稿配送なし
reject_send_media: メディア付き投稿配送なし
reject_send_not_public_searchability: 検索許可全て投稿配送なし
reject_send_public_unlisted: ローカル公開投稿配送なし
reject_send_sensitive: センシティブ投稿配送なし
reject_send_unlisted_dissubscribable: 購読拒否未収載投稿配送なし
silence: 制限 silence: 制限
suspend: サスペンド suspend: サスペンド
policy: ポリシー policy: ポリシー