Add follow_requests_outstanding_since?/3 to Pleroma.Activity
[akkoma] / lib / pleroma / web / activity_pub / mrf / follow_bot_policy.ex
index 044febe0c0b107b5dc9ac38a87e99148e3502300..441ce553e85a7d7fe3a6c3b7a28dad7450dd646a 100644 (file)
@@ -38,6 +38,7 @@ defmodule Pleroma.Web.ActivityPub.MRF.FollowBotPolicy do
 
       Enum.concat([to, cc, actor])
       |> List.flatten()
+      |> Enum.uniq()
       |> User.get_all_by_ap_id()
       |> Enum.each(fn user ->
         since_thirty_days_ago = NaiveDateTime.utc_now() |> NaiveDateTime.add(-(86_400 * 30))
@@ -46,7 +47,10 @@ defmodule Pleroma.Web.ActivityPub.MRF.FollowBotPolicy do
              false <- User.locked?(user),
              false <- (user.bio || "") |> String.downcase() |> String.contains?("nobot"),
              false <- outstanding_follow_request_since?(follower, user, since_thirty_days_ago) do
-          Logger.info("#{__MODULE__}: Follow request from #{follower.nickname} to #{user.nickname}")
+          Logger.info(
+            "#{__MODULE__}: Follow request from #{follower.nickname} to #{user.nickname}"
+          )
+
           CommonAPI.follow(follower, user)
         end
       end)
@@ -64,7 +68,7 @@ defmodule Pleroma.Web.ActivityPub.MRF.FollowBotPolicy do
     |> Queries.by_object_id()
     |> Queries.by_type("Follow")
     |> where([a], a.inserted_at > ^since_datetime)
-    |> where([a], fragment("? ->> 'state' = 'pending'", a.data))
+    |> where([a], fragment("? ->> 'state' != 'accept'", a.data))
     |> where([a], a.actor == ^follower_id)
     |> Repo.exists?()
   end