ForceMentionsInContent: fix double mentions for Mastodon/Misskey posts

The code checked for duplicates using "ap_id", but in Mastodon and Misskey the look like that:
Mastodon: https://mastodon.example.com/users/roger
Misskey: https:///misskey.example.com/users/104ab42f11

The fix is to also check for "uri", which is what will be in the "explicitly_mentioned_uris" list:
Mastodon: https://mastodon.example.com/@roger
Misskey: https://misskey.example.com/@roger
This commit is contained in:
Zero 2023-05-25 12:36:05 -04:00
commit 279fd47b48
3 changed files with 55 additions and 3 deletions

View file

@ -1,5 +1,5 @@
# Pleroma: A lightweight social networking server
# Copyright © 2017-2022 Pleroma Authors <https://pleroma.social/>
# Copyright © 2017-2023 Pleroma Authors <https://pleroma.social/>
# SPDX-License-Identifier: AGPL-3.0-only
defmodule Pleroma.Web.ActivityPub.MRF.ForceMentionsInContent do
@ -98,8 +98,8 @@ defmodule Pleroma.Web.ActivityPub.MRF.ForceMentionsInContent do
explicitly_mentioned_uris = extract_mention_uris_from_content(content)
added_mentions =
Enum.reduce(mention_users, "", fn %User{ap_id: uri} = user, acc ->
unless uri in explicitly_mentioned_uris do
Enum.reduce(mention_users, "", fn %User{ap_id: api_id, uri: uri} = user, acc ->
unless Enum.any?([api_id, uri], fn u -> u in explicitly_mentioned_uris end) do
acc <> Formatter.mention_from_user(user, %{mentions_format: :compact}) <> " "
else
acc