Bluesky app fork with some witchin' additions 💫
0
fork

Configure Feed

Select the types of activity you want to include in your feed.

Fix muting of embedded data (#3071)

authored by

Eric Bailey and committed by
GitHub
a7195ccb 82655f2e

+132 -13
+132 -13
src/lib/moderatePost_wrapped.ts
··· 6 6 AppBskyFeedPost, 7 7 AppBskyRichtextFacet, 8 8 AppBskyEmbedImages, 9 + AppBskyEmbedExternal, 9 10 } from '@atproto/api' 10 11 11 12 type ModeratePost = typeof moderatePost ··· 205 206 206 207 if (subject.embed) { 207 208 let embedHidden = false 209 + let embedMuted = false 210 + let externalMuted = false 211 + 208 212 if (AppBskyEmbedRecord.isViewRecord(subject.embed.record)) { 209 213 embedHidden = hiddenPosts.includes(subject.embed.record.uri) 214 + } 215 + if ( 216 + AppBskyEmbedRecordWithMedia.isView(subject.embed) && 217 + AppBskyEmbedRecord.isViewRecord(subject.embed.record.record) 218 + ) { 219 + embedHidden = hiddenPosts.includes(subject.embed.record.record.uri) 220 + } 210 221 222 + if (AppBskyEmbedRecord.isViewRecord(subject.embed.record)) { 211 223 if (AppBskyFeedPost.isRecord(subject.embed.record.value)) { 212 - embedHidden = 213 - embedHidden || 224 + const embeddedPost = subject.embed.record.value 225 + 226 + embedMuted = 227 + embedMuted || 214 228 hasMutedWord({ 215 229 mutedWords, 216 - text: subject.embed.record.value.text, 217 - facets: subject.embed.record.value.facets, 218 - outlineTags: subject.embed.record.value.tags, 219 - languages: subject.embed.record.value.langs, 230 + text: embeddedPost.text, 231 + facets: embeddedPost.facets, 232 + outlineTags: embeddedPost.tags, 233 + languages: embeddedPost.langs, 220 234 isOwnPost, 221 235 }) 222 236 223 - if (AppBskyEmbedImages.isMain(subject.embed.record.value.embed)) { 224 - for (const image of subject.embed.record.value.embed.images) { 225 - embedHidden = 226 - embedHidden || 237 + if (AppBskyEmbedImages.isMain(embeddedPost.embed)) { 238 + for (const image of embeddedPost.embed.images) { 239 + embedMuted = 240 + embedMuted || 227 241 hasMutedWord({ 228 242 mutedWords, 229 243 text: image.alt, 230 244 facets: [], 231 245 outlineTags: [], 232 - languages: subject.embed.record.value.langs, 246 + languages: embeddedPost.langs, 233 247 isOwnPost, 234 248 }) 235 249 } 236 250 } 251 + 252 + if (AppBskyEmbedExternal.isMain(embeddedPost.embed)) { 253 + const {external} = embeddedPost.embed 254 + 255 + embedMuted = 256 + embedMuted || 257 + hasMutedWord({ 258 + mutedWords, 259 + text: external.title + ' ' + external.description, 260 + facets: [], 261 + outlineTags: [], 262 + languages: [], 263 + isOwnPost, 264 + }) 265 + } 266 + 267 + if (AppBskyEmbedRecordWithMedia.isMain(embeddedPost.embed)) { 268 + if (AppBskyEmbedExternal.isMain(embeddedPost.embed.media)) { 269 + const {external} = embeddedPost.embed.media 270 + 271 + embedMuted = 272 + embedMuted || 273 + hasMutedWord({ 274 + mutedWords, 275 + text: external.title + ' ' + external.description, 276 + facets: [], 277 + outlineTags: [], 278 + languages: [], 279 + isOwnPost, 280 + }) 281 + } 282 + 283 + if (AppBskyEmbedImages.isMain(embeddedPost.embed.media)) { 284 + for (const image of embeddedPost.embed.media.images) { 285 + embedMuted = 286 + embedMuted || 287 + hasMutedWord({ 288 + mutedWords, 289 + text: image.alt, 290 + facets: [], 291 + outlineTags: [], 292 + languages: AppBskyFeedPost.isRecord(embeddedPost.record) 293 + ? embeddedPost.langs 294 + : [], 295 + isOwnPost, 296 + }) 297 + } 298 + } 299 + } 237 300 } 238 301 } 302 + 303 + if (AppBskyEmbedExternal.isView(subject.embed)) { 304 + const {external} = subject.embed 305 + 306 + externalMuted = 307 + externalMuted || 308 + hasMutedWord({ 309 + mutedWords, 310 + text: external.title + ' ' + external.description, 311 + facets: [], 312 + outlineTags: [], 313 + languages: [], 314 + isOwnPost, 315 + }) 316 + } 317 + 239 318 if ( 240 319 AppBskyEmbedRecordWithMedia.isView(subject.embed) && 241 320 AppBskyEmbedRecord.isViewRecord(subject.embed.record.record) 242 321 ) { 243 - // TODO what 244 - embedHidden = hiddenPosts.includes(subject.embed.record.record.uri) 322 + if (AppBskyFeedPost.isRecord(subject.embed.record.record.value)) { 323 + const post = subject.embed.record.record.value 324 + embedMuted = 325 + embedMuted || 326 + hasMutedWord({ 327 + mutedWords, 328 + text: post.text, 329 + facets: post.facets, 330 + outlineTags: post.tags, 331 + languages: post.langs, 332 + isOwnPost, 333 + }) 334 + } 335 + 336 + if (AppBskyEmbedImages.isView(subject.embed.media)) { 337 + for (const image of subject.embed.media.images) { 338 + embedMuted = 339 + embedMuted || 340 + hasMutedWord({ 341 + mutedWords, 342 + text: image.alt, 343 + facets: [], 344 + outlineTags: [], 345 + languages: AppBskyFeedPost.isRecord(subject.record) 346 + ? subject.record.langs 347 + : [], 348 + isOwnPost, 349 + }) 350 + } 351 + } 245 352 } 353 + 246 354 if (embedHidden) { 247 355 moderations.embed.filter = true 248 356 moderations.embed.blur = true ··· 250 358 moderations.embed.cause = { 251 359 // @ts-ignore Temporary extension to the moderation system -prf 252 360 type: 'post-hidden', 361 + source: {type: 'user'}, 362 + priority: 1, 363 + } 364 + } 365 + } else if (externalMuted || embedMuted) { 366 + moderations.content.filter = true 367 + moderations.content.blur = true 368 + if (!moderations.content.cause) { 369 + moderations.content.cause = { 370 + // @ts-ignore Temporary extension to the moderation system -prf 371 + type: 'muted-word', 253 372 source: {type: 'user'}, 254 373 priority: 1, 255 374 }