Fix: #703 NGワード、センシティブワード「無関係なフォロワーへのメンション」が、自分自身へのメンションにも適用される (#704)

This commit is contained in:
KMY(雪あすか) 2024-04-09 09:02:50 +09:00 committed by KMY
parent 13e5eed811
commit e53c6b13eb
4 changed files with 35 additions and 6 deletions

View file

@ -186,6 +186,10 @@ module Account::Interactions
active_relationships.exists?(target_account: other_account)
end
def following_or_self?(other_account)
id == other_account.id || following?(other_account)
end
def following_anyone?
active_relationships.exists?
end

View file

@ -248,12 +248,12 @@ class PostStatusService < BaseService
def mention_to_stranger?
return @mention_to_stranger if defined?(@mention_to_stranger)
@mention_to_stranger = @status.mentions.map(&:account).to_a.any? { |mentioned_account| mentioned_account.id != @account.id && !mentioned_account.following?(@account) } ||
(@in_reply_to && @in_reply_to.account.id != @account.id && !@in_reply_to.account.following?(@account))
@mention_to_stranger = @status.mentions.map(&:account).to_a.any? { |mentioned_account| !mentioned_account.following_or_self?(@account) } ||
(@in_reply_to && !@in_reply_to.account.following_or_self?(@account))
end
def reference_to_stranger?
referred_statuses.any? { |status| !status.account.following?(@account) }
referred_statuses.any? { |status| !status.account.following_or_self?(@account) }
end
def referred_statuses

View file

@ -123,12 +123,12 @@ class UpdateStatusService < BaseService
end
def mention_to_stranger?
@status.mentions.map(&:account).to_a.any? { |mentioned_account| mentioned_account.id != @status.account.id && !mentioned_account.following?(@status.account) } ||
(@status.thread.present? && @status.thread.account.id != @status.account.id && !@status.thread.account.following?(@status.account))
@status.mentions.map(&:account).to_a.any? { |mentioned_account| !mentioned_account.following_or_self?(@status.account) } ||
(@status.thread.present? && !@status.thread.account.following_or_self?(@status.account))
end
def reference_to_stranger?
referred_statuses.any? { |status| !status.account.following?(@status.account) }
referred_statuses.any? { |status| !status.account.following_or_self?(@status.account) }
end
def referred_statuses

View file

@ -663,6 +663,18 @@ RSpec.describe PostStatusService, type: :service do
expect(status.text).to eq text
end
it 'does not hit ng words for mention to self' do
account = Fabricate(:account, username: 'cool', domain: nil)
text = 'ng word test @cool'
Form::AdminSettings.new(stranger_mention_from_local_ng: '1').save
Fabricate(:ng_word, keyword: 'test', stranger: true)
status = subject.call(account, text: text)
expect(status).to be_persisted
expect(status.text).to eq text
end
it 'hit ng words for reply' do
account = Fabricate(:account)
text = 'ng word test'
@ -721,6 +733,19 @@ RSpec.describe PostStatusService, type: :service do
expect(status.text).to eq text
end
it 'does not hit ng words for reference to self' do
target_status = Fabricate(:status)
account = target_status.account
text = "ng word test BT: #{ActivityPub::TagManager.instance.uri_for(target_status)}"
Form::AdminSettings.new(stranger_mention_from_local_ng: '1').save
Fabricate(:ng_word, keyword: 'test', stranger: true)
status = subject.call(account, text: text)
expect(status).to be_persisted
expect(status.text).to eq text
end
it 'using hashtag under limit' do
account = Fabricate(:account)
text = '#a #b'