From 36f2e966cba6cc90ba4320520da5c7381cfb8086 Mon Sep 17 00:00:00 2001 From: Paul Frazee Date: Mon, 18 Mar 2024 14:30:20 -0700 Subject: [PATCH] Fix: correctly detect blocked QPs when moderating posts (#2338) * Fix: correctly detect blocked QPs when moderating posts * Add changeset --- .changeset/quiet-papayas-accept.md | 5 +++ packages/api/src/moderation/subjects/post.ts | 34 ++++++++++++++++++++ 2 files changed, 39 insertions(+) create mode 100644 .changeset/quiet-papayas-accept.md diff --git a/.changeset/quiet-papayas-accept.md b/.changeset/quiet-papayas-accept.md new file mode 100644 index 00000000000..25212017ad7 --- /dev/null +++ b/.changeset/quiet-papayas-accept.md @@ -0,0 +1,5 @@ +--- +'@atproto/api': patch +--- + +Fix: correctly detected blocked quote-posts when moderating posts diff --git a/packages/api/src/moderation/subjects/post.ts b/packages/api/src/moderation/subjects/post.ts index 9fef4a598e8..1274a453e29 100644 --- a/packages/api/src/moderation/subjects/post.ts +++ b/packages/api/src/moderation/subjects/post.ts @@ -41,6 +41,15 @@ export function decidePost( ) { // quoted post with media embedAcc = decideQuotedPost(subject.embed.record.record, opts) + } else if (AppBskyEmbedRecord.isViewBlocked(subject.embed.record)) { + // blocked quote post + embedAcc = decideBlockedQuotedPost(subject.embed.record, opts) + } else if ( + AppBskyEmbedRecordWithMedia.isView(subject.embed) && + AppBskyEmbedRecord.isViewBlocked(subject.embed.record.record) + ) { + // blocked quoted post with media + embedAcc = decideBlockedQuotedPost(subject.embed.record.record, opts) } } @@ -71,6 +80,31 @@ function decideQuotedPost( ) } +function decideBlockedQuotedPost( + subject: AppBskyEmbedRecord.ViewBlocked, + opts: ModerationOpts, +) { + const acc = new ModerationDecision() + acc.setDid(subject.author.did) + acc.setIsMe(subject.author.did === opts.userDid) + if (subject.author.viewer?.muted) { + if (subject.author.viewer?.mutedByList) { + acc.addMutedByList(subject.author.viewer?.mutedByList) + } else { + acc.addMuted(subject.author.viewer?.muted) + } + } + if (subject.author.viewer?.blocking) { + if (subject.author.viewer?.blockingByList) { + acc.addBlockingByList(subject.author.viewer?.blockingByList) + } else { + acc.addBlocking(subject.author.viewer?.blocking) + } + } + acc.addBlockedBy(subject.author.viewer?.blockedBy) + return acc +} + function checkHiddenPost( subject: ModerationSubjectPost, hiddenPosts: string[] | undefined,