Fix muting of embedded data (#3071)
parent
82655f2ee3
commit
a7195ccbd6
|
@ -6,6 +6,7 @@ import {
|
||||||
AppBskyFeedPost,
|
AppBskyFeedPost,
|
||||||
AppBskyRichtextFacet,
|
AppBskyRichtextFacet,
|
||||||
AppBskyEmbedImages,
|
AppBskyEmbedImages,
|
||||||
|
AppBskyEmbedExternal,
|
||||||
} from '@atproto/api'
|
} from '@atproto/api'
|
||||||
|
|
||||||
type ModeratePost = typeof moderatePost
|
type ModeratePost = typeof moderatePost
|
||||||
|
@ -205,44 +206,151 @@ export function moderatePost_wrapped(
|
||||||
|
|
||||||
if (subject.embed) {
|
if (subject.embed) {
|
||||||
let embedHidden = false
|
let embedHidden = false
|
||||||
|
let embedMuted = false
|
||||||
|
let externalMuted = false
|
||||||
|
|
||||||
if (AppBskyEmbedRecord.isViewRecord(subject.embed.record)) {
|
if (AppBskyEmbedRecord.isViewRecord(subject.embed.record)) {
|
||||||
embedHidden = hiddenPosts.includes(subject.embed.record.uri)
|
embedHidden = hiddenPosts.includes(subject.embed.record.uri)
|
||||||
|
|
||||||
if (AppBskyFeedPost.isRecord(subject.embed.record.value)) {
|
|
||||||
embedHidden =
|
|
||||||
embedHidden ||
|
|
||||||
hasMutedWord({
|
|
||||||
mutedWords,
|
|
||||||
text: subject.embed.record.value.text,
|
|
||||||
facets: subject.embed.record.value.facets,
|
|
||||||
outlineTags: subject.embed.record.value.tags,
|
|
||||||
languages: subject.embed.record.value.langs,
|
|
||||||
isOwnPost,
|
|
||||||
})
|
|
||||||
|
|
||||||
if (AppBskyEmbedImages.isMain(subject.embed.record.value.embed)) {
|
|
||||||
for (const image of subject.embed.record.value.embed.images) {
|
|
||||||
embedHidden =
|
|
||||||
embedHidden ||
|
|
||||||
hasMutedWord({
|
|
||||||
mutedWords,
|
|
||||||
text: image.alt,
|
|
||||||
facets: [],
|
|
||||||
outlineTags: [],
|
|
||||||
languages: subject.embed.record.value.langs,
|
|
||||||
isOwnPost,
|
|
||||||
})
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
if (
|
if (
|
||||||
AppBskyEmbedRecordWithMedia.isView(subject.embed) &&
|
AppBskyEmbedRecordWithMedia.isView(subject.embed) &&
|
||||||
AppBskyEmbedRecord.isViewRecord(subject.embed.record.record)
|
AppBskyEmbedRecord.isViewRecord(subject.embed.record.record)
|
||||||
) {
|
) {
|
||||||
// TODO what
|
|
||||||
embedHidden = hiddenPosts.includes(subject.embed.record.record.uri)
|
embedHidden = hiddenPosts.includes(subject.embed.record.record.uri)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (AppBskyEmbedRecord.isViewRecord(subject.embed.record)) {
|
||||||
|
if (AppBskyFeedPost.isRecord(subject.embed.record.value)) {
|
||||||
|
const embeddedPost = subject.embed.record.value
|
||||||
|
|
||||||
|
embedMuted =
|
||||||
|
embedMuted ||
|
||||||
|
hasMutedWord({
|
||||||
|
mutedWords,
|
||||||
|
text: embeddedPost.text,
|
||||||
|
facets: embeddedPost.facets,
|
||||||
|
outlineTags: embeddedPost.tags,
|
||||||
|
languages: embeddedPost.langs,
|
||||||
|
isOwnPost,
|
||||||
|
})
|
||||||
|
|
||||||
|
if (AppBskyEmbedImages.isMain(embeddedPost.embed)) {
|
||||||
|
for (const image of embeddedPost.embed.images) {
|
||||||
|
embedMuted =
|
||||||
|
embedMuted ||
|
||||||
|
hasMutedWord({
|
||||||
|
mutedWords,
|
||||||
|
text: image.alt,
|
||||||
|
facets: [],
|
||||||
|
outlineTags: [],
|
||||||
|
languages: embeddedPost.langs,
|
||||||
|
isOwnPost,
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (AppBskyEmbedExternal.isMain(embeddedPost.embed)) {
|
||||||
|
const {external} = embeddedPost.embed
|
||||||
|
|
||||||
|
embedMuted =
|
||||||
|
embedMuted ||
|
||||||
|
hasMutedWord({
|
||||||
|
mutedWords,
|
||||||
|
text: external.title + ' ' + external.description,
|
||||||
|
facets: [],
|
||||||
|
outlineTags: [],
|
||||||
|
languages: [],
|
||||||
|
isOwnPost,
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
if (AppBskyEmbedRecordWithMedia.isMain(embeddedPost.embed)) {
|
||||||
|
if (AppBskyEmbedExternal.isMain(embeddedPost.embed.media)) {
|
||||||
|
const {external} = embeddedPost.embed.media
|
||||||
|
|
||||||
|
embedMuted =
|
||||||
|
embedMuted ||
|
||||||
|
hasMutedWord({
|
||||||
|
mutedWords,
|
||||||
|
text: external.title + ' ' + external.description,
|
||||||
|
facets: [],
|
||||||
|
outlineTags: [],
|
||||||
|
languages: [],
|
||||||
|
isOwnPost,
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
if (AppBskyEmbedImages.isMain(embeddedPost.embed.media)) {
|
||||||
|
for (const image of embeddedPost.embed.media.images) {
|
||||||
|
embedMuted =
|
||||||
|
embedMuted ||
|
||||||
|
hasMutedWord({
|
||||||
|
mutedWords,
|
||||||
|
text: image.alt,
|
||||||
|
facets: [],
|
||||||
|
outlineTags: [],
|
||||||
|
languages: AppBskyFeedPost.isRecord(embeddedPost.record)
|
||||||
|
? embeddedPost.langs
|
||||||
|
: [],
|
||||||
|
isOwnPost,
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (AppBskyEmbedExternal.isView(subject.embed)) {
|
||||||
|
const {external} = subject.embed
|
||||||
|
|
||||||
|
externalMuted =
|
||||||
|
externalMuted ||
|
||||||
|
hasMutedWord({
|
||||||
|
mutedWords,
|
||||||
|
text: external.title + ' ' + external.description,
|
||||||
|
facets: [],
|
||||||
|
outlineTags: [],
|
||||||
|
languages: [],
|
||||||
|
isOwnPost,
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
if (
|
||||||
|
AppBskyEmbedRecordWithMedia.isView(subject.embed) &&
|
||||||
|
AppBskyEmbedRecord.isViewRecord(subject.embed.record.record)
|
||||||
|
) {
|
||||||
|
if (AppBskyFeedPost.isRecord(subject.embed.record.record.value)) {
|
||||||
|
const post = subject.embed.record.record.value
|
||||||
|
embedMuted =
|
||||||
|
embedMuted ||
|
||||||
|
hasMutedWord({
|
||||||
|
mutedWords,
|
||||||
|
text: post.text,
|
||||||
|
facets: post.facets,
|
||||||
|
outlineTags: post.tags,
|
||||||
|
languages: post.langs,
|
||||||
|
isOwnPost,
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
if (AppBskyEmbedImages.isView(subject.embed.media)) {
|
||||||
|
for (const image of subject.embed.media.images) {
|
||||||
|
embedMuted =
|
||||||
|
embedMuted ||
|
||||||
|
hasMutedWord({
|
||||||
|
mutedWords,
|
||||||
|
text: image.alt,
|
||||||
|
facets: [],
|
||||||
|
outlineTags: [],
|
||||||
|
languages: AppBskyFeedPost.isRecord(subject.record)
|
||||||
|
? subject.record.langs
|
||||||
|
: [],
|
||||||
|
isOwnPost,
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if (embedHidden) {
|
if (embedHidden) {
|
||||||
moderations.embed.filter = true
|
moderations.embed.filter = true
|
||||||
moderations.embed.blur = true
|
moderations.embed.blur = true
|
||||||
|
@ -254,6 +362,17 @@ export function moderatePost_wrapped(
|
||||||
priority: 1,
|
priority: 1,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
} else if (externalMuted || embedMuted) {
|
||||||
|
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: 'muted-word',
|
||||||
|
source: {type: 'user'},
|
||||||
|
priority: 1,
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue