* Wip * Wip * Wip: History * Wip: テストコード作成 * Fix test * Wip * Wip * Wip * Fix test * Wip * Wip * Wip * Wip * なんとか完成、これから動作確認 * spell miss * Change ng rule timings * Fix test * Wip * Fix test * Wip * Fix form * 表示まわりの改善
This commit is contained in:
parent
0779c748a6
commit
7d96d5828e
56 changed files with 2062 additions and 42 deletions
|
@ -1,6 +1,8 @@
|
|||
# frozen_string_literal: true
|
||||
|
||||
class ActivityPub::Activity::Announce < ActivityPub::Activity
|
||||
include NgRuleHelper
|
||||
|
||||
def perform
|
||||
return reject_payload! if delete_arrived_first?(@json['id']) || !related_to_local_activity?
|
||||
|
||||
|
@ -9,6 +11,7 @@ class ActivityPub::Activity::Announce < ActivityPub::Activity
|
|||
|
||||
return reject_payload! if original_status.nil? || !announceable?(original_status)
|
||||
return if requested_through_relay?
|
||||
return unless check_invalid_reaction_for_ng_rule! @account, uri: @json['id'], reaction_type: 'reblog', recipient: original_status.account, target_status: original_status
|
||||
|
||||
@status = Status.find_by(account: @account, reblog: original_status)
|
||||
|
||||
|
|
|
@ -2,6 +2,7 @@
|
|||
|
||||
class ActivityPub::Activity::Create < ActivityPub::Activity
|
||||
include FormattingHelper
|
||||
include NgRuleHelper
|
||||
|
||||
def perform
|
||||
@account.schedule_refresh_if_stale!
|
||||
|
@ -144,7 +145,9 @@ class ActivityPub::Activity::Create < ActivityPub::Activity
|
|||
end
|
||||
|
||||
def valid_status?
|
||||
valid = !Admin::NgWord.reject?("#{@params[:spoiler_text]}\n#{@params[:text]}", uri: @params[:uri], target_type: :status, public: @status_parser.distributable_visibility?)
|
||||
valid = true
|
||||
valid = false if valid && !valid_status_for_ng_rule?
|
||||
valid = !Admin::NgWord.reject?("#{@params[:spoiler_text]}\n#{@params[:text]}", uri: @params[:uri], target_type: :status, public: @status_parser.distributable_visibility?) if valid
|
||||
valid = !Admin::NgWord.hashtag_reject?(@tags.size, uri: @params[:uri], target_type: :status, public: @status_parser.distributable_visibility?, text: "#{@params[:spoiler_text]}\n#{@params[:text]}") if valid
|
||||
valid = !Admin::NgWord.mention_reject?(@raw_mention_uris.size, uri: @params[:uri], target_type: :status, public: @status_parser.distributable_visibility?, text: "#{@params[:spoiler_text]}\n#{@params[:text]}") if valid
|
||||
valid = !Admin::NgWord.stranger_mention_reject_with_count?(@raw_mention_uris.size, uri: @params[:uri], target_type: :status, public: @status_parser.distributable_visibility?, text: "#{@params[:spoiler_text]}\n#{@params[:text]}") if valid && (mention_to_local_stranger? || reference_to_local_stranger?)
|
||||
|
@ -154,6 +157,26 @@ class ActivityPub::Activity::Create < ActivityPub::Activity
|
|||
valid
|
||||
end
|
||||
|
||||
def valid_status_for_ng_rule?
|
||||
check_invalid_status_for_ng_rule! @account,
|
||||
reaction_type: 'create',
|
||||
uri: @params[:uri],
|
||||
url: @params[:url],
|
||||
spoiler_text: @params[:spoiler_text],
|
||||
text: @params[:text],
|
||||
tag_names: @tags.map(&:name),
|
||||
visibility: @params[:visibility].to_s,
|
||||
searchability: @params[:searchability]&.to_s,
|
||||
sensitive: @params[:sensitive],
|
||||
media_count: @params[:media_attachment_ids]&.size,
|
||||
poll_count: @params[:poll]&.options&.size || 0,
|
||||
quote: quote,
|
||||
reply: in_reply_to_uri.present?,
|
||||
mention_count: mentioned_accounts.count,
|
||||
reference_count: reference_uris.size,
|
||||
mention_to_following: !(mention_to_local_stranger? || reference_to_local_stranger?)
|
||||
end
|
||||
|
||||
def accounts_in_audience
|
||||
return @accounts_in_audience if @accounts_in_audience
|
||||
|
||||
|
@ -353,6 +376,8 @@ class ActivityPub::Activity::Create < ActivityPub::Activity
|
|||
def poll_vote?
|
||||
return false if replied_to_status.nil? || replied_to_status.preloadable_poll.nil? || !replied_to_status.local? || !replied_to_status.preloadable_poll.options.include?(@object['name'])
|
||||
|
||||
return true unless check_invalid_reaction_for_ng_rule! @account, uri: @json['id'], reaction_type: 'vote', recipient: replied_to_status.account, target_status: replied_to_status
|
||||
|
||||
poll_vote! unless replied_to_status.preloadable_poll.expired?
|
||||
|
||||
true
|
||||
|
@ -552,7 +577,7 @@ class ActivityPub::Activity::Create < ActivityPub::Activity
|
|||
return @reference_uris if defined?(@reference_uris)
|
||||
|
||||
@reference_uris = @object['references'].nil? ? [] : (ActivityPub::FetchReferencesService.new.call(@account, @object['references']) || []).uniq
|
||||
@reference_uris += ProcessReferencesService.extract_uris(@object['content'] || '')
|
||||
@reference_uris += ProcessReferencesService.extract_uris(@object['content'] || '', remote: true)
|
||||
end
|
||||
|
||||
def local_referred_accounts
|
||||
|
|
|
@ -3,6 +3,7 @@
|
|||
class ActivityPub::Activity::Follow < ActivityPub::Activity
|
||||
include Payloadable
|
||||
include FollowHelper
|
||||
include NgRuleHelper
|
||||
|
||||
def perform
|
||||
return request_follow_for_friend if friend_follow?
|
||||
|
@ -10,6 +11,7 @@ class ActivityPub::Activity::Follow < ActivityPub::Activity
|
|||
target_account = account_from_uri(object_uri)
|
||||
|
||||
return if target_account.nil? || !target_account.local? || delete_arrived_first?(@json['id'])
|
||||
return unless check_invalid_reaction_for_ng_rule! @account, uri: @json['id'], reaction_type: 'follow', recipient: target_account
|
||||
|
||||
# Update id of already-existing follow requests
|
||||
existing_follow_request = ::FollowRequest.find_by(account: @account, target_account: target_account) || PendingFollowRequest.find_by(account: @account, target_account: target_account)
|
||||
|
|
|
@ -4,6 +4,7 @@ class ActivityPub::Activity::Like < ActivityPub::Activity
|
|||
include Redisable
|
||||
include Lockable
|
||||
include JsonLdHelper
|
||||
include NgRuleHelper
|
||||
|
||||
def perform
|
||||
@original_status = status_from_uri(object_uri)
|
||||
|
@ -25,6 +26,7 @@ class ActivityPub::Activity::Like < ActivityPub::Activity
|
|||
|
||||
def process_favourite
|
||||
return if @account.favourited?(@original_status)
|
||||
return unless check_invalid_reaction_for_ng_rule! @account, uri: @json['id'], reaction_type: 'favourite', recipient: @original_status.account, target_status: @original_status
|
||||
|
||||
favourite = @original_status.favourites.create!(account: @account, uri: @json['id'])
|
||||
|
||||
|
@ -43,6 +45,8 @@ class ActivityPub::Activity::Like < ActivityPub::Activity
|
|||
return if emoji.nil?
|
||||
end
|
||||
|
||||
return unless check_invalid_reaction_for_ng_rule! @account, uri: @json['id'], reaction_type: 'emoji_reaction', emoji_reaction_name: emoji&.shortcode || shortcode, emoji_reaction_origin_domain: emoji&.domain, recipient: @original_status.account, target_status: @original_status
|
||||
|
||||
reaction = nil
|
||||
|
||||
with_redis_lock("emoji_reaction:#{@original_status.id}") do
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue