diff options
author | nightpool <nightpool@cybre.space> | 2019-06-15 11:46:08 -0400 |
---|---|---|
committer | chr <chr@cybre.space> | 2021-03-01 21:43:23 -0800 |
commit | 5792d4daf50549ed84e139b8abce4680322ac6d7 (patch) | |
tree | d6ac193126a5e3a93f59023a0579750007e66bca | |
parent | 4f9f95d38f997c2b139c5310e824847fe102adb5 (diff) |
don't send spammy mentions
-rw-r--r-- | app/lib/activitypub/activity.rb | 7 | ||||
-rw-r--r-- | app/models/status.rb | 8 |
2 files changed, 14 insertions, 1 deletions
diff --git a/app/lib/activitypub/activity.rb b/app/lib/activitypub/activity.rb index 2b5d3ffc2..85a3370ee 100644 --- a/app/lib/activitypub/activity.rb +++ b/app/lib/activitypub/activity.rb @@ -98,7 +98,7 @@ class ActivityPub::Activity crawl_links(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. # 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) end + def spammy_mentions?(status) + status.has_non_mention_links? && + @account.followers.local.count == 0 + end + def notify_about_reblog(status) NotifyService.new.call(status.reblog.account, :reblog, status) end diff --git a/app/models/status.rb b/app/models/status.rb index b426f9d5b..5716b93d4 100644 --- a/app/models/status.rb +++ b/app/models/status.rb @@ -351,6 +351,14 @@ class Status < ApplicationRecord super || build_status_stat 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 def update_status_stat!(attrs) |