don't send spammy mentions

This commit is contained in:
nightpool 2019-06-15 11:46:08 -04:00 committed by chr
parent 4f9f95d38f
commit 5792d4daf5
2 changed files with 14 additions and 1 deletions

View File

@ -98,7 +98,7 @@ class ActivityPub::Activity
crawl_links(status) crawl_links(status)
notify_about_reblog(status) if reblog_of_local_account?(status) && !reblog_by_following_group_account?(status) notify_about_reblog(status) if reblog_of_local_account?(status) && !reblog_by_following_group_account?(status)
notify_about_mentions(status) notify_about_mentions(status) unless spammy_mentions?(status)
# Only continue if the status is supposed to have arrived in real-time. # Only continue if the status is supposed to have arrived in real-time.
# Note that if @options[:override_timestamps] isn't set, the status # Note that if @options[:override_timestamps] isn't set, the status
@ -117,6 +117,11 @@ class ActivityPub::Activity
status.reblog? && status.account.group? && status.reblog.account.following?(status.account) status.reblog? && status.account.group? && status.reblog.account.following?(status.account)
end end
def spammy_mentions?(status)
status.has_non_mention_links? &&
@account.followers.local.count == 0
end
def notify_about_reblog(status) def notify_about_reblog(status)
NotifyService.new.call(status.reblog.account, :reblog, status) NotifyService.new.call(status.reblog.account, :reblog, status)
end end

View File

@ -351,6 +351,14 @@ class Status < ApplicationRecord
super || build_status_stat super || build_status_stat
end end
def has_non_mention_links?
if local?
text.match? %r{https?://\w}
else
Nokogiri::HTML.fragment(text).css('a:not(.mention)').present?
end
end
private private
def update_status_stat!(attrs) def update_status_stat!(attrs)