diff options
Diffstat (limited to 'src/lib/moderatePost_wrapped.ts')
-rw-r--r-- | src/lib/moderatePost_wrapped.ts | 58 |
1 files changed, 58 insertions, 0 deletions
diff --git a/src/lib/moderatePost_wrapped.ts b/src/lib/moderatePost_wrapped.ts new file mode 100644 index 000000000..2195b2304 --- /dev/null +++ b/src/lib/moderatePost_wrapped.ts @@ -0,0 +1,58 @@ +import { + AppBskyEmbedRecord, + AppBskyEmbedRecordWithMedia, + moderatePost, +} from '@atproto/api' + +type ModeratePost = typeof moderatePost +type Options = Parameters<ModeratePost>[1] & { + hiddenPosts?: string[] +} + +export function moderatePost_wrapped( + subject: Parameters<ModeratePost>[0], + opts: Options, +) { + const {hiddenPosts = [], ...options} = opts + const moderations = moderatePost(subject, options) + + if (hiddenPosts.includes(subject.uri)) { + moderations.content.filter = true + moderations.content.blur = true + if (!moderations.content.cause) { + moderations.content.cause = { + // @ts-ignore Temporary extension to the moderation system -prf + type: 'post-hidden', + source: {type: 'user'}, + priority: 1, + } + } + } + + if (subject.embed) { + let embedHidden = false + if (AppBskyEmbedRecord.isViewRecord(subject.embed.record)) { + embedHidden = hiddenPosts.includes(subject.embed.record.uri) + } + if ( + AppBskyEmbedRecordWithMedia.isView(subject.embed) && + AppBskyEmbedRecord.isViewRecord(subject.embed.record.record) + ) { + embedHidden = hiddenPosts.includes(subject.embed.record.record.uri) + } + if (embedHidden) { + moderations.embed.filter = true + moderations.embed.blur = true + if (!moderations.embed.cause) { + moderations.embed.cause = { + // @ts-ignore Temporary extension to the moderation system -prf + type: 'post-hidden', + source: {type: 'user'}, + priority: 1, + } + } + } + } + + return moderations +} |