A better Rust ATProto crate

moderation in reasonably generic but not horrid to use way

+11653
+4
crates/jacquard/src/lib.rs
··· 227 227 /// Rich text utilities for Bluesky posts 228 228 pub mod richtext; 229 229 230 + #[cfg(feature = "api")] 231 + /// Moderation decision making for labeled content 232 + pub mod moderation; 233 + 230 234 pub use common::*; 231 235 #[cfg(feature = "api")] 232 236 pub use jacquard_api as api;
+46
crates/jacquard/src/moderation.rs
··· 1 + //! Moderation decision making for AT Protocol content 2 + //! 3 + //! This module provides protocol-agnostic moderation logic for applying label-based 4 + //! content filtering. It takes labels from various sources (labeler services, self-labels) 5 + //! and user preferences to produce moderation decisions. 6 + //! 7 + //! # Core Concepts 8 + //! 9 + //! - **Labels**: Metadata tags applied to content by labelers or authors (see [`Label`](jacquard_api::com_atproto::label::Label)) 10 + //! - **Preferences**: User-configured responses to specific label values (hide, warn, ignore) 11 + //! - **Definitions**: Labeler-provided metadata about what labels mean and how they should be displayed 12 + //! - **Decisions**: The output of moderation logic indicating what actions to take 13 + //! 14 + //! # Example 15 + //! 16 + //! ```ignore 17 + //! # use jacquard::moderation::*; 18 + //! # use jacquard_api::app_bsky::feed::PostView; 19 + //! # fn example(post: &PostView<'_>, prefs: &ModerationPrefs<'_>, defs: &LabelerDefs<'_>) { 20 + //! let decision = moderate(post, prefs, defs, &[]); 21 + //! if decision.filter { 22 + //! // hide the post 23 + //! } else if decision.blur != Blur::None { 24 + //! // show with blur 25 + //! } 26 + //! # } 27 + //! ``` 28 + 29 + mod decision; 30 + #[cfg(feature = "api_bluesky")] 31 + mod fetch; 32 + mod labeled; 33 + mod moderatable; 34 + mod types; 35 + 36 + #[cfg(test)] 37 + mod tests; 38 + 39 + pub use decision::{ModerationIterExt, moderate, moderate_all}; 40 + #[cfg(feature = "api_bluesky")] 41 + pub use fetch::fetch_labeler_defs; 42 + pub use labeled::Labeled; 43 + pub use moderatable::Moderateable; 44 + pub use types::{ 45 + Blur, LabelCause, LabelPref, LabelTarget, LabelerDefs, ModerationDecision, ModerationPrefs, 46 + };
+370
crates/jacquard/src/moderation/decision.rs
··· 1 + use super::{ 2 + Blur, LabelCause, LabelPref, LabelTarget, Labeled, LabelerDefs, ModerationDecision, 3 + ModerationPrefs, 4 + }; 5 + use jacquard_api::com_atproto::label::{Label, LabelValue}; 6 + use jacquard_common::IntoStatic; 7 + use jacquard_common::types::string::{Datetime, Did}; 8 + 9 + /// Apply moderation logic to a single piece of content 10 + /// 11 + /// Takes the content, user preferences, labeler definitions, and list of accepted labelers, 12 + /// and produces a moderation decision indicating what actions to take. 13 + /// 14 + /// # Arguments 15 + /// 16 + /// * `item` - The content to moderate 17 + /// * `prefs` - User's moderation preferences 18 + /// * `defs` - Labeler definitions describing what labels mean 19 + /// * `accepted_labelers` - Which labelers to trust (usually from CallOptions) 20 + /// 21 + /// # Example 22 + /// 23 + /// ```ignore 24 + /// # use jacquard::moderation::*; 25 + /// # use jacquard_api::app_bsky::feed::PostView; 26 + /// # fn example(post: &PostView<'_>, prefs: &ModerationPrefs<'_>, defs: &LabelerDefs<'_>) { 27 + /// let decision = moderate(post, prefs, defs, &[]); 28 + /// if decision.filter { 29 + /// println!("This post should be hidden"); 30 + /// } 31 + /// # } 32 + /// ``` 33 + pub fn moderate<'a, T: Labeled<'a>>( 34 + item: &'a T, 35 + prefs: &ModerationPrefs<'_>, 36 + defs: &LabelerDefs<'_>, 37 + accepted_labelers: &[Did<'_>], 38 + ) -> ModerationDecision { 39 + let mut decision = ModerationDecision::none(); 40 + let now = Datetime::now(); 41 + 42 + // Process labels from labeler services 43 + for label in item.labels() { 44 + // Skip expired labels 45 + if let Some(exp) = &label.exp { 46 + if exp <= &now { 47 + continue; 48 + } 49 + } 50 + 51 + // Skip labels from untrusted labelers (if acceptance list is provided) 52 + if !accepted_labelers.is_empty() && !accepted_labelers.contains(&label.src) { 53 + continue; 54 + } 55 + 56 + // Handle negation labels (remove previous causes) 57 + if label.neg.unwrap_or(false) { 58 + decision.causes.retain(|cause| { 59 + !(cause.label.as_str() == label.val.as_ref() && cause.source == label.src) 60 + }); 61 + continue; 62 + } 63 + 64 + apply_label(label, prefs, defs, &mut decision); 65 + } 66 + 67 + // Process self-labels 68 + if let Some(self_labels) = item.self_labels() { 69 + for self_label in self_labels.values { 70 + // Self-labels don't have a source DID, so we'll use a placeholder approach 71 + // In practice, self-labels are usually just used for adult content marking 72 + 73 + // Check user preference for this label 74 + let pref = prefs 75 + .labels 76 + .iter() 77 + .find(|(k, _)| k.as_ref() == self_label.val.as_ref()) 78 + .map(|(_, v)| v); 79 + 80 + // For self-labels, we generally respect them as warnings/info 81 + // unless user has explicitly set a preference 82 + match pref { 83 + Some(LabelPref::Hide) => { 84 + decision.filter = true; 85 + } 86 + Some(LabelPref::Warn) | None => { 87 + // Default to warning for self-labels 88 + if decision.blur == Blur::None { 89 + decision.blur = Blur::Content; 90 + } 91 + decision.inform = true; 92 + } 93 + Some(LabelPref::Ignore) => { 94 + // User chose to ignore 95 + } 96 + } 97 + } 98 + } 99 + 100 + decision 101 + } 102 + 103 + /// Apply a single label to a moderation decision 104 + fn apply_label( 105 + label: &Label<'_>, 106 + prefs: &ModerationPrefs<'_>, 107 + defs: &LabelerDefs<'_>, 108 + decision: &mut ModerationDecision, 109 + ) { 110 + let label_val = label.val.as_ref(); 111 + 112 + // Get user preference (per-labeler override first, then global) 113 + let pref = prefs 114 + .labelers 115 + .get(&label.src) 116 + .and_then(|labeler_prefs| { 117 + labeler_prefs 118 + .iter() 119 + .find(|(k, _)| k.as_ref() == label_val) 120 + .map(|(_, v)| v) 121 + }) 122 + .or_else(|| { 123 + prefs 124 + .labels 125 + .iter() 126 + .find(|(k, _)| k.as_ref() == label_val) 127 + .map(|(_, v)| v) 128 + }); 129 + 130 + // Get label definition from the labeler 131 + let def = defs.find_def(&label.src, label_val); 132 + 133 + // Check if this is an adult-only label and adult content is disabled 134 + if let Some(def) = def { 135 + if def.adult_only.unwrap_or(false) && !prefs.adult_content_enabled { 136 + decision.filter = true; 137 + decision.no_override = true; 138 + decision.causes.push(LabelCause { 139 + label: LabelValue::from(label_val).into_static(), 140 + source: label.src.clone().into_static(), 141 + target: determine_target(label), 142 + }); 143 + return; 144 + } 145 + } 146 + 147 + // Apply based on preference or default 148 + match pref.copied() { 149 + Some(LabelPref::Hide) => { 150 + decision.filter = true; 151 + decision.causes.push(LabelCause { 152 + label: LabelValue::from(label_val).into_static(), 153 + source: label.src.clone().into_static(), 154 + target: determine_target(label), 155 + }); 156 + } 157 + Some(LabelPref::Warn) => { 158 + apply_warning(label, def, decision); 159 + } 160 + Some(LabelPref::Ignore) => { 161 + // User chose to ignore this label 162 + } 163 + None => { 164 + // No user preference - use default from definition or built-in defaults 165 + apply_default(label, def, decision); 166 + } 167 + } 168 + } 169 + 170 + /// Apply warning-level moderation based on label definition 171 + fn apply_warning( 172 + label: &Label<'_>, 173 + def: Option<&jacquard_api::com_atproto::label::LabelValueDefinition<'_>>, 174 + decision: &mut ModerationDecision, 175 + ) { 176 + let label_val = label.val.as_ref(); 177 + 178 + // Determine blur type from definition 179 + let blur = if let Some(def) = def { 180 + match def.blurs.as_ref() { 181 + "content" => Blur::Content, 182 + "media" => Blur::Media, 183 + _ => Blur::None, 184 + } 185 + } else { 186 + // Built-in defaults for known labels 187 + match label_val { 188 + "porn" | "sexual" | "nudity" | "nsfl" | "gore" => Blur::Media, 189 + _ => Blur::Content, 190 + } 191 + }; 192 + 193 + // Apply blur (keep strongest blur if multiple labels) 194 + decision.blur = match (decision.blur, blur) { 195 + (Blur::Content, _) | (_, Blur::Content) => Blur::Content, 196 + (Blur::Media, _) | (_, Blur::Media) => Blur::Media, 197 + _ => Blur::None, 198 + }; 199 + 200 + // Determine severity for alert vs inform 201 + if let Some(def) = def { 202 + match def.severity.as_ref() { 203 + "alert" => decision.alert = true, 204 + "inform" => decision.inform = true, 205 + _ => {} 206 + } 207 + } else { 208 + // Default to alert for warnings 209 + decision.alert = true; 210 + } 211 + 212 + decision.causes.push(LabelCause { 213 + label: LabelValue::from(label_val).into_static(), 214 + source: label.src.clone().into_static(), 215 + target: determine_target(label), 216 + }); 217 + } 218 + 219 + /// Apply default moderation when user has no preference 220 + fn apply_default( 221 + label: &Label<'_>, 222 + def: Option<&jacquard_api::com_atproto::label::LabelValueDefinition<'_>>, 223 + decision: &mut ModerationDecision, 224 + ) { 225 + let label_val = label.val.as_ref(); 226 + 227 + // Check if definition has a default setting 228 + if let Some(def) = def { 229 + if let Some(default_setting) = &def.default_setting { 230 + match default_setting.as_ref() { 231 + "hide" => { 232 + decision.filter = true; 233 + decision.causes.push(LabelCause { 234 + label: LabelValue::from(label_val).into_static(), 235 + source: label.src.clone().into_static(), 236 + target: determine_target(label), 237 + }); 238 + return; 239 + } 240 + "warn" => { 241 + apply_warning(label, Some(def), decision); 242 + return; 243 + } 244 + "ignore" => return, 245 + _ => {} 246 + } 247 + } 248 + } 249 + 250 + // Built-in defaults for system labels (starting with !) 251 + if label_val.starts_with('!') { 252 + match label_val { 253 + "!hide" => { 254 + decision.filter = true; 255 + decision.no_override = true; 256 + decision.causes.push(LabelCause { 257 + label: LabelValue::from(label_val).into_static(), 258 + source: label.src.clone().into_static(), 259 + target: determine_target(label), 260 + }); 261 + } 262 + "!warn" => { 263 + apply_warning(label, def, decision); 264 + } 265 + "!no-unauthenticated" => { 266 + // This should be handled by auth layer, but we can note it 267 + decision.inform = true; 268 + } 269 + _ => {} 270 + } 271 + } else { 272 + // Built-in defaults for known content labels 273 + match label_val { 274 + "porn" | "nsfl" => { 275 + decision.filter = true; 276 + decision.causes.push(LabelCause { 277 + label: LabelValue::from(label_val).into_static(), 278 + source: label.src.clone().into_static(), 279 + target: determine_target(label), 280 + }); 281 + } 282 + "sexual" | "nudity" | "gore" => { 283 + apply_warning(label, def, decision); 284 + } 285 + _ => { 286 + // Unknown label - default to informational 287 + decision.inform = true; 288 + decision.causes.push(LabelCause { 289 + label: LabelValue::from(label_val).into_static(), 290 + source: label.src.clone().into_static(), 291 + target: determine_target(label), 292 + }); 293 + } 294 + } 295 + } 296 + } 297 + 298 + /// Determine whether a label targets an account or content 299 + fn determine_target(label: &Label<'_>) -> LabelTarget { 300 + // Try to parse as a DID - this handles both: 301 + // - Bare DIDs: did:plc:xyz 302 + // - at:// URIs with only DID authority: at://did:plc:xyz 303 + // If it parses successfully, it's account-level. 304 + // If it fails, it must be a full URI with collection/rkey, so content-level. 305 + use jacquard_common::types::string::Did; 306 + 307 + if Did::new(label.uri.as_ref()).is_ok() { 308 + LabelTarget::Account 309 + } else { 310 + LabelTarget::Content 311 + } 312 + } 313 + 314 + /// Apply moderation to a slice of items 315 + /// 316 + /// Returns a Vec of tuples containing the original item reference and its decision. 317 + /// 318 + /// # Example 319 + /// 320 + /// ```ignore 321 + /// # use jacquard::moderation::*; 322 + /// # use jacquard_api::app_bsky::feed::PostView; 323 + /// # fn example(posts: &[PostView<'_>], prefs: &ModerationPrefs<'_>, defs: &LabelerDefs<'_>) { 324 + /// let results = moderate_all(posts, prefs, defs, &[]); 325 + /// for (post, decision) in results { 326 + /// if decision.filter { 327 + /// // skip this post 328 + /// } 329 + /// } 330 + /// # } 331 + /// ``` 332 + pub fn moderate_all<'a, T: Labeled<'a>>( 333 + items: &'a [T], 334 + prefs: &ModerationPrefs<'_>, 335 + defs: &LabelerDefs<'_>, 336 + accepted_labelers: &[Did<'_>], 337 + ) -> Vec<(&'a T, ModerationDecision)> { 338 + items 339 + .iter() 340 + .map(|item| (item, moderate(item, prefs, defs, accepted_labelers))) 341 + .collect() 342 + } 343 + 344 + /// Extension trait for applying moderation to iterators 345 + /// 346 + /// Provides convenience methods for filtering and mapping moderation decisions 347 + /// over collections. 348 + pub trait ModerationIterExt<'a, T: Labeled<'a> + 'a>: Iterator<Item = &'a T> + Sized { 349 + /// Map each item to a tuple of (item, decision) 350 + fn with_moderation( 351 + self, 352 + prefs: &'a ModerationPrefs<'_>, 353 + defs: &'a LabelerDefs<'_>, 354 + accepted_labelers: &'a [Did<'_>], 355 + ) -> impl Iterator<Item = (&'a T, ModerationDecision)> { 356 + self.map(move |item| (item, moderate(item, prefs, defs, accepted_labelers))) 357 + } 358 + 359 + /// Filter out items that should be hidden 360 + fn filter_moderated( 361 + self, 362 + prefs: &'a ModerationPrefs<'_>, 363 + defs: &'a LabelerDefs<'_>, 364 + accepted_labelers: &'a [Did<'_>], 365 + ) -> impl Iterator<Item = &'a T> { 366 + self.filter(move |item| !moderate(*item, prefs, defs, accepted_labelers).filter) 367 + } 368 + } 369 + 370 + impl<'a, T: Labeled<'a> + 'a, I: Iterator<Item = &'a T>> ModerationIterExt<'a, T> for I {}
+79
crates/jacquard/src/moderation/fetch.rs
··· 1 + use super::LabelerDefs; 2 + use jacquard_api::app_bsky::labeler::get_services::{GetServices, GetServicesOutput}; 3 + use jacquard_common::IntoStatic; 4 + use jacquard_common::error::ClientError; 5 + use jacquard_common::types::string::Did; 6 + use jacquard_common::xrpc::{XrpcClient, XrpcError}; 7 + 8 + /// Fetch labeler definitions from app.bsky.labeler.getServices 9 + /// 10 + /// This is a convenience helper for fetching labeler service records from Bluesky's 11 + /// labeler service. You can also fetch these from other indexes or sources and 12 + /// construct a `LabelerDefs` manually. 13 + /// 14 + /// # Arguments 15 + /// 16 + /// * `client` - Any XRPC client (Agent, stateless client, etc.) 17 + /// * `dids` - List of labeler DIDs to fetch definitions for 18 + /// 19 + /// # Example 20 + /// 21 + /// ```no_run 22 + /// # use jacquard::moderation::fetch_labeler_defs; 23 + /// # use jacquard::client::BasicClient; 24 + /// # use jacquard_common::types::string::Did; 25 + /// # #[tokio::main] 26 + /// # async fn main() -> Result<(), Box<dyn std::error::Error>> { 27 + /// let client = BasicClient::unauthenticated(); 28 + /// let labeler_did = Did::new_static("did:plc:ar7c4by46qjdydhdevvrndac").unwrap(); 29 + /// let defs = fetch_labeler_defs(&client, vec![labeler_did]).await?; 30 + /// # Ok(()) 31 + /// # } 32 + /// ``` 33 + pub async fn fetch_labeler_defs( 34 + client: &(impl XrpcClient + Sync), 35 + dids: Vec<Did<'_>>, 36 + ) -> Result<LabelerDefs<'static>, ClientError> { 37 + #[cfg(feature = "tracing")] 38 + let _span = tracing::debug_span!("fetch_labeler_defs", count = dids.len()).entered(); 39 + 40 + let request = GetServices::new().dids(dids).detailed(true).build(); 41 + 42 + let response = client.send(request).await?; 43 + let output: GetServicesOutput<'static> = response.into_output().map_err(|e| match e { 44 + XrpcError::Auth(auth) => ClientError::Auth(auth), 45 + XrpcError::Generic(g) => ClientError::Transport( 46 + jacquard_common::error::TransportError::Other(g.to_string().into()), 47 + ), 48 + XrpcError::Decode(e) => ClientError::Decode(e), 49 + XrpcError::Xrpc(typed) => ClientError::Transport( 50 + jacquard_common::error::TransportError::Other(format!("{:?}", typed).into()), 51 + ), 52 + })?; 53 + 54 + let mut defs = LabelerDefs::new(); 55 + 56 + use jacquard_api::app_bsky::labeler::get_services::GetServicesOutputViewsItem; 57 + 58 + for view in output.views { 59 + match view { 60 + GetServicesOutputViewsItem::LabelerViewDetailed(detailed) => { 61 + if let Some(label_value_definitions) = &detailed.policies.label_value_definitions { 62 + defs.insert( 63 + detailed.creator.did.clone().into_static(), 64 + label_value_definitions 65 + .iter() 66 + .map(|d| d.clone().into_static()) 67 + .collect(), 68 + ); 69 + } 70 + } 71 + _ => { 72 + // Unknown or not sufficiently detailed view type, skip 73 + continue; 74 + } 75 + } 76 + } 77 + 78 + Ok(defs) 79 + }
+183
crates/jacquard/src/moderation/labeled.rs
··· 1 + use jacquard_api::com_atproto::label::{Label, SelfLabels}; 2 + 3 + /// Trait for content that has labels attached 4 + /// 5 + /// Implemented by types that can be moderated based on their labels. 6 + /// This includes both labels from labeler services and self-labels applied by authors. 7 + pub trait Labeled<'a> { 8 + /// Get the labels applied to this content by labeler services 9 + fn labels(&self) -> &[Label<'a>]; 10 + 11 + /// Get self-labels applied by the content author 12 + fn self_labels(&'a self) -> Option<SelfLabels<'a>> { 13 + None 14 + } 15 + } 16 + 17 + // Implementations for common Bluesky types 18 + #[cfg(feature = "api_bluesky")] 19 + mod bluesky_impls { 20 + use super::*; 21 + use jacquard_api::app_bsky::{ 22 + actor::{ProfileView, ProfileViewBasic, ProfileViewDetailed, profile::Profile}, 23 + feed::{PostView, generator::Generator, post::Post}, 24 + graph::{ListView, list::List}, 25 + labeler::service::Service, 26 + notification::list_notifications::Notification, 27 + }; 28 + use jacquard_common::from_data; 29 + 30 + impl<'a> Labeled<'a> for PostView<'a> { 31 + fn labels(&self) -> &[Label<'a>] { 32 + self.labels.as_deref().unwrap_or(&[]) 33 + } 34 + 35 + fn self_labels(&'a self) -> Option<SelfLabels<'a>> { 36 + let post = from_data::<Post<'a>>(&self.record).ok()?; 37 + post.labels 38 + } 39 + } 40 + 41 + impl<'a> Labeled<'a> for ProfileView<'a> { 42 + fn labels(&self) -> &[Label<'a>] { 43 + self.labels.as_deref().unwrap_or(&[]) 44 + } 45 + } 46 + 47 + impl<'a> Labeled<'a> for ProfileViewBasic<'a> { 48 + fn labels(&self) -> &[Label<'a>] { 49 + self.labels.as_deref().unwrap_or(&[]) 50 + } 51 + } 52 + 53 + impl<'a> Labeled<'a> for ProfileViewDetailed<'a> { 54 + fn labels(&self) -> &[Label<'a>] { 55 + self.labels.as_deref().unwrap_or(&[]) 56 + } 57 + } 58 + 59 + impl<'a> Labeled<'a> for Post<'a> { 60 + fn labels(&self) -> &[Label<'a>] { 61 + &[] 62 + } 63 + 64 + fn self_labels(&self) -> Option<SelfLabels<'a>> { 65 + self.labels.clone() 66 + } 67 + } 68 + 69 + impl<'a> Labeled<'a> for Profile<'a> { 70 + fn labels(&self) -> &[Label<'a>] { 71 + &[] 72 + } 73 + 74 + fn self_labels(&self) -> Option<SelfLabels<'a>> { 75 + self.labels.clone() 76 + } 77 + } 78 + 79 + impl<'a> Labeled<'a> for Generator<'a> { 80 + fn labels(&self) -> &[Label<'a>] { 81 + &[] 82 + } 83 + 84 + fn self_labels(&'a self) -> Option<SelfLabels<'a>> { 85 + self.labels.clone() 86 + } 87 + } 88 + 89 + impl<'a> Labeled<'a> for List<'a> { 90 + fn labels(&self) -> &[Label<'a>] { 91 + &[] 92 + } 93 + 94 + fn self_labels(&'a self) -> Option<SelfLabels<'a>> { 95 + self.labels.clone() 96 + } 97 + } 98 + 99 + impl<'a> Labeled<'a> for Service<'a> { 100 + fn labels(&self) -> &[Label<'a>] { 101 + &[] 102 + } 103 + 104 + fn self_labels(&'a self) -> Option<SelfLabels<'a>> { 105 + self.labels.clone() 106 + } 107 + } 108 + 109 + impl<'a> Labeled<'a> for ListView<'a> { 110 + fn labels(&self) -> &[Label<'a>] { 111 + self.labels.as_deref().unwrap_or(&[]) 112 + } 113 + } 114 + 115 + impl<'a> Labeled<'a> for Notification<'a> { 116 + fn labels(&self) -> &[Label<'a>] { 117 + self.labels.as_deref().unwrap_or(&[]) 118 + } 119 + } 120 + } 121 + 122 + #[cfg(feature = "api_full")] 123 + mod full_impls { 124 + //use super::*; 125 + } 126 + 127 + #[cfg(feature = "api_all")] 128 + mod anisota_impls { 129 + use super::*; 130 + 131 + use jacquard_api::net_anisota::feed::{draft::Draft, post::Post}; 132 + 133 + impl<'a> Labeled<'a> for Post<'a> { 134 + fn labels(&self) -> &[Label<'a>] { 135 + &[] 136 + } 137 + 138 + fn self_labels(&self) -> Option<SelfLabels<'a>> { 139 + self.labels.clone() 140 + } 141 + } 142 + 143 + impl<'a> Labeled<'a> for Draft<'a> { 144 + fn labels(&self) -> &[Label<'a>] { 145 + &[] 146 + } 147 + 148 + fn self_labels(&self) -> Option<SelfLabels<'a>> { 149 + self.labels.clone() 150 + } 151 + } 152 + } 153 + 154 + #[cfg(feature = "api_all")] 155 + mod social_grain_impls { 156 + use super::*; 157 + use jacquard_api::social_grain::{ 158 + actor::ProfileView, 159 + gallery::{Gallery, GalleryView}, 160 + }; 161 + 162 + impl<'a> Labeled<'a> for ProfileView<'a> { 163 + fn labels(&self) -> &[Label<'a>] { 164 + self.labels.as_deref().unwrap_or(&[]) 165 + } 166 + } 167 + 168 + impl<'a> Labeled<'a> for GalleryView<'a> { 169 + fn labels(&self) -> &[Label<'a>] { 170 + self.labels.as_deref().unwrap_or(&[]) 171 + } 172 + } 173 + 174 + impl<'a> Labeled<'a> for Gallery<'a> { 175 + fn labels(&self) -> &[Label<'a>] { 176 + &[] 177 + } 178 + 179 + fn self_labels(&self) -> Option<SelfLabels<'a>> { 180 + self.labels.clone() 181 + } 182 + } 183 + }
+5358
crates/jacquard/src/moderation/labeler_services.json
··· 1 + { 2 + "views": [ 3 + { 4 + "uri": "at://did:plc:ar7c4by46qjdydhdevvrndac/app.bsky.labeler.service/self", 5 + "cid": "bafyreidh754j3y7isnikzv2itrkywmhrfqcx646hl6w5r62wqecioychoi", 6 + "creator": { 7 + "did": "did:plc:ar7c4by46qjdydhdevvrndac", 8 + "handle": "moderation.bsky.app", 9 + "displayName": "Bluesky Moderation Service", 10 + "associated": { "labeler": true, "activitySubscription": { "allowSubscriptions": "followers" } }, 11 + "viewer": { "muted": false, "blockedBy": false }, 12 + "labels": [ 13 + { 14 + "cts": "2024-05-11T02:11:29.404Z", 15 + "src": "did:plc:e4elbtctnfqocyfcml6h2lf7", 16 + "uri": "did:plc:ar7c4by46qjdydhdevvrndac", 17 + "val": "bluesky-elder", 18 + "ver": 1 19 + } 20 + ], 21 + "createdAt": "2023-04-11T17:29:51.242Z", 22 + "verification": { 23 + "verifications": [ 24 + { 25 + "issuer": "did:plc:z72i7hdynmk6r22z27h6tvur", 26 + "uri": "at://did:plc:z72i7hdynmk6r22z27h6tvur/app.bsky.graph.verification/3lpkgxwe3gm2m", 27 + "isValid": true, 28 + "createdAt": "2025-05-19T20:46:59.734Z" 29 + } 30 + ], 31 + "verifiedStatus": "valid", 32 + "trustedVerifierStatus": "none" 33 + }, 34 + "description": "Official Bluesky moderation service. https://bsky.social/about/support/community-guidelines", 35 + "indexedAt": "2024-03-19T17:14:40.208Z" 36 + }, 37 + "likeCount": 999, 38 + "viewer": {}, 39 + "indexedAt": "2025-07-14T18:36:49.243Z", 40 + "labels": [], 41 + "policies": { 42 + "labelValueDefinitions": [ 43 + { 44 + "adultOnly": false, 45 + "blurs": "content", 46 + "defaultSetting": "hide", 47 + "identifier": "spam", 48 + "locales": [ 49 + { 50 + "description": "Unwanted, repeated, or unrelated actions that bother users.", 51 + "lang": "en", 52 + "name": "Spam" 53 + } 54 + ], 55 + "severity": "inform" 56 + }, 57 + { 58 + "adultOnly": false, 59 + "blurs": "none", 60 + "defaultSetting": "hide", 61 + "identifier": "impersonation", 62 + "locales": [ 63 + { 64 + "description": "Pretending to be someone else without permission.", 65 + "lang": "en", 66 + "name": "Impersonation" 67 + } 68 + ], 69 + "severity": "inform" 70 + }, 71 + { 72 + "adultOnly": false, 73 + "blurs": "content", 74 + "defaultSetting": "hide", 75 + "identifier": "scam", 76 + "locales": [{ "description": "Scams, phishing & fraud.", "lang": "en", "name": "Scam" }], 77 + "severity": "alert" 78 + }, 79 + { 80 + "adultOnly": false, 81 + "blurs": "content", 82 + "defaultSetting": "warn", 83 + "identifier": "intolerant", 84 + "locales": [ 85 + { "description": "Discrimination against protected groups.", "lang": "en", "name": "Intolerance" } 86 + ], 87 + "severity": "alert" 88 + }, 89 + { 90 + "adultOnly": true, 91 + "blurs": "content", 92 + "defaultSetting": "warn", 93 + "identifier": "self-harm", 94 + "locales": [ 95 + { 96 + "description": "Promotes self-harm, including graphic images, glorifying discussions, or triggering stories.", 97 + "lang": "en", 98 + "name": "Self-Harm" 99 + } 100 + ], 101 + "severity": "alert" 102 + }, 103 + { 104 + "adultOnly": false, 105 + "blurs": "content", 106 + "defaultSetting": "hide", 107 + "identifier": "security", 108 + "locales": [ 109 + { 110 + "description": "May be unsafe and could harm your device, steal your info, or get your account hacked.", 111 + "lang": "en", 112 + "name": "Security Concerns" 113 + } 114 + ], 115 + "severity": "alert" 116 + }, 117 + { 118 + "adultOnly": false, 119 + "blurs": "content", 120 + "defaultSetting": "warn", 121 + "identifier": "misleading", 122 + "locales": [ 123 + { 124 + "description": "Altered images/videos, deceptive links, or false statements.", 125 + "lang": "en", 126 + "name": "Misleading" 127 + } 128 + ], 129 + "severity": "alert" 130 + }, 131 + { 132 + "adultOnly": false, 133 + "blurs": "content", 134 + "defaultSetting": "hide", 135 + "identifier": "threat", 136 + "locales": [ 137 + { 138 + "description": "Promotes violence or harm towards others, including threats, incitement, or advocacy of harm.", 139 + "lang": "en", 140 + "name": "Threats" 141 + } 142 + ], 143 + "severity": "inform" 144 + }, 145 + { 146 + "adultOnly": false, 147 + "blurs": "content", 148 + "defaultSetting": "hide", 149 + "identifier": "unsafe-link", 150 + "locales": [ 151 + { 152 + "description": "Links to harmful sites with malware, phishing, or violating content that risk security and privacy.", 153 + "lang": "en", 154 + "name": "Unsafe link" 155 + } 156 + ], 157 + "severity": "alert" 158 + }, 159 + { 160 + "adultOnly": false, 161 + "blurs": "content", 162 + "defaultSetting": "hide", 163 + "identifier": "illicit", 164 + "locales": [ 165 + { 166 + "description": "Promoting or selling potentially illicit goods, services, or activities.", 167 + "lang": "en", 168 + "name": "Illicit" 169 + } 170 + ], 171 + "severity": "alert" 172 + }, 173 + { 174 + "adultOnly": false, 175 + "blurs": "content", 176 + "defaultSetting": "warn", 177 + "identifier": "misinformation", 178 + "locales": [ 179 + { 180 + "description": "Spreading false or misleading info, including unverified claims and harmful conspiracy theories.", 181 + "lang": "en", 182 + "name": "Misinformation" 183 + } 184 + ], 185 + "severity": "inform" 186 + }, 187 + { 188 + "adultOnly": false, 189 + "blurs": "none", 190 + "defaultSetting": "warn", 191 + "identifier": "rumor", 192 + "locales": [ 193 + { 194 + "description": "This claim has not been confirmed by a credible source yet.", 195 + "lang": "en", 196 + "name": "Unconfirmed" 197 + } 198 + ], 199 + "severity": "inform" 200 + }, 201 + { 202 + "adultOnly": false, 203 + "blurs": "content", 204 + "defaultSetting": "hide", 205 + "identifier": "rude", 206 + "locales": [ 207 + { 208 + "description": "Rude or impolite, including crude language and disrespectful comments, without constructive purpose.", 209 + "lang": "en", 210 + "name": "Rude" 211 + } 212 + ], 213 + "severity": "inform" 214 + }, 215 + { 216 + "adultOnly": false, 217 + "blurs": "content", 218 + "defaultSetting": "hide", 219 + "identifier": "extremist", 220 + "locales": [ 221 + { 222 + "description": "Radical views advocating violence, hate, or discrimination against individuals or groups.", 223 + "lang": "en", 224 + "name": "Extremist" 225 + } 226 + ], 227 + "severity": "alert" 228 + }, 229 + { 230 + "adultOnly": true, 231 + "blurs": "content", 232 + "defaultSetting": "warn", 233 + "identifier": "sensitive", 234 + "locales": [ 235 + { 236 + "description": "May be upsetting, covering topics like substance abuse or mental health issues, cautioning sensitive viewers.", 237 + "lang": "en", 238 + "name": "Sensitive" 239 + } 240 + ], 241 + "severity": "alert" 242 + }, 243 + { 244 + "adultOnly": false, 245 + "blurs": "content", 246 + "defaultSetting": "hide", 247 + "identifier": "engagement-farming", 248 + "locales": [ 249 + { 250 + "description": "Insincere content or bulk actions aimed at gaining followers, including frequent follows, posts, and likes.", 251 + "lang": "en", 252 + "name": "Engagement Farming" 253 + } 254 + ], 255 + "severity": "alert" 256 + }, 257 + { 258 + "adultOnly": false, 259 + "blurs": "content", 260 + "defaultSetting": "hide", 261 + "identifier": "inauthentic", 262 + "locales": [ 263 + { 264 + "description": "Bot or a person pretending to be someone else.", 265 + "lang": "en", 266 + "name": "Inauthentic Account" 267 + } 268 + ], 269 + "severity": "alert" 270 + }, 271 + { 272 + "adultOnly": true, 273 + "blurs": "media", 274 + "defaultSetting": "show", 275 + "identifier": "sexual-figurative", 276 + "locales": [ 277 + { 278 + "description": "Art with explicit or suggestive sexual themes, including provocative imagery or partial nudity.", 279 + "lang": "en", 280 + "name": "Sexually Suggestive (Cartoon)" 281 + } 282 + ], 283 + "severity": "none" 284 + } 285 + ], 286 + "labelValues": [ 287 + "!hide", 288 + "!warn", 289 + "porn", 290 + "sexual", 291 + "nudity", 292 + "sexual-figurative", 293 + "graphic-media", 294 + "self-harm", 295 + "sensitive", 296 + "extremist", 297 + "intolerant", 298 + "threat", 299 + "rude", 300 + "illicit", 301 + "security", 302 + "unsafe-link", 303 + "impersonation", 304 + "misinformation", 305 + "scam", 306 + "engagement-farming", 307 + "spam", 308 + "rumor", 309 + "misleading", 310 + "inauthentic" 311 + ] 312 + }, 313 + "$type": "app.bsky.labeler.defs#labelerViewDetailed" 314 + }, 315 + { 316 + "uri": "at://did:plc:i65enriuag7n5fgkopbqtkyk/app.bsky.labeler.service/self", 317 + "cid": "bafyreigh5fjr6an3qujvfbm6xmso6jyhido2dguixaeqp3jtcqft2gofba", 318 + "creator": { 319 + "did": "did:plc:i65enriuag7n5fgkopbqtkyk", 320 + "handle": "profile-labels.bossett.social", 321 + "displayName": "Profile Labeller", 322 + "avatar": "https://cdn.bsky.app/img/avatar/plain/did:plc:i65enriuag7n5fgkopbqtkyk/bafkreicyuvug6ocec6weddr2znoskxonccxabiyfxoenspavmpmx2wvmbm@jpeg", 323 + "associated": { 324 + "labeler": true, 325 + "chat": { "allowIncoming": "following" }, 326 + "activitySubscription": { "allowSubscriptions": "followers" } 327 + }, 328 + "viewer": { "muted": false, "blockedBy": false }, 329 + "labels": [], 330 + "createdAt": "2024-04-26T21:01:35.689Z", 331 + "description": "Labels accounts based on facts about profile records, post history, etc. Automatic.\nSupport @bossett.social / Code https://github.com/Bossett/bsky-profile-labeller / Help out https://ko-fi.com/bossett", 332 + "indexedAt": "2024-12-04T23:19:07.347Z" 333 + }, 334 + "likeCount": 1561, 335 + "viewer": { "like": "at://did:plc:yfvwmnlztr4dwkb7hwz55r2g/app.bsky.feed.like/3kr5nfuxfa32h" }, 336 + "indexedAt": "2025-08-13T19:54:21.412Z", 337 + "labels": [], 338 + "policies": { 339 + "labelValueDefinitions": [ 340 + { 341 + "adultOnly": false, 342 + "blurs": "none", 343 + "defaultSetting": "warn", 344 + "identifier": "changedhandle", 345 + "locales": [ 346 + { 347 + "description": "This user began using this handle on this account less than 14 days ago.", 348 + "lang": "en", 349 + "name": "Changed Handle" 350 + } 351 + ], 352 + "severity": "inform" 353 + }, 354 + { 355 + "adultOnly": false, 356 + "blurs": "none", 357 + "defaultSetting": "warn", 358 + "identifier": "incomplete", 359 + "locales": [ 360 + { 361 + "description": "This user is missing a profile picture or display name.", 362 + "lang": "en", 363 + "name": "Incomplete Profile" 364 + } 365 + ], 366 + "severity": "inform" 367 + }, 368 + { 369 + "adultOnly": false, 370 + "blurs": "none", 371 + "defaultSetting": "warn", 372 + "identifier": "onlyreplies", 373 + "locales": [ 374 + { "description": "This user has not made a non-reply post.", "lang": "en", "name": "Only Replies" } 375 + ], 376 + "severity": "alert" 377 + }, 378 + { 379 + "adultOnly": false, 380 + "blurs": "none", 381 + "defaultSetting": "warn", 382 + "identifier": "rapidposts", 383 + "locales": [ 384 + { 385 + "description": "This account has been posting at closely timed intervals without a break the last 30 posts.", 386 + "lang": "en", 387 + "name": "Periodic" 388 + } 389 + ], 390 + "severity": "alert" 391 + }, 392 + { 393 + "adultOnly": false, 394 + "blurs": "none", 395 + "defaultSetting": "warn", 396 + "identifier": "nonplcdid", 397 + "locales": [ 398 + { 399 + "description": "This user has a did from a namespace other than did:plc: (and therefore handle history not available).", 400 + "lang": "en", 401 + "name": "Non-PLC DID" 402 + } 403 + ], 404 + "severity": "inform" 405 + }, 406 + { 407 + "adultOnly": false, 408 + "blurs": "none", 409 + "defaultSetting": "warn", 410 + "identifier": "bridgy", 411 + "locales": [ 412 + { 413 + "description": "This user is on a non-ATProto network, bridged in from Bridgy (https://fed.brid.gy/docs).", 414 + "lang": "en", 415 + "name": "Bridgy User" 416 + } 417 + ], 418 + "severity": "inform" 419 + }, 420 + { 421 + "adultOnly": false, 422 + "blurs": "none", 423 + "defaultSetting": "warn", 424 + "identifier": "nostr", 425 + "locales": [ 426 + { 427 + "description": "This user originates from Nostr and has been bridged in via other networks by Bridgy. Does NOT include users who have just validated a handle with an npub signature.", 428 + "lang": "en", 429 + "name": "Nostr User" 430 + } 431 + ], 432 + "severity": "inform" 433 + }, 434 + { 435 + "adultOnly": false, 436 + "blurs": "none", 437 + "defaultSetting": "warn", 438 + "identifier": "threads", 439 + "locales": [ 440 + { 441 + "description": "This user originates from Threads and has been bridged in by Bridgy.", 442 + "lang": "en", 443 + "name": "Threads User" 444 + } 445 + ], 446 + "severity": "inform" 447 + }, 448 + { 449 + "adultOnly": false, 450 + "blurs": "none", 451 + "defaultSetting": "warn", 452 + "identifier": "stephanie", 453 + "locales": [{ "description": "Stephanie goes by Stephanie.", "lang": "en", "name": "Stephanie" }], 454 + "severity": "inform" 455 + } 456 + ], 457 + "labelValues": [ 458 + "changedhandle", 459 + "incomplete", 460 + "onlyreplies", 461 + "rapidposts", 462 + "nonplcdid", 463 + "bridgy", 464 + "nostr", 465 + "threads", 466 + "stephanie" 467 + ] 468 + }, 469 + "reasonTypes": ["com.atproto.moderation.defs#reasonOther"], 470 + "subjectTypes": ["account"], 471 + "subjectCollections": ["app.bsky.actor.profile"], 472 + "$type": "app.bsky.labeler.defs#labelerViewDetailed" 473 + }, 474 + { 475 + "uri": "at://did:plc:eeptyms6w2crpi6h73ok7qjt/app.bsky.labeler.service/self", 476 + "cid": "bafyreiflhewbxzf2wkuyatcmnapqeu3gu362ftubcyg4vxm7bnmbliniim", 477 + "creator": { 478 + "did": "did:plc:eeptyms6w2crpi6h73ok7qjt", 479 + "handle": "labeler.shreyanjain.net", 480 + "displayName": "The Shreyan Labeler", 481 + "avatar": "https://cdn.bsky.app/img/avatar/plain/did:plc:eeptyms6w2crpi6h73ok7qjt/bafkreifbeedd6k7mmix3yu26gckrbhlpekgykwqluzxohrcxbrgnsuulgi@jpeg", 482 + "associated": { "labeler": true, "activitySubscription": { "allowSubscriptions": "followers" } }, 483 + "viewer": { 484 + "muted": false, 485 + "blockedBy": false, 486 + "following": "at://did:plc:yfvwmnlztr4dwkb7hwz55r2g/app.bsky.graph.follow/3kvc42cfvus2q" 487 + }, 488 + "labels": [], 489 + "createdAt": "2024-05-18T20:17:45.994Z", 490 + "description": "Labels stuff probably", 491 + "indexedAt": "2024-05-18T20:20:36.555Z" 492 + }, 493 + "likeCount": 59, 494 + "viewer": { "like": "at://did:plc:yfvwmnlztr4dwkb7hwz55r2g/app.bsky.feed.like/3kvu5d7oes62x" }, 495 + "indexedAt": "2025-01-03T06:55:03.449Z", 496 + "labels": [], 497 + "policies": { 498 + "labelValueDefinitions": [ 499 + { 500 + "adultOnly": false, 501 + "blurs": "none", 502 + "defaultSetting": "warn", 503 + "identifier": "strugglebus", 504 + "locales": [ 505 + { 506 + "description": "noun. Slang. a situation, task, etc., that seems difficult or frustrating: With no sleep last night, I'll be on the struggle bus today.", 507 + "lang": "en", 508 + "name": "Strugglebus" 509 + } 510 + ], 511 + "severity": "inform" 512 + }, 513 + { 514 + "adultOnly": false, 515 + "blurs": "none", 516 + "defaultSetting": "warn", 517 + "identifier": "dni", 518 + "locales": [ 519 + { 520 + "description": "This user is known to be extremely dangerous and problematic. DO NOT INTERACT. ", 521 + "lang": "en", 522 + "name": "DANGEROUS USER" 523 + } 524 + ], 525 + "severity": "alert" 526 + }, 527 + { 528 + "adultOnly": false, 529 + "blurs": "none", 530 + "defaultSetting": "warn", 531 + "identifier": "honeybee", 532 + "locales": [{ "description": "The one and only 🐝", "lang": "en", "name": "Honeybee Bloomfie" }], 533 + "severity": "inform" 534 + }, 535 + { 536 + "adultOnly": false, 537 + "blurs": "none", 538 + "defaultSetting": "warn", 539 + "identifier": "bug-queen", 540 + "locales": [ 541 + { "description": "This user is the bug queen of Bluesky. ", "lang": "en", "name": "Bug Queen" } 542 + ], 543 + "severity": "inform" 544 + }, 545 + { 546 + "adultOnly": false, 547 + "blurs": "none", 548 + "defaultSetting": "warn", 549 + "identifier": "test", 550 + "locales": [{ "description": "Label description.", "lang": "en", "name": "Label Display Name" }], 551 + "severity": "alert" 552 + }, 553 + { 554 + "adultOnly": false, 555 + "blurs": "none", 556 + "defaultSetting": "warn", 557 + "identifier": "govt", 558 + "locales": [ 559 + { 560 + "description": "This account is verified to belong to a governmental entity.", 561 + "lang": "en", 562 + "name": "Official Government Account" 563 + } 564 + ], 565 + "severity": "inform" 566 + }, 567 + { 568 + "adultOnly": false, 569 + "blurs": "none", 570 + "defaultSetting": "warn", 571 + "identifier": "jester", 572 + "locales": [ 573 + { 574 + "description": "This user is the official Jester of the AT Protocol.", 575 + "lang": "en", 576 + "name": "ATProto Jester" 577 + } 578 + ], 579 + "severity": "inform" 580 + }, 581 + { 582 + "adultOnly": false, 583 + "blurs": "none", 584 + "defaultSetting": "warn", 585 + "identifier": "mark", 586 + "locales": [{ "description": "made their mark on bluesky 😉", "lang": "en", "name": "mark" }], 587 + "severity": "inform" 588 + }, 589 + { 590 + "adultOnly": false, 591 + "blurs": "none", 592 + "defaultSetting": "warn", 593 + "identifier": "soap", 594 + "locales": [{ "description": "🧼 ( I can't pretend to understand )", "lang": "en", "name": "Soap" }], 595 + "severity": "inform" 596 + }, 597 + { 598 + "adultOnly": false, 599 + "blurs": "none", 600 + "defaultSetting": "warn", 601 + "identifier": "sarcastic", 602 + "locales": [ 603 + { "description": "User does not quite say what they mean. ", "lang": "en", "name": "Sarcastic" } 604 + ], 605 + "severity": "inform" 606 + }, 607 + { 608 + "adultOnly": false, 609 + "blurs": "none", 610 + "defaultSetting": "warn", 611 + "identifier": "jerry", 612 + "locales": [ 613 + { 614 + "description": "User reposts their own posts before an hour has even passed", 615 + "lang": "en", 616 + "name": "Jerry" 617 + } 618 + ], 619 + "severity": "inform" 620 + } 621 + ], 622 + "labelValues": [ 623 + "strugglebus", 624 + "dni", 625 + "honeybee", 626 + "bug-queen", 627 + "test", 628 + "govt", 629 + "jester", 630 + "mark", 631 + "soap", 632 + "sarcastic", 633 + "jerry" 634 + ], 635 + "severity": "inform" 636 + }, 637 + "$type": "app.bsky.labeler.defs#labelerViewDetailed" 638 + }, 639 + { 640 + "uri": "at://did:plc:aksxl7qy5azlzfm2jstcwqtz/app.bsky.labeler.service/self", 641 + "cid": "bafyreidxpzycbhtko6p5osogn4vs57fptmwf4lo757tw7rlo5isqa3wqm4", 642 + "creator": { 643 + "did": "did:plc:aksxl7qy5azlzfm2jstcwqtz", 644 + "handle": "kiki-bouba.mozzius.dev", 645 + "displayName": "Kiki/Bouba Labeller", 646 + "avatar": "https://cdn.bsky.app/img/avatar/plain/did:plc:aksxl7qy5azlzfm2jstcwqtz/bafkreiebyiy3lkj65irsv6x4oddskoord4hk5bbzzo2omoaimqhq7lpcle@jpeg", 647 + "associated": { 648 + "labeler": true, 649 + "chat": { "allowIncoming": "following" }, 650 + "activitySubscription": { "allowSubscriptions": "followers" } 651 + }, 652 + "viewer": { 653 + "muted": false, 654 + "blockedBy": false, 655 + "following": "at://did:plc:yfvwmnlztr4dwkb7hwz55r2g/app.bsky.graph.follow/3kvn73suiid2c" 656 + }, 657 + "labels": [], 658 + "createdAt": "2024-06-23T18:32:43.859Z", 659 + "description": "Are you kiki or bouba? Like this labeller to find out\n\nRemove label: https://bsky.app/profile/kiki-bouba.mozzius.dev/post/3l4obq2dxhs2p\n\nNote: your avatar will be sent to GPT-4o for evaluation", 660 + "indexedAt": "2024-09-21T15:03:55.009Z" 661 + }, 662 + "likeCount": 2479, 663 + "viewer": { "like": "at://did:plc:yfvwmnlztr4dwkb7hwz55r2g/app.bsky.feed.like/3kvn6y45l3u2b" }, 664 + "indexedAt": "2025-02-27T12:02:01.453Z", 665 + "labels": [], 666 + "policies": { 667 + "labelValueDefinitions": [ 668 + { 669 + "adultOnly": false, 670 + "blurs": "none", 671 + "defaultSetting": "inform", 672 + "identifier": "kiki", 673 + "locales": [{ "description": "User has been judged and deemed kiki", "lang": "en", "name": "Kiki" }], 674 + "severity": "inform" 675 + }, 676 + { 677 + "adultOnly": false, 678 + "blurs": "none", 679 + "defaultSetting": "inform", 680 + "identifier": "bouba", 681 + "locales": [{ "description": "User has been judged and deemed bouba", "lang": "en", "name": "Bouba" }], 682 + "severity": "inform" 683 + } 684 + ], 685 + "labelValues": ["kiki", "bouba"] 686 + }, 687 + "reasonTypes": [], 688 + "subjectTypes": [], 689 + "subjectCollections": [], 690 + "$type": "app.bsky.labeler.defs#labelerViewDetailed" 691 + }, 692 + { 693 + "uri": "at://did:plc:hysbs7znfgxyb4tsvetzo4sk/app.bsky.labeler.service/self", 694 + "cid": "bafyreiheio4kznqphrwzhsuzblcmibu6gdk44hsarbie6cwqmrcs2d42mq", 695 + "creator": { 696 + "did": "did:plc:hysbs7znfgxyb4tsvetzo4sk", 697 + "handle": "bskyttrpg.bsky.social", 698 + "displayName": "TTRPG Class Identifier", 699 + "avatar": "https://cdn.bsky.app/img/avatar/plain/did:plc:hysbs7znfgxyb4tsvetzo4sk/bafkreiavshfh6fdwi6bbhxbkmo6cpxjkv44ko3d3k4qbehrcc3wocnniqy@jpeg", 700 + "associated": { 701 + "labeler": true, 702 + "chat": { "allowIncoming": "all" }, 703 + "activitySubscription": { "allowSubscriptions": "followers" } 704 + }, 705 + "viewer": { "muted": false, "blockedBy": false }, 706 + "labels": [ 707 + { 708 + "cts": "2024-07-09T22:16:27.102Z", 709 + "src": "did:plc:hysbs7znfgxyb4tsvetzo4sk", 710 + "uri": "did:plc:hysbs7znfgxyb4tsvetzo4sk", 711 + "val": "fighter", 712 + "ver": 1 713 + } 714 + ], 715 + "createdAt": "2024-06-27T05:05:53.378Z", 716 + "description": "Like & Subscribe to find out your class\nIf you want to find out what commands are available\n@bskyttrpg.bsky.social listcommands\n\nhttps://bskyttrpg.ripperoni.com/ui\n\nAny issues, reach out to @ripperoni.com\n", 717 + "indexedAt": "2024-12-11T02:50:24.243Z" 718 + }, 719 + "likeCount": 31103, 720 + "viewer": { "like": "at://did:plc:yfvwmnlztr4dwkb7hwz55r2g/app.bsky.feed.like/3kvy6xzsqoi25" }, 721 + "indexedAt": "2024-06-28T02:57:51.755Z", 722 + "labels": [], 723 + "policies": { 724 + "labelValueDefinitions": [ 725 + { 726 + "adultOnly": false, 727 + "blurs": "none", 728 + "defaultSetting": "inform", 729 + "identifier": "alchemist", 730 + "locales": [ 731 + { 732 + "description": "There’s no sight more beautiful to you than a strange brew bubbling in a beaker, and you consume your ingenious elixirs with abandon. You’re fascinated by uncovering the secrets of science and the natural world, and you’re constantly experimenting in your lab or on the go with inventive concoctions for every eventuality. You are fearless in the face of risk, hurling explosive or toxic creations at your foes. Your unique path toward greatness is lined with alchemical brews that push your mind and body to their limits.", 733 + "lang": "en", 734 + "name": "Alchemist" 735 + }, 736 + { 737 + "description": "Não há visão mais bela do que uma mistura estranha borbulhando em um béquer, e você consome seus elixires engenhosos sem nenhuma preocupação. Você é fascinado em descobrir os segredos da ciência e do mundo natural, e está constantemente experimentando com concocções em seu laboratório ou em campo para qualquer eventualidade. Você é destemido frente ao risco, arremessando criações explosivas ou tóxicas em seus adversários. Seu único caminho à grandeza está cheio de misturas alquímicas\n\nque levam seu corpo e mente ao limite.", 738 + "lang": "pt", 739 + "name": "Alquimista" 740 + } 741 + ], 742 + "severity": "inform" 743 + }, 744 + { 745 + "adultOnly": false, 746 + "blurs": "none", 747 + "defaultSetting": "inform", 748 + "identifier": "barbarian", 749 + "locales": [ 750 + { 751 + "description": "Rage consumes you in battle. You delight in wreaking havoc and using powerful weapons to carve through your enemies, relying on astonishing durability without needing complicated techniques or rigid training. Your rages draw upon a vicious instinct, which you might associate with an animal, a spirit, or some part of yourself. To many barbarians, brute force is a hammer and every problem looks like a nail, whereas others try to hold back the storm of emotions inside them and release their rage only when it matters most.", 752 + "lang": "en", 753 + "name": "Barbarian" 754 + }, 755 + { 756 + "description": "A fúria de batalha o consome. Você sente prazer em causar destruição e atravessar seus inimigos com armas poderosas , contando com uma durabilidade impressionante independente de técnicas complicadas ou treinamento rígido. Sua fúria se alimenta de seus instintos brutais, que você pode associar com um animal, espírito ou alguma parte de si. Para muitos bárbaros a força bruta é um martelo e todo problema é um prego, enquanto outros tentam conter a torrente de emoções dentro de si e liberam sua fúria somente quando realmente necessário.", 757 + "lang": "pt", 758 + "name": "Bárbaro" 759 + } 760 + ], 761 + "severity": "inform" 762 + }, 763 + { 764 + "adultOnly": false, 765 + "blurs": "none", 766 + "defaultSetting": "inform", 767 + "identifier": "bard", 768 + "locales": [ 769 + { 770 + "description": "You are a master of artistry, a scholar of hidden secrets, and a captivating persuader. Using powerful performances, you influence minds and elevate souls to new levels of heroics. You might use your powers to become a charismatic leader, or perhaps you might instead be a counselor, manipulator, scholar, scoundrel, or virtuoso. While your versatility leads some to consider you a beguiling ne’erdo- well and a jack-of-all-trades, it’s dangerous to dismiss you as a master of none.", 771 + "lang": "en", 772 + "name": "Bard" 773 + }, 774 + { 775 + "description": "Você é um mestre das artes, um estudioso de segredos escondidos e um persuasor cativante. Usando performances poderosas, você influencia mentes e eleva almas a novos níveis de heroísmo. Você pode usar seus poderes para se tornar um líder carismático, ou talvez possa ser um conselheiro, estudioso, malandro, manipulador ou virtuoso. A sua versatilidade faz com que alguns o vejam como um faz-tudo ou vadio irresponsável mas menosprezá-lo como um mestre de nada é algo muito, muito perigoso.", 776 + "lang": "pt", 777 + "name": "Bardo" 778 + } 779 + ], 780 + "severity": "inform" 781 + }, 782 + { 783 + "adultOnly": false, 784 + "blurs": "none", 785 + "defaultSetting": "inform", 786 + "identifier": "champion", 787 + "locales": [ 788 + { 789 + "description": "You are an emissary of a deity, a devoted servant who has taken up a weighty mantle, and you adhere to a code that holds you apart from those around you. While champions exist for every alignment, as a champion of good, you provide certainty and hope to the innocent. You have powerful defenses that you share freely with your allies and innocent bystanders, as well as holy power you use to end the threat of evil. Your devotion even attracts the attention of holy spirits who aid you on your journey.", 790 + "lang": "en", 791 + "name": "Champion" 792 + }, 793 + { 794 + "description": "Você é um emissário de uma divindade — um servo devotado que vestiu um pesado manto de responsabilidade e adere a um código que o mantém à parte dos outros. Embora existam campeões de todas as tendências, como um campeão do bem você traz certeza e esperança aos inocentes. Você possui defesas poderosas que compartilha livremente com seus aliados e inocentes e um poder divino que usa para encerrar qualquer ameaça maligna. Sua devoção atrai até mesmo a atenção de espíritos sagrados que o ajudam em sua jornada.", 795 + "lang": "pt", 796 + "name": "Campeão" 797 + } 798 + ], 799 + "severity": "inform" 800 + }, 801 + { 802 + "adultOnly": false, 803 + "blurs": "none", 804 + "defaultSetting": "inform", 805 + "identifier": "cleric", 806 + "locales": [ 807 + { 808 + "description": "Deities work their will upon the world in infinite ways, and you serve as one of their most stalwart mortal servants. Blessed with divine magic, you live the ideals of your faith, adorn yourself with the symbols of your church, and train diligently to wield your deity’s favored weapon. Your spells might protect and heal your allies, or they might punish foes and enemies of your faith, as your deity wills. Yours is a life of devotion, spreading the teachings of your faith through both word and deed.", 809 + "lang": "en", 810 + "name": "Cleric" 811 + }, 812 + { 813 + "description": "As divindades exercem sua vontade sobre o mundo de infinitas formas, e você é um de seus servos mortais mais resolutos. Abençoado com magia divina, você vive segundo os ideais de sua fé, se adorna com os símbolos de sua igreja e treina diligentemente para empunhar a arma favorita de sua divindade. Suas magias podem proteger e curar seus aliados ou punir os adversários e inimigos de sua fé, conforme a vontade de sua divindade. Você tem uma vida de devoção, pregando os ensinamentos de sua fé através das palavras e do exemplo", 814 + "lang": "pt", 815 + "name": "Clérigo" 816 + } 817 + ], 818 + "severity": "inform" 819 + }, 820 + { 821 + "adultOnly": false, 822 + "blurs": "none", 823 + "defaultSetting": "inform", 824 + "identifier": "druid", 825 + "locales": [ 826 + { 827 + "description": "The power of nature is impossible to resist. It can bring ruin to the stoutest fortress in minutes, reducing even the mightiest works to rubble, burning them to ash, burying them beneath an avalanche of snow, or drowning them beneath the waves. It can provide endless bounty and breathtaking splendor to those who respect it— and an agonizing death to those who take it too lightly. You are one of those who hear nature’s call. You stand in awe of the majesty of its power and give yourself over to its service.", 828 + "lang": "en", 829 + "name": "Druid" 830 + }, 831 + { 832 + "description": "É impossível resistir ao poder da natureza. Ela pode arruinar a mais resistente das fortalezas em minutos, reduzir até mesmo as obras mais bem feitas a detritos, queimá-las em cinzas, enterrá-las sob uma avalanche de neve ou submergi-las sob as ondas. Ela pode fornecer magnanimidade e esplendor de tirar o fôlego àqueles que a respeitam — e uma morte agonizante àqueles que a tratam levianamente. Você é um dos que ouvem o chamado da natureza. Você reverencia a majestade de seu poder e se entrega a seu serviço.", 833 + "lang": "pt", 834 + "name": "Druida" 835 + } 836 + ], 837 + "severity": "inform" 838 + }, 839 + { 840 + "adultOnly": false, 841 + "blurs": "none", 842 + "defaultSetting": "inform", 843 + "identifier": "fighter", 844 + "locales": [ 845 + { 846 + "description": "Fighting for honor, greed, loyalty, or simply the thrill of battle, you are an undisputed master of weaponry and combat techniques. You combine your actions through clever combinations of opening moves, finishing strikes, and counterattacks whenever your foes are unwise enough to drop their guard. Whether you are a knight, mercenary, sharpshooter, or blade master, you have honed your martial skills into an art form and perform devastating critical attacks on your enemies.", 847 + "lang": "en", 848 + "name": "Fighter" 849 + }, 850 + { 851 + "description": "Lutando por honra, ganância, lealdade ou simplesmente pela emoção da batalha, você é um mestre incontestável de armas e técnicas de combate. Você combate usando combinações inteligentes de movimentos de abertura, golpes de finalização e contra-ataques sempre que seus adversários agem imprudentemente e baixam a guarda. Seja um cavaleiro, mercenário, atirador ou mestre da lâmina, você aprimorou suas habilidades marciais como uma forma de arte e desfere ataques críticos e devastadores em seus inimigos", 852 + "lang": "pt", 853 + "name": "Guerreiro" 854 + } 855 + ], 856 + "severity": "inform" 857 + }, 858 + { 859 + "adultOnly": false, 860 + "blurs": "none", 861 + "defaultSetting": "inform", 862 + "identifier": "monk", 863 + "locales": [ 864 + { 865 + "description": "The strength of your fist flows from your mind and spirit. You seek perfection—honing your body into a flawless instrument and your mind into an orderly bastion of wisdom. You’re a fierce combatant renowned for martial arts skills and combat stances that grant you unique fighting moves. While the challenge of mastering many fighting styles drives you to great heights, you also enjoy meditating on philosophical questions and discovering new ways to obtain peace and enlightenment.", 866 + "lang": "en", 867 + "name": "Monk" 868 + }, 869 + { 870 + "description": "A força de seu punho flui de sua mente e espírito. Você busca a perfeição - aprimorando seu corpo em um instrumento impecável e sua mente em um bastião ordenado de sabedoria. Você é um combatente feroz, conhecido por suas habilidades em artes marciais e posições de combate que lhe conferem movimentos de luta exclusivos. Embora o desafio de dominar vários estilos de luta o leve a grandes alturas, você também gosta de meditar sobre questões filosóficas e descobrir novas maneiras de obter paz e iluminação.", 871 + "lang": "pt", 872 + "name": "Monge" 873 + } 874 + ], 875 + "severity": "inform" 876 + }, 877 + { 878 + "adultOnly": false, 879 + "blurs": "none", 880 + "defaultSetting": "inform", 881 + "identifier": "witch", 882 + "locales": [ 883 + { 884 + "description": "You command powerful magic, not through study or devotion to any ideal, but as a vessel or agent for a mysterious, otherworldly patron that even you don't entirely understand. This entity might be a covert divinity, a powerful fey, a manifestation of natural energies, an ancient spirit, or any other mighty supernatural being—but its nature is likely as much a mystery to you as it is to anyone else. Through a special familiar, your patron grants you versatile spells and powerful hexes to use as you see fit, though you're never certain if these gifts will end up serving your patron's larger plan.", 885 + "lang": "en", 886 + "name": "Witch" 887 + }, 888 + { 889 + "description": "Você comanda uma magia poderosa, não por meio de estudo ou devoção a qualquer ideal, mas como um recipiente ou agente de um patrono misterioso e de outro mundo que nem mesmo você entende completamente. Essa entidade pode ser uma divindade oculta, um fey poderoso, uma manifestação de energias naturais, um espírito antigo ou qualquer outro ser sobrenatural poderoso - mas sua natureza provavelmente é um mistério tanto para você quanto para qualquer outra pessoa. Por meio de um familiar especial, seu patrono lhe concede magias versáteis e feitiços poderosos para usar como quiser, embora você nunca tenha certeza se esses dons acabarão servindo ao plano maior de seu patrono.", 890 + "lang": "pt", 891 + "name": "Bruxa" 892 + } 893 + ], 894 + "severity": "inform" 895 + }, 896 + { 897 + "adultOnly": false, 898 + "blurs": "none", 899 + "defaultSetting": "inform", 900 + "identifier": "wizard", 901 + "locales": [ 902 + { 903 + "description": "You are an eternal student of the arcane secrets of the universe, using your mastery of magic to cast powerful and devastating spells. You treat magic like a science, cross-referencing the latest texts on practical spellcraft with ancient esoteric tomes to discover and understand how magic works. Yet magical theory is vast, and there’s no way you can study it all. You either specialize in one of the eight schools of magic, gaining deeper understanding of the nuances of those spells above all others, or favor a broader approach that emphasizes the way all magic comes together at the expense of depth.", 904 + "lang": "en", 905 + "name": "Wizard" 906 + }, 907 + { 908 + "description": "Você é um eterno estudante dos segredos arcanos do universo, utilizando sua maestria mística para conjurar magias poderosas e devastadoras. Você trata a magia como uma ciência, cruzando referências de textos mais recentes da prática mágica moderna com tomos esotéricos antigos para descobrir e compreender o funcionamento interno da magia. Porém, o campo da teoria mágica é vasto, e não há como você estudá-lo por completo. Você se especializa em uma das oito escolas de magia, aprofundando-se nas nuances desse tipo específico de magia ou assume uma abordagem mais ampla enfatizando os laços em comum que unem todas as magias.", 909 + "lang": "pt", 910 + "name": "Mago" 911 + } 912 + ], 913 + "severity": "inform" 914 + }, 915 + { 916 + "adultOnly": false, 917 + "blurs": "none", 918 + "defaultSetting": "inform", 919 + "identifier": "rogue", 920 + "locales": [ 921 + { 922 + "description": "You are skilled and opportunistic. Using your sharp wits and quick reactions, you take advantage of your opponents’ missteps and strike where it hurts most. You play a dangerous game, seeking thrills and testing your skills, and likely don’t care much for any laws that happen to get in your way. While the path of every rogue is unique and riddled with danger, the one thing you all share in common is the breadth and depth of your skills.", 923 + "lang": "en", 924 + "name": "Rogue" 925 + }, 926 + { 927 + "description": "Você é competente e oportunista. Usando sua perspicácia sagaz e reações rápidas, você tira vantagem dos erros de seus oponentes e ataca onde mais dói. Você faz apostas perigosas, caçando emoções e testando os limites de suas habilidades, e provavelmente não se importa muito com quaisquer leis que possam atrapalhar sua empreitada. Embora o caminho de todo ladino seja único e cheio de perigos, a única coisa que todos têm em comum é a variedade e profundidade de suas perícias.", 928 + "lang": "pt", 929 + "name": "Ladino" 930 + } 931 + ], 932 + "severity": "inform" 933 + }, 934 + { 935 + "adultOnly": false, 936 + "blurs": "none", 937 + "defaultSetting": "inform", 938 + "identifier": "ranger", 939 + "locales": [ 940 + { 941 + "description": "Some rangers believe civilization wears down the soul, but still needs to be protected from wild creatures. Others say nature needs to be protected from the greedy, who wish to tame its beauty and plunder its treasures. You could champion either goal, or both. You might be a scout, tracker, or hunter of fugitives or beasts, haunting the edge of civilization or exploring the wilds. You know how to live off the land and are skilled at spotting and taking down both opportune prey and hated enemies.", 942 + "lang": "en", 943 + "name": "Ranger" 944 + }, 945 + { 946 + "description": "Alguns patrulheiros acreditam que a civilização desgasta a alma, mas ainda precisa ser protegida de criaturas selvagens. Outros dizem que a natureza precisa ser protegida dos gananciosos, que desejam domar sua beleza e saquear seus tesouros. Você pode defender um desses objetivos ou mesmo ambos. Você pode ser um batedor, rastreador ou caçador de bestas ou de fugitivos, vivendo às margens da civilização ou explorando os ermos. Você sabe viver da terra e é competente em abater presas oportunas e inimigos odiados", 947 + "lang": "pt", 948 + "name": "Patrulheiro" 949 + } 950 + ], 951 + "severity": "inform" 952 + }, 953 + { 954 + "adultOnly": false, 955 + "blurs": "none", 956 + "defaultSetting": "inform", 957 + "identifier": "sorcerer", 958 + "locales": [ 959 + { 960 + "description": "You didn’t choose to become a spellcaster—you were born one. There’s magic in your blood, whether a divinity touched one of your ancestors, a forebear communed with a primal creature, or a powerful occult ritual influenced your line. Self-reflection and study allow you to refine your inherent magical skills and unlock new, more powerful abilities. The power in your blood carries a risk, however, and you constantly face the choice of whether you’ll rise to become a master spellcaster or fall into destruction.", 961 + "lang": "en", 962 + "name": "Sorcerer" 963 + }, 964 + { 965 + "description": "Você não escolheu se tornar um conjurador — você nasceu assim. A magia corre em seu sangue, seja porque uma divindade marcou um de seus ancestrais, porque um antepassado comungou com uma criatura primal ou porque um poderoso ritual ocultista influenciou sua linhagem. Autorreflexão e estudo lhe permitem refinar suas habilidades mágicas inerentes e acessar novas habilidades mais poderosas. Entretanto, o poder em seu sangue carrega um risco e você constantemente enfrenta a escolha de se erguer como um mestre conjurador ou sucumbir à destruição.", 966 + "lang": "pt", 967 + "name": "Feiticeiro" 968 + } 969 + ], 970 + "severity": "inform" 971 + }, 972 + { 973 + "adultOnly": false, 974 + "blurs": "none", 975 + "defaultSetting": "inform", 976 + "identifier": "psychic", 977 + "locales": [ 978 + { 979 + "description": "The mind can perceive truths hidden to fine-tuned instruments, house more secrets than any tome, and move objects and hearts more deftly than any lever. By delving into both the conscious and subconscious aspects of your inner self, you have awoken to the might of psychic magic, allowing you to cast spells not through incantations or gestures but by the power of your will alone. While the thin line between your mind and reality means that a single errant thought could have unintended consequences for yourself and your companions, you know that anything is possible, if you can imagine it.", 980 + "lang": "en", 981 + "name": "Psychic" 982 + }, 983 + { 984 + "description": "A mente é capaz de perceber verdades ocultas até mesmo em instrumentos afinados, de guardar mais segredos do que qualquer livro e de mover objetos e corações com mais destreza do que qualquer alavanca. Ao mergulhar nos aspectos conscientes e subconscientes do seu eu interior, você despertou para o poder da magia psíquica, o que lhe permite lançar feitiços não por meio de encantamentos ou gestos, mas apenas pelo poder da sua vontade. Embora a linha tênue entre sua mente e a realidade signifique que um único pensamento errôneo pode ter consequências indesejadas para você e seus companheiros, você sabe que tudo é possível, se você puder imaginar.", 985 + "lang": "pt", 986 + "name": "Psíquico" 987 + } 988 + ], 989 + "severity": "inform" 990 + }, 991 + { 992 + "adultOnly": false, 993 + "blurs": "none", 994 + "defaultSetting": "inform", 995 + "identifier": "kineticist", 996 + "locales": [ 997 + { 998 + "description": "The power of the elements flows from within you. Roaring fire, pure water, fleeting air, steadfast earth, twisting wood, slicing metal. A kinetic gate inextricably tied to your body channels power directly from the elemental planes, causing elements to leap to your hand, whirl around your body, and blast foes at your whim. As your connection to the planes grows, you attain true mastery over your chosen elements.", 999 + "lang": "en", 1000 + "name": "Kineticist" 1001 + }, 1002 + { 1003 + "description": "O poder dos elementos flui de dentro de você. Fogo crepitante, água pura, ar fugaz, terra firme, madeira retorcida, metal cortante. Um portal cinético inextricavelmente ligado ao seu corpo canaliza o poder diretamente dos planos elementais, fazendo com que os elementos saltem para a sua mão, girem em torno do seu corpo e explodam os inimigos a seu bel-prazer. À medida que sua conexão com os planos aumenta, você atinge o verdadeiro domínio sobre os elementos escolhidos.", 1004 + "lang": "pt", 1005 + "name": "Cineticista" 1006 + } 1007 + ], 1008 + "severity": "inform" 1009 + }, 1010 + { 1011 + "adultOnly": false, 1012 + "blurs": "none", 1013 + "defaultSetting": "inform", 1014 + "identifier": "summoner", 1015 + "locales": [ 1016 + { 1017 + "description": "You can magically beckon a powerful being called an eidolon to your side, serving as the mortal conduit that anchors it to the world. Whether your eidolon is a friend, a servant, or even a personal god, your connection to it marks you as extraordinary, shaping the course of your life dramatically", 1018 + "lang": "en", 1019 + "name": "Summoner" 1020 + }, 1021 + { 1022 + "description": "Você pode chamar magicamente um ser poderoso chamado eidolon para ficar ao seu lado, servindo como um canal mortal que o ancora ao mundo. Quer o seu eidolon seja um amigo, um servo ou até mesmo um deus pessoal, sua conexão com ele o marca como extraordinário, moldando dramaticamente o curso de sua vida", 1023 + "lang": "pt", 1024 + "name": "Invocador" 1025 + } 1026 + ], 1027 + "severity": "inform" 1028 + }, 1029 + { 1030 + "adultOnly": false, 1031 + "blurs": "none", 1032 + "defaultSetting": "inform", 1033 + "identifier": "oracle", 1034 + "locales": [ 1035 + { 1036 + "description": "Your conduit to divine power eschews the traditional channels of prayer and servitude—you instead glean divine truths that extend beyond any single deity. You understand the great mysteries of the universe embodied in overarching concepts that transcend good and evil or chaos and law, whether because you perceive the common ground across multiple deities or circumvent their power entirely. You explore one of these mysteries and draw upon its power to cast miraculous spells, but that power comes with a terrible price: a curse that grows stronger the more you draw upon it. Your abilities are a double-edged sword, which you might uphold as an instrument of the divine or view as a curse from the gods.", 1037 + "lang": "en", 1038 + "name": "Oracle" 1039 + }, 1040 + { 1041 + "description": "Seu canal para o poder divino evita os canais tradicionais de oração e servidão - em vez disso, você colhe verdades divinas que vão além de qualquer divindade. Você entende os grandes mistérios do universo incorporados em conceitos abrangentes que transcendem o bem e o mal ou o caos e a lei, seja porque você percebe a base comum entre várias divindades ou porque contorna totalmente o poder delas. Você explora um desses mistérios e utiliza seu poder para lançar feitiços milagrosos, mas esse poder tem um preço terrível: uma maldição que se torna mais forte quanto mais você a utiliza. Suas habilidades são uma faca de dois gumes, que você pode defender como um instrumento do divino ou ver como uma maldição dos deuses.", 1042 + "lang": "pt", 1043 + "name": "Oráculo" 1044 + } 1045 + ], 1046 + "severity": "inform" 1047 + }, 1048 + { 1049 + "adultOnly": false, 1050 + "blurs": "none", 1051 + "defaultSetting": "inform", 1052 + "identifier": "investigator", 1053 + "locales": [ 1054 + { 1055 + "description": "You seek to uncover the truth, doggedly pursuing leads to reveal the plots of devious villains, discover ancient secrets, or unravel other mysteries. Your analytical mind quickly formulates solutions to complicated problems and your honed senses identify even the most obscure clues. Wielding knowledge as a weapon, you study the creatures and dangers you encounter to exploit their weaknesses.", 1056 + "lang": "en", 1057 + "name": "Investigator" 1058 + }, 1059 + { 1060 + "description": "Você busca descobrir a verdade, perseguindo obstinadamente pistas para revelar as tramas de vilões desonestos, descobrir segredos antigos ou desvendar outros mistérios. Sua mente analítica formula rapidamente soluções para problemas complicados e seus sentidos aguçados identificam até mesmo as pistas mais obscuras. Empunhando o conhecimento como uma arma, você estuda as criaturas e os perigos que encontra para explorar seus pontos fracos.", 1061 + "lang": "pt", 1062 + "name": "Investigador" 1063 + } 1064 + ], 1065 + "severity": "inform" 1066 + }, 1067 + { 1068 + "adultOnly": false, 1069 + "blurs": "none", 1070 + "defaultSetting": "inform", 1071 + "identifier": "swashbuckler", 1072 + "locales": [ 1073 + { 1074 + "description": "Many warriors rely on brute force, weighty armor, or cumbersome weapons. For you, battle is a dance where you move among foes with style and grace. You dart among combatants with flair and land powerful finishing moves with a flick of the wrist and a flash of the blade, all while countering attacks with elegant ripostes that keep enemies off balance. Harassing and thwarting your foes lets you charm fate and cheat death time and again with aplomb and plenty of flair.", 1075 + "lang": "en", 1076 + "name": "Swashbuckler" 1077 + }, 1078 + { 1079 + "description": "Muitos guerreiros dependem da força bruta, de armaduras pesadas ou de armas incômodas. Para você, a batalha é uma dança em que você se move entre os inimigos com estilo e graça. Você se lança entre os combatentes com elegância e executa golpes finais poderosos com um movimento do pulso e um lampejo da lâmina, ao mesmo tempo em que rebate os ataques com jogadas elegantes que mantêm os inimigos desequilibrados. Ao perseguir e frustrar seus adversários, você pode encantar o destino e enganar a morte várias vezes com desenvoltura e muito talento.", 1080 + "lang": "pt", 1081 + "name": "Pirata" 1082 + } 1083 + ], 1084 + "severity": "inform" 1085 + }, 1086 + { 1087 + "adultOnly": false, 1088 + "blurs": "none", 1089 + "defaultSetting": "inform", 1090 + "identifier": "magus", 1091 + "locales": [ 1092 + { 1093 + "description": "Combining the physicality and technique of a warrior with the ability to cast arcane magic, you seek to perfect the art of fusing spell and strike. While the hefty tome you carry reflects hours conducting arcane research, your enemies need no reminder of your training. They recognize it as you take them down.", 1094 + "lang": "en", 1095 + "name": "Magus" 1096 + }, 1097 + { 1098 + "description": "Combinando a fisicalidade e a técnica de um guerreiro com a capacidade de lançar magia arcana, você busca aperfeiçoar a arte de fundir feitiço e ataque. Embora o pesado tomo que você carrega reflita horas de pesquisa arcana, seus inimigos não precisam se lembrar de seu treinamento. Eles o reconhecem quando você os derruba.", 1099 + "lang": "pt", 1100 + "name": "Magus" 1101 + } 1102 + ], 1103 + "severity": "inform" 1104 + }, 1105 + { 1106 + "adultOnly": false, 1107 + "blurs": "none", 1108 + "defaultSetting": "inform", 1109 + "identifier": "thaumaturge", 1110 + "locales": [ 1111 + { 1112 + "description": "The world is full of the unexplainable: ancient magic, dead gods, and even stranger things. In response, you've scavenged the best parts of every magical tradition and built up a collection of esoterica—a broken holy relic here, a sprig of mistletoe there—that you can use to best any creature by exploiting their weaknesses and vulnerabilities. The mystic implement you carry is both badge and weapon, its symbolic weight helping you bargain with and subdue the supernatural. Every path to power has its restrictions and costs, but you turn them all to your advantage. You're a thaumaturge, and you work wonders.", 1113 + "lang": "en", 1114 + "name": "Thaumaturge" 1115 + }, 1116 + { 1117 + "description": "O mundo está cheio do inexplicável: magia antiga, deuses mortos e coisas ainda mais estranhas. Em resposta a isso, você pegou as melhores partes de todas as tradições mágicas e construiu uma coleção de esotéricos - uma relíquia sagrada quebrada aqui, um ramo de visco ali - que você pode usar para superar qualquer criatura explorando suas fraquezas e vulnerabilidades. O implemento místico que você carrega é tanto uma insígnia quanto uma arma, pois seu peso simbólico o ajuda a negociar e subjugar o sobrenatural. Cada caminho para o poder tem suas restrições e custos, mas você os utiliza em seu benefício. Você é um taumaturgo e faz maravilhas.", 1118 + "lang": "pt", 1119 + "name": "Taumaturgo" 1120 + } 1121 + ], 1122 + "severity": "inform" 1123 + }, 1124 + { 1125 + "adultOnly": false, 1126 + "blurs": "none", 1127 + "defaultSetting": "inform", 1128 + "identifier": "dwarf", 1129 + "locales": [ 1130 + { 1131 + "description": "Dwarves are a short, stocky people who are often stubborn, fierce, and devoted.", 1132 + "lang": "en", 1133 + "name": "Dwarf" 1134 + }, 1135 + { 1136 + "description": "Anões possuem uma reputação merecida como um povo estoico e austero, arraigado em cidadelas e cidades esculpidas de rocha sólida. Embora alguns os vejam como carrancudos artesãos de pedra e metal, apenas os anões e aqueles que os conhecem de perto compreendem o seu zelo irrefreável pelo trabalho e a sua dedicação à qualidade em vez de quantidade. Para um estranho eles podem parecer desconfiados e reclusos em seus clãs, mas os anões são calorosos e atenciosos com seus amigos e família — preenchendo seus salões com o som de risadas e martelos batendo em bigornas.", 1137 + "lang": "pt", 1138 + "name": "Anão" 1139 + } 1140 + ], 1141 + "severity": "inform" 1142 + }, 1143 + { 1144 + "adultOnly": false, 1145 + "blurs": "none", 1146 + "defaultSetting": "inform", 1147 + "identifier": "elf", 1148 + "locales": [ 1149 + { 1150 + "description": "Elves are a tall, long-lived people with a strong tradition of art and magic.", 1151 + "lang": "en", 1152 + "name": "Elf" 1153 + }, 1154 + { 1155 + "description": "Como um povo antigo, elfos presenciaram enormes mudanças e possuem uma perspectiva única, que só é possível ao testemunhar o arco da história. Após deixarem o mundo em tempos antigos, eles retornaram a uma terra quase irreconhecível e ainda lutam para reivindicar seus lares ancestrais — especialmente aquelas invadidas por demônios terríveis. Para alguns, os elfos são alvo de admiração — graciosos e belos, com imenso talento e conhecimento. Contudo, os próprios elfos dão muito mais importância à sua liberdade pessoal do que a viver segundo estes ideais.", 1156 + "lang": "pt", 1157 + "name": "Elfo" 1158 + } 1159 + ], 1160 + "severity": "inform" 1161 + }, 1162 + { 1163 + "adultOnly": false, 1164 + "blurs": "none", 1165 + "defaultSetting": "inform", 1166 + "identifier": "gnome", 1167 + "locales": [ 1168 + { 1169 + "description": "Gnomes are short and hardy folk, with an unquenchable curiosity and eccentric habits.", 1170 + "lang": "en", 1171 + "name": "Gnome" 1172 + }, 1173 + { 1174 + "description": "Muito tempo atrás, os primeiros ancestrais gnomos emigraram do Primeiro Mundo, o reino das fadas. Embora não seja claro o motivo da peregrinação inicial dos gnomos para Golarion, esta linhagem féerica se manifesta nos gnomos modernos como um raciocínio bizarro, excentricidade, tendências obsessivas e algo geralmente visto como ingenuidade. As suas origens de outro mundo se refletem mais ainda em suas características físicas, como membros esguios, cabelos de cores brilhantes e traços faciais infantis e extremamente expressivos.", 1175 + "lang": "pt", 1176 + "name": "Gnomo" 1177 + } 1178 + ], 1179 + "severity": "inform" 1180 + }, 1181 + { 1182 + "adultOnly": false, 1183 + "blurs": "none", 1184 + "defaultSetting": "inform", 1185 + "identifier": "goblin", 1186 + "locales": [ 1187 + { 1188 + "description": "Goblins are a short, scrappy, energetic people who have spent millennia maligned and feared.", 1189 + "lang": "en", 1190 + "name": "Goblin" 1191 + }, 1192 + { 1193 + "description": "As histórias convolutas às quais outras pessoas se prendem não interessam aos goblins. Este povo pequeno vive no momento, e prefere histórias exageradas a registros concretos. Guerras que ocorreram algumas décadas atrás são praticamente história antiga. Incompreendidos pelos outros povos, os goblins são felizes à sua própria maneira. As virtudes dos goblins incluem ser presentes, criativos e honestos. Eles se esforçam em levar vidas cheias de satisfação em vez de preocuparem-se com o final de suas jornadas. Contar histórias, sem serem pedantes a respeito dos detalhes dos fatos. Eles podem ser baixos, mas sonham alto.", 1194 + "lang": "pt", 1195 + "name": "Goblin" 1196 + } 1197 + ], 1198 + "severity": "inform" 1199 + }, 1200 + { 1201 + "adultOnly": false, 1202 + "blurs": "none", 1203 + "defaultSetting": "inform", 1204 + "identifier": "halfling", 1205 + "locales": [ 1206 + { 1207 + "description": "Halflings are a short, resilient people who exhibit remarkable curiosity and humor.", 1208 + "lang": "en", 1209 + "name": "Halfling" 1210 + }, 1211 + { 1212 + "description": "Sem um lugar para chamar de seu, halflings controlam poucos assentamentos maiores do que aldeias. Em vez disso, eles frequentemente vivem entre humanos dentro das muralhas de cidades maiores, montando pequenas comunidades junto dos povos mais altos. Muitos halflings levam vidas perfeitamente satisfatórias às sombras de seus vizinhos maiores, enquanto outros preferem uma existência nômade — viajando o mundo e se aproveitando de quaisquer oportunidades e aventuras que surjam", 1213 + "lang": "pt", 1214 + "name": "Halfling" 1215 + } 1216 + ], 1217 + "severity": "inform" 1218 + }, 1219 + { 1220 + "adultOnly": false, 1221 + "blurs": "none", 1222 + "defaultSetting": "inform", 1223 + "identifier": "human", 1224 + "locales": [ 1225 + { 1226 + "description": "Humans are diverse and adaptable people with wide potential and deep ambitions.", 1227 + "lang": "en", 1228 + "name": "Human" 1229 + }, 1230 + { 1231 + "description": "Tão imprevisíveis e variados como os outros povos de Golarion, humanos possuem uma motivação excepcional e uma grande capacidade de tolerar e expandir. Embora muitas civilizações tenham prosperado antes da ascensão da humanidade, os humanos construíram algumas das maiores e mais terríveis sociedades em todo o curso da história, tornando-se o povo mais populoso nos reinos ao redor do Mar Interior", 1232 + "lang": "pt", 1233 + "name": "Humano" 1234 + } 1235 + ], 1236 + "severity": "inform" 1237 + }, 1238 + { 1239 + "adultOnly": false, 1240 + "blurs": "none", 1241 + "defaultSetting": "inform", 1242 + "identifier": "leshy", 1243 + "locales": [ 1244 + { 1245 + "description": "Leshies are immortal nature spirits placed in small plant bodies, seeking to experience the world.", 1246 + "lang": "en", 1247 + "name": "Leshy" 1248 + }, 1249 + { 1250 + "description": "Leshies são espíritos imortais da natureza colocados em pequenos corpos de plantas, buscando experimentar o mundo.", 1251 + "lang": "pt", 1252 + "name": "Leshy" 1253 + } 1254 + ], 1255 + "severity": "inform" 1256 + }, 1257 + { 1258 + "adultOnly": false, 1259 + "blurs": "none", 1260 + "defaultSetting": "inform", 1261 + "identifier": "orc", 1262 + "locales": [ 1263 + { 1264 + "description": "Orcs are proud, strong people with hardened physiques who value physical might and glory in combat.", 1265 + "lang": "en", 1266 + "name": "Orc" 1267 + }, 1268 + { 1269 + "description": "Os orcs são pessoas orgulhosas e fortes, com um físico robusto que valoriza o poder físico e a glória em combate.", 1270 + "lang": "pt", 1271 + "name": "Orc" 1272 + } 1273 + ], 1274 + "severity": "inform" 1275 + }, 1276 + { 1277 + "adultOnly": false, 1278 + "blurs": "none", 1279 + "defaultSetting": "inform", 1280 + "identifier": "azarketi", 1281 + "locales": [ 1282 + { 1283 + "description": "Azarketis, inheritors of a shattered empire's legacy, hold their proud traditions close but still surface to interact with the rest of the world.", 1284 + "lang": "en", 1285 + "name": "Azarketi" 1286 + }, 1287 + { 1288 + "description": "Os Azarketis, herdeiros do legado de um império destruído, mantêm suas orgulhosas tradições, mas ainda assim vêm à tona para interagir com o resto do mundo.", 1289 + "lang": "pt", 1290 + "name": "Azarketi" 1291 + } 1292 + ], 1293 + "severity": "inform" 1294 + }, 1295 + { 1296 + "adultOnly": false, 1297 + "blurs": "none", 1298 + "defaultSetting": "inform", 1299 + "identifier": "catfolk", 1300 + "locales": [ 1301 + { 1302 + "description": "Curious and gregarious wanderers, catfolk combine features of felines and humanoids in both appearance and temperament. They enjoy learning new things, collecting new tales and trinkets, and ensuring their loved ones are safe and happy. Catfolk view themselves as chosen guardians of natural places in the world and are often recklessly brave, even in the face of overwhelming opposition.", 1303 + "lang": "en", 1304 + "name": "Catfolk" 1305 + }, 1306 + { 1307 + "description": "Andarilhos curiosos e gregários, os catfolk combinam características de felinos e humanóides tanto na aparência quanto no temperamento. Eles gostam de aprender coisas novas, colecionar novos contos e bugigangas e garantir que seus entes queridos estejam seguros e felizes. Os catfolk se consideram guardiões escolhidos de lugares naturais do mundo e, muitas vezes, são imprudentemente corajosos, mesmo diante de uma oposição esmagadora.", 1308 + "lang": "pt", 1309 + "name": "Catfolk" 1310 + } 1311 + ], 1312 + "severity": "inform" 1313 + }, 1314 + { 1315 + "adultOnly": false, 1316 + "blurs": "none", 1317 + "defaultSetting": "inform", 1318 + "identifier": "fetchling", 1319 + "locales": [ 1320 + { 1321 + "description": "Once human and now something apart, fetchlings display the Shadow Plane's ancient influence through monochrome complexions, glowing eyes, and the casting of supernatural shadows.", 1322 + "lang": "en", 1323 + "name": "Fetchling" 1324 + }, 1325 + { 1326 + "description": "Outrora humanos e agora algo à parte, os fetchlings demonstram a antiga influência do Plano das Sombras por meio de tez monocromática, olhos brilhantes e o lançamento de sombras sobrenaturais.", 1327 + "lang": "pt", 1328 + "name": "Fetchling" 1329 + } 1330 + ], 1331 + "severity": "inform" 1332 + }, 1333 + { 1334 + "adultOnly": false, 1335 + "blurs": "none", 1336 + "defaultSetting": "inform", 1337 + "identifier": "gnoll", 1338 + "locales": [ 1339 + { 1340 + "description": "Powerfully-built humanoids that resemble hyenas, gnolls are cunning warriors and hunters. Their frightening visage and efficient tactics have given them an ill-starred reputation.", 1341 + "lang": "en", 1342 + "name": "Gnoll" 1343 + }, 1344 + { 1345 + "description": "Humanóides de constituição poderosa que se assemelham a hienas, os gnolls são guerreiros e caçadores astutos. Sua aparência assustadora e suas táticas eficientes lhes deram uma reputação de mau-caráter.", 1346 + "lang": "pt", 1347 + "name": "Gnoll" 1348 + } 1349 + ], 1350 + "severity": "inform" 1351 + }, 1352 + { 1353 + "adultOnly": false, 1354 + "blurs": "none", 1355 + "defaultSetting": "inform", 1356 + "identifier": "grippli", 1357 + "locales": [ 1358 + { 1359 + "description": "Gripplis are a shy and cautious people who generally seek to avoid being drawn into the complicated and dangerous affairs of others. Despite their outlook and small stature, gripplis often take bold and noble action when the situation demands it.", 1360 + "lang": "en", 1361 + "name": "Grippli" 1362 + }, 1363 + { 1364 + "description": "Os gripplis são pessoas tímidas e cautelosas que geralmente procuram evitar se envolver em assuntos complicados e perigosos de outras pessoas. Apesar de sua perspectiva e pequena estatura, os gripplis costumam tomar atitudes ousadas e nobres quando a situação exige.", 1365 + "lang": "pt", 1366 + "name": "Grippli" 1367 + } 1368 + ], 1369 + "severity": "inform" 1370 + }, 1371 + { 1372 + "adultOnly": false, 1373 + "blurs": "none", 1374 + "defaultSetting": "inform", 1375 + "identifier": "hobgoblin", 1376 + "locales": [ 1377 + { 1378 + "description": "Taller and stronger than their goblin kin, hobgoblins are equals in strength and size to humans, with broad shoulders and long, powerful arms.", 1379 + "lang": "en", 1380 + "name": "Hobgoblin" 1381 + }, 1382 + { 1383 + "description": "Mais altos e mais fortes do que seus parentes goblins, os hobgoblins são iguais em força e tamanho aos humanos, com ombros largos e braços longos e poderosos.", 1384 + "lang": "pt", 1385 + "name": "Hobgoblin" 1386 + } 1387 + ], 1388 + "severity": "inform" 1389 + }, 1390 + { 1391 + "adultOnly": false, 1392 + "blurs": "none", 1393 + "defaultSetting": "inform", 1394 + "identifier": "kitsune", 1395 + "locales": [ 1396 + { 1397 + "description": "Kitsune are a charismatic and witty people with a connection to the spiritual that grants them many magical abilities, chiefly the power to shapechange into other forms. Whether they pass unseen among other peoples or hold their tails high, kitsune are clever observers of the societies around them.", 1398 + "lang": "en", 1399 + "name": "Kitsune" 1400 + }, 1401 + { 1402 + "description": "Os Kitsune são um povo carismático e espirituoso com uma conexão com o espiritual que lhes concede muitas habilidades mágicas, principalmente o poder de se transformar em outras formas. Quer passem despercebidos entre os outros povos ou mantenham a cauda erguida, os kitsune são observadores inteligentes das sociedades ao seu redor.", 1403 + "lang": "pt", 1404 + "name": "Kitsune" 1405 + } 1406 + ], 1407 + "severity": "inform" 1408 + }, 1409 + { 1410 + "adultOnly": false, 1411 + "blurs": "none", 1412 + "defaultSetting": "inform", 1413 + "identifier": "kobold", 1414 + "locales": [ 1415 + { 1416 + "description": "Every kobold knows that their slight frame belies true, mighty draconic power. They are ingenious crafters and devoted allies within their warrens, but those who trespass into their territory find them to be inspired skirmishers, especially when they have the backing of a draconic sorcerer or true dragon overlord. However, these reptilian opportunists prove happy to cooperate with other humanoids when it’s to their benefit, combining caution and cunning to make their fortunes in the wider world.", 1417 + "lang": "en", 1418 + "name": "Kobold" 1419 + }, 1420 + { 1421 + "description": "Todos os kobolds sabem que sua estrutura leve esconde o verdadeiro e poderoso poder dracônico. Eles são engenhosos artesãos e aliados devotados em seus redutos, mas aqueles que invadem seu território os consideram inspirados lutadores, especialmente quando contam com o apoio de um feiticeiro dracônico ou de um verdadeiro senhor dos dragões. No entanto, esses oportunistas reptilianos se mostram felizes em cooperar com outros humanoides quando isso é benéfico para eles, combinando cautela e astúcia para fazer fortuna no mundo mais amplo.", 1422 + "lang": "pt", 1423 + "name": "Kobold" 1424 + } 1425 + ], 1426 + "severity": "inform" 1427 + }, 1428 + { 1429 + "adultOnly": false, 1430 + "blurs": "none", 1431 + "defaultSetting": "inform", 1432 + "identifier": "lizardfolk", 1433 + "locales": [ 1434 + { 1435 + "description": "Lizardfolk are consummate survivors, heirs to empires considered ancient even by the elves.", 1436 + "lang": "en", 1437 + "name": "Lizardfolk" 1438 + }, 1439 + { 1440 + "description": "Os Lizardfolk são sobreviventes consumados, herdeiros de impérios considerados antigos até mesmo pelos elfos.", 1441 + "lang": "pt", 1442 + "name": "Lizardfolk" 1443 + } 1444 + ], 1445 + "severity": "inform" 1446 + }, 1447 + { 1448 + "adultOnly": false, 1449 + "blurs": "none", 1450 + "defaultSetting": "inform", 1451 + "identifier": "nagaji", 1452 + "locales": [ 1453 + { 1454 + "description": "With humanoid figures and serpentine heads, nagaji are heralds, companions, and servitors of powerful nagas. They hold a deep reverence for holy areas and spiritual truths, an aspect many others find as intimidating as a nagaji's appearance.", 1455 + "lang": "en", 1456 + "name": "Nagaji" 1457 + }, 1458 + { 1459 + "description": "Com figuras humanoides e cabeças serpentinas, os nagaji são arautos, companheiros e servos de nagas poderosos. Eles têm uma profunda reverência por áreas sagradas e verdades espirituais, um aspecto que muitos outros consideram tão intimidador quanto a aparência de um nagaji.", 1460 + "lang": "pt", 1461 + "name": "Nagaji" 1462 + } 1463 + ], 1464 + "severity": "inform" 1465 + }, 1466 + { 1467 + "adultOnly": false, 1468 + "blurs": "none", 1469 + "defaultSetting": "inform", 1470 + "identifier": "ratfolk", 1471 + "locales": [ 1472 + { 1473 + "description": "Ysoki—as ratfolk call themselves—are a clever, adaptable, and fastidious ancestry who happily crowd their large families into the smallest of living spaces.", 1474 + "lang": "en", 1475 + "name": "Ratfolk" 1476 + }, 1477 + { 1478 + "description": "Os ysoki - como os ratfolk se autodenominam - são uma linhagem inteligente, adaptável e meticulosa que aglomera alegremente suas famílias numerosas nos menores espaços habitáveis.", 1479 + "lang": "pt", 1480 + "name": "Ratfolk" 1481 + } 1482 + ], 1483 + "severity": "inform" 1484 + }, 1485 + { 1486 + "adultOnly": false, 1487 + "blurs": "none", 1488 + "defaultSetting": "inform", 1489 + "identifier": "tengu", 1490 + "locales": [ 1491 + { 1492 + "description": "Tengus are a gregarious and resourceful people that have spread far and wide from their ancestral home in Tian Xia, collecting and combining whatever innovations and traditions they happen across with those from their own long history.", 1493 + "lang": "en", 1494 + "name": "Tengu" 1495 + }, 1496 + { 1497 + "description": "Os tengus são um povo gregário e engenhoso que se espalhou por toda parte a partir de seu lar ancestral em Tian Xia, coletando e combinando quaisquer inovações e tradições que encontrem com as de sua própria longa história.", 1498 + "lang": "pt", 1499 + "name": "Tengu" 1500 + } 1501 + ], 1502 + "severity": "inform" 1503 + }, 1504 + { 1505 + "adultOnly": false, 1506 + "blurs": "none", 1507 + "defaultSetting": "inform", 1508 + "identifier": "vanara", 1509 + "locales": [ 1510 + { 1511 + "description": "Vanaras are inquisitive and mischievous monkey-like humanoids with short, soft fur, expressive eyes, and long, prehensile tails. Their handlike feet and agile builds serve them well in the jungle realms where most vanaras live.", 1512 + "lang": "en", 1513 + "name": "Vanara" 1514 + }, 1515 + { 1516 + "description": "Os vanaras são humanoides curiosos e travessos, semelhantes a macacos, com pelo curto e macio, olhos expressivos e caudas longas e preênseis. Seus pés semelhantes a mãos e sua constituição ágil são muito úteis nos reinos da selva onde a maioria dos vanaras vive.", 1517 + "lang": "pt", 1518 + "name": "Vanara" 1519 + } 1520 + ], 1521 + "severity": "inform" 1522 + }, 1523 + { 1524 + "adultOnly": false, 1525 + "blurs": "none", 1526 + "defaultSetting": "inform", 1527 + "identifier": "android", 1528 + "locales": [ 1529 + { 1530 + "description": "Androids tend to be logical introverts, rational and contemplative. Insatiably curious, with an urge to understand themselves and the world around them, androids place great value on intellectual pursuits. They have difficulty interpreting and expressing emotions, both in themselves and in others, which makes them seem distant and uncaring. While androids can forge emotional bonds, they find it more difficult to connect with non-androids.", 1531 + "lang": "en", 1532 + "name": "Android" 1533 + }, 1534 + { 1535 + "description": "Os androides tendem a ser introvertidos lógicos, racionais e contemplativos. Insaciavelmente curiosos, com um desejo de entender a si mesmos e o mundo ao seu redor, os androides valorizam muito as atividades intelectuais. Eles têm dificuldade para interpretar e expressar emoções, tanto em si mesmos quanto nos outros, o que os faz parecer distantes e indiferentes. Embora os androides possam criar laços emocionais, eles têm mais dificuldade de se conectar com os não androides.", 1536 + "lang": "pt", 1537 + "name": "Androide" 1538 + } 1539 + ], 1540 + "severity": "inform" 1541 + }, 1542 + { 1543 + "adultOnly": false, 1544 + "blurs": "none", 1545 + "defaultSetting": "inform", 1546 + "identifier": "tiefling", 1547 + "locales": [ 1548 + { 1549 + "description": "Simultaneously more and less than mortal, tieflings are the offspring of humans and fiends. With otherworldly blood and traits to match, tieflings are often shunned and despised out of reactionary fear. Most tieflings never know their fiendish sire, as the coupling that produced their curse occurred generations earlier.", 1550 + "lang": "en", 1551 + "name": "Tiefling" 1552 + }, 1553 + { 1554 + "description": "Simultaneamente mais e menos que mortais, os tieflings são descendentes de humanos e demônios. Com sangue e características de outro mundo, os tieflings são frequentemente evitados e desprezados por medo reacionário. A maioria dos tieflings nunca conhece seu pai demoníaco, pois o acoplamento que produziu sua maldição ocorreu gerações antes.", 1555 + "lang": "pt", 1556 + "name": "Tiefling" 1557 + } 1558 + ], 1559 + "severity": "inform" 1560 + } 1561 + ], 1562 + "labelValues": [ 1563 + "label-name", 1564 + "alchemist", 1565 + "barbarian", 1566 + "bard", 1567 + "champion", 1568 + "cleric", 1569 + "druid", 1570 + "fighter", 1571 + "monk", 1572 + "witch", 1573 + "wizard", 1574 + "rogue", 1575 + "ranger", 1576 + "sorcerer", 1577 + "psychic", 1578 + "kineticist", 1579 + "summoner", 1580 + "oracle", 1581 + "investigator", 1582 + "magus", 1583 + "swashbuckler", 1584 + "thaumaturge", 1585 + "dwarf", 1586 + "elf", 1587 + "gnome", 1588 + "goblin", 1589 + "halfling", 1590 + "human", 1591 + "leshy", 1592 + "orc", 1593 + "azarketi", 1594 + "catfolk", 1595 + "fetchling", 1596 + "gnoll", 1597 + "grippli", 1598 + "hobgoblin", 1599 + "kitsune", 1600 + "kobold", 1601 + "lizardfolk", 1602 + "nagaji", 1603 + "ratfolk", 1604 + "tengu", 1605 + "vanara", 1606 + "android", 1607 + "tiefling" 1608 + ] 1609 + }, 1610 + "$type": "app.bsky.labeler.defs#labelerViewDetailed" 1611 + }, 1612 + { 1613 + "uri": "at://did:plc:ktsce3phkmxgy4mhvmhkemys/app.bsky.labeler.service/self", 1614 + "cid": "bafyreifztyf2qzm2aa2jy6ktqpzcbd5t7yhu6eokb5ekmqifvao6d7ocke", 1615 + "creator": { 1616 + "did": "did:plc:ktsce3phkmxgy4mhvmhkemys", 1617 + "handle": "brakgul.bsky.social", 1618 + "displayName": "⚔️ Battlemaster ⚔️", 1619 + "avatar": "https://cdn.bsky.app/img/avatar/plain/did:plc:ktsce3phkmxgy4mhvmhkemys/bafkreibo24pqffnribk565phhqtxgx2psttfktstuaztyvzlrcg2d7l63e@jpeg", 1620 + "associated": { "labeler": true, "activitySubscription": { "allowSubscriptions": "followers" } }, 1621 + "viewer": { 1622 + "muted": false, 1623 + "blockedBy": false, 1624 + "following": "at://did:plc:yfvwmnlztr4dwkb7hwz55r2g/app.bsky.graph.follow/3l7ox2luaa32s" 1625 + }, 1626 + "labels": [], 1627 + "createdAt": "2024-10-09T15:58:16.808Z", 1628 + "description": "Rise up, warriors of the keyboard! Blood and glory await us. Grab a label and prepare for the greatest battle of our time... posting online.", 1629 + "indexedAt": "2024-10-30T22:56:54.629Z" 1630 + }, 1631 + "likeCount": 12, 1632 + "viewer": { "like": "at://did:plc:yfvwmnlztr4dwkb7hwz55r2g/app.bsky.feed.like/3l7ox3zr5cw22" }, 1633 + "indexedAt": "2024-10-29T22:06:00.822Z", 1634 + "labels": [], 1635 + "policies": { 1636 + "labelValueDefinitions": [ 1637 + { 1638 + "adultOnly": false, 1639 + "blurs": "none", 1640 + "defaultSetting": "warn", 1641 + "identifier": "pvp", 1642 + "locales": [ 1643 + { 1644 + "description": "A keyboard warrior who thrives in the trenches of the replies. May your wit be sharp and your words strike true. LOK'TAR OGAR!", 1645 + "lang": "en", 1646 + "name": "PvP ⚔️" 1647 + } 1648 + ], 1649 + "severity": "inform" 1650 + }, 1651 + { 1652 + "adultOnly": false, 1653 + "blurs": "none", 1654 + "defaultSetting": "warn", 1655 + "identifier": "pve", 1656 + "locales": [ 1657 + { 1658 + "description": "Not willing to queue up for battlegrounds. You're just here to level professions and browse some custom feeds. Work work.", 1659 + "lang": "en", 1660 + "name": "PvE 🛡" 1661 + } 1662 + ], 1663 + "severity": "inform" 1664 + }, 1665 + { 1666 + "adultOnly": false, 1667 + "blurs": "none", 1668 + "defaultSetting": "warn", 1669 + "identifier": "rp", 1670 + "locales": [{ "description": "The discourse was merely a setback!", "lang": "en", "name": "RP 🎭" }], 1671 + "severity": "inform" 1672 + } 1673 + ], 1674 + "labelValues": ["pvp", "pve", "rp"] 1675 + }, 1676 + "$type": "app.bsky.labeler.defs#labelerViewDetailed" 1677 + }, 1678 + { 1679 + "uri": "at://did:plc:skibpmllbhxvbvwgtjxl3uao/app.bsky.labeler.service/self", 1680 + "cid": "bafyreigbdrixufncqe4bn7recb6gaeaejmzkvxkdcappstsxkgyrhnw46a", 1681 + "creator": { 1682 + "did": "did:plc:skibpmllbhxvbvwgtjxl3uao", 1683 + "handle": "anti-aging.bsky.social", 1684 + "displayName": "Anti-Aging", 1685 + "avatar": "https://cdn.bsky.app/img/avatar/plain/did:plc:skibpmllbhxvbvwgtjxl3uao/bafkreihiwmmbhaviyucjicvmdcqgcs6wdn2jtb3rnikp44bbxeien34e4q@jpeg", 1686 + "associated": { "labeler": true, "activitySubscription": { "allowSubscriptions": "followers" } }, 1687 + "viewer": { "muted": false, "blockedBy": false }, 1688 + "labels": [], 1689 + "createdAt": "2024-03-21T17:08:47.399Z", 1690 + "description": "Critics are saying:\n\"deeply fucking unserious labeler\"\n\"cringe fr\"\n\"sad lonely jackass\"\n\"hateful rightwing shrew who can't make friends\"\n\"Moderation as satire has arrived\"\n\"the anti-aging labeller is fun, even though whoever runs it is clearly insane\"", 1691 + "indexedAt": "2024-05-24T14:02:08.055Z" 1692 + }, 1693 + "likeCount": 149, 1694 + "viewer": {}, 1695 + "indexedAt": "2025-10-19T17:21:45.364Z", 1696 + "labels": [], 1697 + "policies": { 1698 + "labelValueDefinitions": [ 1699 + { 1700 + "adultOnly": false, 1701 + "blurs": "content", 1702 + "defaultSetting": "warn", 1703 + "identifier": "understands-jokes", 1704 + "locales": [ 1705 + { "description": "The joke understander has logged on", "lang": "en", "name": "Understands Jokes" } 1706 + ], 1707 + "severity": "alert" 1708 + }, 1709 + { 1710 + "adultOnly": false, 1711 + "blurs": "none", 1712 + "defaultSetting": "warn", 1713 + "identifier": "rizz-debuffed", 1714 + "locales": [ 1715 + { 1716 + "description": "This user appears to have come under the effect of some sort of charisma debuff. Likely to fail an attempt to riff.", 1717 + "lang": "en", 1718 + "name": "Charisma Debuffed" 1719 + } 1720 + ], 1721 + "severity": "inform" 1722 + }, 1723 + { 1724 + "adultOnly": false, 1725 + "blurs": "none", 1726 + "defaultSetting": "warn", 1727 + "identifier": "follow-back-whining", 1728 + "locales": [ 1729 + { 1730 + "description": "Posts about follow-backs and wanting follow-backs and isn't Mary 62", 1731 + "lang": "en", 1732 + "name": "Follow-back whiner" 1733 + } 1734 + ], 1735 + "severity": "inform" 1736 + }, 1737 + { 1738 + "adultOnly": false, 1739 + "blurs": "none", 1740 + "defaultSetting": "warn", 1741 + "identifier": "slug", 1742 + "locales": [ 1743 + { 1744 + "description": "No bones, leaves a gross trail of slime everywhere they go, possibly eats the flesh of living children", 1745 + "lang": "en", 1746 + "name": "Slug wearing human skin" 1747 + } 1748 + ], 1749 + "severity": "alert" 1750 + }, 1751 + { 1752 + "adultOnly": false, 1753 + "blurs": "none", 1754 + "defaultSetting": "warn", 1755 + "identifier": "plum-eater", 1756 + "locales": [ 1757 + { 1758 + "description": "Ate all my plums that I was keeping in the icebox.", 1759 + "lang": "en", 1760 + "name": "Plum Eater" 1761 + } 1762 + ], 1763 + "severity": "alert" 1764 + }, 1765 + { 1766 + "adultOnly": false, 1767 + "blurs": "none", 1768 + "defaultSetting": "warn", 1769 + "identifier": "label-hater", 1770 + "locales": [ 1771 + { "description": "This user hates labels and/or labelers", "lang": "en", "name": "Label Hater" } 1772 + ], 1773 + "severity": "alert" 1774 + }, 1775 + { 1776 + "adultOnly": false, 1777 + "blurs": "none", 1778 + "defaultSetting": "ignore", 1779 + "identifier": "jeremy", 1780 + "locales": [ 1781 + { 1782 + "description": "This user has self-identified as a Jeremy (alternative spellings not accepted)", 1783 + "lang": "en", 1784 + "name": "Jeremy" 1785 + } 1786 + ], 1787 + "severity": "inform" 1788 + }, 1789 + { 1790 + "adultOnly": false, 1791 + "blurs": "media", 1792 + "defaultSetting": "ignore", 1793 + "identifier": "watermarks", 1794 + "locales": [ 1795 + { 1796 + "description": "This label is for posts with memes that are watermarked or users who consistently watermark their memes.", 1797 + "lang": "en", 1798 + "name": "Watermarks Memes" 1799 + } 1800 + ], 1801 + "severity": "alert" 1802 + }, 1803 + { 1804 + "adultOnly": false, 1805 + "blurs": "none", 1806 + "defaultSetting": "hide", 1807 + "identifier": "reposts-without-likes", 1808 + "locales": [ 1809 + { "description": "Come on dude that's rude as hell.", "lang": "en", "name": "Reposts Without Liking" } 1810 + ], 1811 + "severity": "inform" 1812 + }, 1813 + { 1814 + "adultOnly": false, 1815 + "blurs": "none", 1816 + "defaultSetting": "ignore", 1817 + "identifier": "cryptid", 1818 + "locales": [ 1819 + { 1820 + "description": "Accounts which may be cryptids posing as humans", 1821 + "lang": "en", 1822 + "name": "Possible Cryptid" 1823 + } 1824 + ], 1825 + "severity": "inform" 1826 + }, 1827 + { 1828 + "adultOnly": false, 1829 + "blurs": "none", 1830 + "defaultSetting": "warn", 1831 + "identifier": "accessibility-scolding", 1832 + "locales": [ 1833 + { 1834 + "description": "Alt text is great actually but you don’t have to yell at people about it. Also, you’re probably doing it wrong too.", 1835 + "lang": "en", 1836 + "name": "Alt-text Scolds" 1837 + } 1838 + ], 1839 + "severity": "inform" 1840 + }, 1841 + { 1842 + "adultOnly": false, 1843 + "blurs": "content", 1844 + "defaultSetting": "ignore", 1845 + "identifier": "mutual-aid", 1846 + "locales": [ 1847 + { 1848 + "description": "Mutual aid is actually fine and good. But capitalism is killing us all, and some of us would prefer not to be reminded of our own experience with poverty when that's all you post.", 1849 + "lang": "en", 1850 + "name": "Oops! All Mutual Aid" 1851 + } 1852 + ], 1853 + "severity": "inform" 1854 + }, 1855 + { 1856 + "adultOnly": false, 1857 + "blurs": "content", 1858 + "defaultSetting": "warn", 1859 + "identifier": "simping", 1860 + "locales": [ 1861 + { 1862 + "description": "She's not gonna fuck you for being her unpaid marketing intern. You're having a parasocial relationship with women who don't even know you exist.", 1863 + "lang": "en", 1864 + "name": "Simping" 1865 + } 1866 + ], 1867 + "severity": "alert" 1868 + }, 1869 + { 1870 + "adultOnly": false, 1871 + "blurs": "none", 1872 + "defaultSetting": "ignore", 1873 + "identifier": "cringe", 1874 + "locales": [{ "description": "You posted cringe, bro.", "lang": "en", "name": "Cringe" }], 1875 + "severity": "inform" 1876 + }, 1877 + { 1878 + "adultOnly": false, 1879 + "blurs": "media", 1880 + "defaultSetting": "ignore", 1881 + "identifier": "bad-selfies", 1882 + "locales": [ 1883 + { 1884 + "description": "Staring blankly into space, eyes wide, head empty", 1885 + "lang": "en", 1886 + "name": "Bad Selfies" 1887 + } 1888 + ], 1889 + "severity": "inform" 1890 + }, 1891 + { 1892 + "adultOnly": false, 1893 + "blurs": "none", 1894 + "defaultSetting": "warn", 1895 + "identifier": "elder-watch", 1896 + "locales": [ 1897 + { 1898 + "description": "Individuals who think they deserve respect for being early members of a niche micro-blogging platform.", 1899 + "lang": "en", 1900 + "name": "Elder Watch" 1901 + } 1902 + ], 1903 + "severity": "inform" 1904 + } 1905 + ], 1906 + "labelValues": [ 1907 + "understands-jokes", 1908 + "rizz-debuffed", 1909 + "follow-back-whining", 1910 + "slug", 1911 + "accessibility-scolding", 1912 + "bad-selfies", 1913 + "british", 1914 + "cringe", 1915 + "cryptid", 1916 + "elder-watch", 1917 + "jeremy", 1918 + "label-hater", 1919 + "mutual-aid", 1920 + "plum-eater", 1921 + "reposts-without-likes", 1922 + "simping", 1923 + "watermarks" 1924 + ] 1925 + }, 1926 + "reasonTypes": ["com.atproto.moderation.defs#reasonOther", "com.atproto.moderation.defs#reasonAppeal"], 1927 + "subjectTypes": ["record", "account"], 1928 + "$type": "app.bsky.labeler.defs#labelerViewDetailed" 1929 + }, 1930 + { 1931 + "uri": "at://did:plc:neaiqhna53cozcntic6wmvcu/app.bsky.labeler.service/self", 1932 + "cid": "bafyreidvu3tprrte7zzkzgjtwvjzqr7repkyyrampoyzf7touljq5utcg4", 1933 + "creator": { 1934 + "did": "did:plc:neaiqhna53cozcntic6wmvcu", 1935 + "handle": "mhweaponlabeler.bsky.social", 1936 + "displayName": "Monster Hunter Weapons Labeler", 1937 + "avatar": "https://cdn.bsky.app/img/avatar/plain/did:plc:neaiqhna53cozcntic6wmvcu/bafkreia3zefsclmnkqanlup3fwumy3otb27nei46vnlc6a6nylkfpoufae@jpeg", 1938 + "associated": { 1939 + "labeler": true, 1940 + "chat": { "allowIncoming": "all" }, 1941 + "activitySubscription": { "allowSubscriptions": "followers" } 1942 + }, 1943 + "viewer": { "muted": false, "blockedBy": false }, 1944 + "labels": [], 1945 + "createdAt": "2024-10-23T23:59:57.808Z", 1946 + "description": "Show which weapons do you use in #MonsterHunter. Limit is 2 weapon as #MHWilds :) #MonHun\n\nIt can take up to 1 min to appear. You need to hit the button \"Subscribe\" before. More in \"Posts\"\n\nCreated by \nES: @AeoluxJorge.bsky.social EN: @aeolux.bsky.social", 1947 + "indexedAt": "2024-11-22T16:07:29.754Z" 1948 + }, 1949 + "likeCount": 33, 1950 + "viewer": {}, 1951 + "indexedAt": "2024-10-27T02:47:26.800Z", 1952 + "labels": [], 1953 + "policies": { 1954 + "labelValueDefinitions": [ 1955 + { 1956 + "adultOnly": false, 1957 + "blurs": "none", 1958 + "defaultSetting": "warn", 1959 + "identifier": "longsword", 1960 + "locales": [{ "description": "Long Sword", "lang": "en", "name": "Long Sword" }], 1961 + "severity": "inform" 1962 + }, 1963 + { 1964 + "adultOnly": false, 1965 + "blurs": "none", 1966 + "defaultSetting": "warn", 1967 + "identifier": "chargeblade", 1968 + "locales": [{ "description": "Charge Blade", "lang": "en", "name": "Charge Blade" }], 1969 + "severity": "inform" 1970 + }, 1971 + { 1972 + "adultOnly": false, 1973 + "blurs": "none", 1974 + "defaultSetting": "warn", 1975 + "identifier": "switchaxe", 1976 + "locales": [{ "description": "Switch Axe", "lang": "en", "name": "Switch Axe" }], 1977 + "severity": "inform" 1978 + }, 1979 + { 1980 + "adultOnly": false, 1981 + "blurs": "none", 1982 + "defaultSetting": "warn", 1983 + "identifier": "swordandshield", 1984 + "locales": [{ "description": "Sword and Shield", "lang": "en", "name": "Sword and Shield" }], 1985 + "severity": "inform" 1986 + }, 1987 + { 1988 + "adultOnly": false, 1989 + "blurs": "none", 1990 + "defaultSetting": "warn", 1991 + "identifier": "dualblades", 1992 + "locales": [{ "description": "Dual Blades", "lang": "en", "name": "Dual Blades" }], 1993 + "severity": "inform" 1994 + }, 1995 + { 1996 + "adultOnly": false, 1997 + "blurs": "none", 1998 + "defaultSetting": "warn", 1999 + "identifier": "hammer", 2000 + "locales": [{ "description": "Hammer", "lang": "en", "name": "Hammer" }], 2001 + "severity": "inform" 2002 + }, 2003 + { 2004 + "adultOnly": false, 2005 + "blurs": "none", 2006 + "defaultSetting": "warn", 2007 + "identifier": "huntinghorn", 2008 + "locales": [{ "description": "Hunting Horn", "lang": "en", "name": "Hunting Horn" }], 2009 + "severity": "inform" 2010 + }, 2011 + { 2012 + "adultOnly": false, 2013 + "blurs": "none", 2014 + "defaultSetting": "warn", 2015 + "identifier": "lance", 2016 + "locales": [{ "description": "Lance", "lang": "en", "name": "Lance" }], 2017 + "severity": "inform" 2018 + }, 2019 + { 2020 + "adultOnly": false, 2021 + "blurs": "none", 2022 + "defaultSetting": "warn", 2023 + "identifier": "gunlance", 2024 + "locales": [{ "description": "Gunlance", "lang": "en", "name": "Gunlance" }], 2025 + "severity": "inform" 2026 + }, 2027 + { 2028 + "adultOnly": false, 2029 + "blurs": "none", 2030 + "defaultSetting": "warn", 2031 + "identifier": "insectglaive", 2032 + "locales": [{ "description": "Insect Glaive", "lang": "en", "name": "Insect Glaive" }], 2033 + "severity": "inform" 2034 + }, 2035 + { 2036 + "adultOnly": false, 2037 + "blurs": "none", 2038 + "defaultSetting": "warn", 2039 + "identifier": "greatsword", 2040 + "locales": [{ "description": "Great Sword", "lang": "en", "name": "Great Sword" }], 2041 + "severity": "inform" 2042 + }, 2043 + { 2044 + "adultOnly": false, 2045 + "blurs": "none", 2046 + "defaultSetting": "warn", 2047 + "identifier": "lightbowgun", 2048 + "locales": [{ "description": "Light Bowgun", "lang": "en", "name": "Light Bowgun" }], 2049 + "severity": "inform" 2050 + }, 2051 + { 2052 + "adultOnly": false, 2053 + "blurs": "none", 2054 + "defaultSetting": "warn", 2055 + "identifier": "heavybowgun", 2056 + "locales": [{ "description": "Heavy Bowgun", "lang": "en", "name": "Heavy Bowgun" }], 2057 + "severity": "inform" 2058 + }, 2059 + { 2060 + "adultOnly": false, 2061 + "blurs": "none", 2062 + "defaultSetting": "warn", 2063 + "identifier": "bow", 2064 + "locales": [{ "description": "Bow", "lang": "en", "name": "Bow" }], 2065 + "severity": "inform" 2066 + } 2067 + ], 2068 + "labelValues": [ 2069 + "longsword", 2070 + "chargeblade", 2071 + "switchaxe", 2072 + "swordandshield", 2073 + "dualblades", 2074 + "hammer", 2075 + "huntinghorn", 2076 + "lance", 2077 + "gunlance", 2078 + "insectglaive", 2079 + "greatsword", 2080 + "lightbowgun", 2081 + "heavybowgun", 2082 + "bow" 2083 + ] 2084 + }, 2085 + "$type": "app.bsky.labeler.defs#labelerViewDetailed" 2086 + }, 2087 + { 2088 + "uri": "at://did:plc:e4elbtctnfqocyfcml6h2lf7/app.bsky.labeler.service/self", 2089 + "cid": "bafyreiamd3q5neyg5fqrftle376mpfkiosxnsrgfjhl5urni53f3zgkbhi", 2090 + "creator": { 2091 + "did": "did:plc:e4elbtctnfqocyfcml6h2lf7", 2092 + "handle": "skywatch.blue", 2093 + "displayName": "Skywatch Blue / Anti-Alf Aktion", 2094 + "avatar": "https://cdn.bsky.app/img/avatar/plain/did:plc:e4elbtctnfqocyfcml6h2lf7/bafkreidj56ewohaguhuksoqwo4cybck6vf5h3ssc4iarzvrrzdgzbc2rpa@jpeg", 2095 + "associated": { 2096 + "labeler": true, 2097 + "chat": { "allowIncoming": "all" }, 2098 + "activitySubscription": { "allowSubscriptions": "followers" } 2099 + }, 2100 + "viewer": { "muted": false, "blockedBy": false }, 2101 + "labels": [ 2102 + { 2103 + "cts": "2025-08-05T02:49:59.168Z", 2104 + "src": "did:plc:e4elbtctnfqocyfcml6h2lf7", 2105 + "uri": "did:plc:e4elbtctnfqocyfcml6h2lf7", 2106 + "val": "skywatch-blue", 2107 + "ver": 1 2108 + } 2109 + ], 2110 + "createdAt": "2024-02-20T06:15:04.884Z", 2111 + "description": "Ceaseless watcher, turn your gaze upon this wretched thing.\n\nIndependent Labeling Service | Not able to perform takedowns.\n\nstats.skywatch.blue\n\nNot associated with SkySentry.", 2112 + "indexedAt": "2025-07-12T21:42:44.432Z" 2113 + }, 2114 + "likeCount": 7966, 2115 + "viewer": {}, 2116 + "indexedAt": "2025-10-18T13:46:05.961Z", 2117 + "labels": [], 2118 + "policies": { 2119 + "labelValueDefinitions": [ 2120 + { 2121 + "adultOnly": false, 2122 + "blurs": "content", 2123 + "defaultSetting": "ignore", 2124 + "identifier": "us-gov-account", 2125 + "locales": [ 2126 + { 2127 + "description": "Applied to accounts which claim to be or are verified to be US Government agencies.", 2128 + "lang": "en", 2129 + "name": "United States Government Account" 2130 + } 2131 + ], 2132 + "severity": "inform" 2133 + }, 2134 + { 2135 + "adultOnly": false, 2136 + "blurs": "content", 2137 + "defaultSetting": "ignore", 2138 + "identifier": "discriminatory-language", 2139 + "locales": [ 2140 + { 2141 + "description": "Applied to posts that use stereotypes, discriminatory generalizations, or identity-based attacks that don't fit other categories (slurs, dehumanizing rhetoric, etc.)", 2142 + "lang": "en", 2143 + "name": "Discriminatory Language" 2144 + } 2145 + ], 2146 + "severity": "warn" 2147 + }, 2148 + { 2149 + "adultOnly": false, 2150 + "blurs": "none", 2151 + "defaultSetting": "warn", 2152 + "identifier": "skywatch-blue", 2153 + "locales": [ 2154 + { 2155 + "description": "This label will appear on accounts that are affiliated with the labeler Skywatch Blue. If this label is not present, the account is not affiliated with Skywatch Blue, regardless of handle, profile, or name similarity.", 2156 + "lang": "en", 2157 + "name": "Skywatch Blue Affiliated Account" 2158 + } 2159 + ], 2160 + "severity": "inform" 2161 + }, 2162 + { 2163 + "adultOnly": false, 2164 + "blurs": "content", 2165 + "defaultSetting": "ignore", 2166 + "identifier": "alt-gov", 2167 + "locales": [ 2168 + { 2169 + "description": "Applied to accounts which claim to be an anonymous account representing government workers—e.g., altnps, altfda", 2170 + "lang": "en", 2171 + "name": "Alt Gov Account" 2172 + } 2173 + ], 2174 + "severity": "inform" 2175 + }, 2176 + { 2177 + "adultOnly": false, 2178 + "blurs": "content", 2179 + "defaultSetting": "ignore", 2180 + "identifier": "amplifier", 2181 + "locales": [ 2182 + { 2183 + "description": "User frequently posts links to sources which are used to launder fringe or extremist ideas into mainstream discourse. For more information on why this is harmful, regardless of intent, please see: Phillips, Whitney. 'The Oxygen of Amplification.' Data and Society, May 22, 2018. https://datasociety.net/library/oxygen-of-amplification/.", 2184 + "lang": "en", 2185 + "name": "Amplifier" 2186 + } 2187 + ], 2188 + "severity": "alert" 2189 + }, 2190 + { 2191 + "adultOnly": false, 2192 + "blurs": "content", 2193 + "defaultSetting": "ignore", 2194 + "identifier": "low-quality-replies", 2195 + "locales": [ 2196 + { 2197 + "description": "Account's replies frequently lack substantive content, including: emoji-only replies, meme-or-image-only replies, cut and paste text that is frequently repeated in multiple threads, \"cry more\"/insults/slurs, and other forms of low-effort reply spam that are intended to troll or enrage rather than engage in conversation. Appeals will be accepted for active accounts that have ceased to engage in this sort of activity for at least a month.", 2198 + "lang": "en", 2199 + "name": "Low Quality Replies" 2200 + } 2201 + ], 2202 + "severity": "alert" 2203 + }, 2204 + { 2205 + "adultOnly": false, 2206 + "blurs": "content", 2207 + "defaultSetting": "ignore", 2208 + "identifier": "dehumanizing-rhetoric", 2209 + "locales": [ 2210 + { 2211 + "description": "Applied to accounts and / or posts which engage in rhetoric which has the effect of dehumanizing a group of people.", 2212 + "lang": "en", 2213 + "name": "Dehumanizing Rhetoric" 2214 + } 2215 + ], 2216 + "severity": "alert" 2217 + }, 2218 + { 2219 + "adultOnly": false, 2220 + "blurs": "content", 2221 + "defaultSetting": "ignore", 2222 + "identifier": "blue-heart-emoji", 2223 + "locales": [ 2224 + { 2225 + "description": "Username and / or Description contains 💙.", 2226 + "lang": "en", 2227 + "name": "💙: Blue Heart Emoji" 2228 + } 2229 + ], 2230 + "severity": "inform" 2231 + }, 2232 + { 2233 + "adultOnly": false, 2234 + "blurs": "content", 2235 + "defaultSetting": "ignore", 2236 + "identifier": "follow-farming", 2237 + "locales": [ 2238 + { 2239 + "description": "Applied to accounts which engage in indiscriminate follow farming and follow-back networks and applied to posts using hashtags or linking to sites utilized for follow-farming.", 2240 + "lang": "en", 2241 + "name": "Follow Farming" 2242 + } 2243 + ], 2244 + "severity": "alert" 2245 + }, 2246 + { 2247 + "adultOnly": false, 2248 + "blurs": "content", 2249 + "defaultSetting": "ignore", 2250 + "identifier": "suspect-inauthentic", 2251 + "locales": [ 2252 + { 2253 + "description": "Applied to accounts which don't 'smell right'—includes accounts with zero posts and thousands of followers with similar bios, accounts that only reply but don't clearly fit into the troll or reply guy mold, or clusters of accounts which appear designed to boost the content of another account.\n\nPlease note that accounts will only be added here after clear indication of inauthentic behavior. We will not and do not label accounts solely for linking to Only Fans. Sex work is real work.", 2254 + "lang": "en", 2255 + "name": "Suspected Inauthentic Behavior" 2256 + } 2257 + ], 2258 + "severity": "alert" 2259 + }, 2260 + { 2261 + "adultOnly": false, 2262 + "blurs": "content", 2263 + "defaultSetting": "ignore", 2264 + "identifier": "contains-slur", 2265 + "locales": [ 2266 + { 2267 + "description": "Applied to posts which contain well-known English-language slurs disparaging people based on race, ethnicity, religion, nationality, sexual orientation, or gender.", 2268 + "lang": "en", 2269 + "name": "Slur" 2270 + } 2271 + ], 2272 + "severity": "alert" 2273 + }, 2274 + { 2275 + "adultOnly": false, 2276 + "blurs": "content", 2277 + "defaultSetting": "ignore", 2278 + "identifier": "discourse-bait", 2279 + "locales": [ 2280 + { 2281 + "description": "Automatically applied to key terms which are indicative of ongoing discourse. Posts engaged in meta-discourse will likely be labeled as well. Labels will expire after seven (7) days.", 2282 + "lang": "en", 2283 + "name": "Discourse Bait" 2284 + } 2285 + ], 2286 + "severity": "alert" 2287 + }, 2288 + { 2289 + "adultOnly": false, 2290 + "blurs": "content", 2291 + "defaultSetting": "ignore", 2292 + "identifier": "troll", 2293 + "locales": [ 2294 + { 2295 + "description": "Label for posts and accounts which spam users with off-topic replies, engage in troll like behavior, or which engage in concern trolling. This label is also applied to accounts whose bio contains several terms that are frequently used by troll accounts and may accidentally catch some reclaiming uses: please appeal any errors by tapping the label.", 2296 + "lang": "en", 2297 + "name": "Troll" 2298 + } 2299 + ], 2300 + "severity": "alert" 2301 + }, 2302 + { 2303 + "adultOnly": false, 2304 + "blurs": "media", 2305 + "defaultSetting": "ignore", 2306 + "identifier": "fringe-media", 2307 + "locales": [ 2308 + { 2309 + "description": "Applied to posts which contain a link to sites known to be sources of disinformation and misinformation. These sites often serve to launder fringe ideas, conspiracy theories, and extreme political positions into the mainstream. Accounts which frequently or primarily post links to these sources will be labeled as Amplifiers.", 2310 + "lang": "en", 2311 + "name": "Fringe Media & Disinfo" 2312 + } 2313 + ], 2314 + "severity": "alert" 2315 + }, 2316 + { 2317 + "blurs": "none", 2318 + "identifier": "alf", 2319 + "locales": [{ "description": "You know what this is for.", "lang": "en", "name": "Alf" }], 2320 + "severity": "inform" 2321 + }, 2322 + { 2323 + "adultOnly": false, 2324 + "blurs": "content", 2325 + "defaultSetting": "ignore", 2326 + "identifier": "alt-tech", 2327 + "locales": [ 2328 + { 2329 + "description": "Applied to posts which contain a link to sites which are considered alt-tech, such as givesendgo.com or rumble.com. Read more about alt-tech here: https://en.wikipedia.org/wiki/Alt-tech", 2330 + "lang": "en", 2331 + "name": "Alt-tech" 2332 + } 2333 + ], 2334 + "severity": "alert" 2335 + }, 2336 + { 2337 + "adultOnly": false, 2338 + "blurs": "none", 2339 + "defaultSetting": "warn", 2340 + "identifier": "beans", 2341 + "locales": [ 2342 + { 2343 + "description": "This is a label for people who want a badge that says \"Beans\" on their profile.", 2344 + "lang": "en", 2345 + "name": "Beans" 2346 + } 2347 + ], 2348 + "severity": "inform" 2349 + }, 2350 + { 2351 + "adultOnly": false, 2352 + "blurs": "none", 2353 + "defaultSetting": "ignore", 2354 + "identifier": "bluesky-elder", 2355 + "locales": [ 2356 + { 2357 + "description": "This user has been here since before the media tab (August 2023). This label is not a label of honor—no highly esteemed deed is commemorated here.\n\nThis label is meant in jest and dates to early experiments in labeling. It is applied to the first 800,000 Bluesky accounts. Appeals honored.", 2358 + "lang": "en", 2359 + "name": "Bluesky Elder" 2360 + } 2361 + ], 2362 + "severity": "inform" 2363 + }, 2364 + { 2365 + "adultOnly": false, 2366 + "blurs": "content", 2367 + "defaultSetting": "ignore", 2368 + "identifier": "disinformation-network", 2369 + "locales": [ 2370 + { 2371 + "description": "This post links to sources known to be part of pro-Kremlin and pro-Assad disinformation networks. More detail available here: https://bsky.app/profile/skywatch.blue/post/3l5uvdirylt2e", 2372 + "lang": "en", 2373 + "name": "Disinformation Network" 2374 + } 2375 + ], 2376 + "severity": "alert" 2377 + }, 2378 + { 2379 + "adultOnly": false, 2380 + "blurs": "content", 2381 + "defaultSetting": "ignore", 2382 + "identifier": "elon-musk", 2383 + "locales": [ 2384 + { 2385 + "description": "Username, handle, and / or description which includes reference to Elon Musk.", 2386 + "lang": "en", 2387 + "name": "Elon Musk" 2388 + } 2389 + ], 2390 + "severity": "alert" 2391 + }, 2392 + { 2393 + "adultOnly": false, 2394 + "blurs": "content", 2395 + "defaultSetting": "ignore", 2396 + "identifier": "fundraising-link", 2397 + "locales": [ 2398 + { 2399 + "description": "Applied to posts which contain a link to sites commonly used for fundraising or requesting money, such as gofundme. Never applied to profiles or accounts.", 2400 + "lang": "en", 2401 + "name": "Fundraising Link" 2402 + } 2403 + ], 2404 + "severity": "inform" 2405 + }, 2406 + { 2407 + "adultOnly": false, 2408 + "blurs": "content", 2409 + "defaultSetting": "ignore", 2410 + "identifier": "hammer-sickle", 2411 + "locales": [ 2412 + { 2413 + "description": "Username and / or description which includes ☭.", 2414 + "lang": "en", 2415 + "name": "☭: Hammer & Sickle" 2416 + } 2417 + ], 2418 + "severity": "inform" 2419 + }, 2420 + { 2421 + "adultOnly": false, 2422 + "blurs": "content", 2423 + "defaultSetting": "ignore", 2424 + "identifier": "inverted-red-triangle", 2425 + "locales": [ 2426 + { 2427 + "description": "Username and / or description which includes 🔻.", 2428 + "lang": "en", 2429 + "name": "🔻: Inverted Red Triangle" 2430 + } 2431 + ], 2432 + "severity": "inform" 2433 + }, 2434 + { 2435 + "adultOnly": false, 2436 + "blurs": "content", 2437 + "defaultSetting": "ignore", 2438 + "identifier": "maga-trump", 2439 + "locales": [ 2440 + { 2441 + "description": "Username and / or description which includes MAGA, MAHA, TRUMP, or TRUMP 2024, or posts with #MAGA and #TRUMP2024 hashtags or clear indicators of support for Trump. Also labels Trump associated figures (MTG, RFK Jr., his children, etc.)", 2442 + "lang": "en", 2443 + "name": "MAGA" 2444 + } 2445 + ], 2446 + "severity": "alert" 2447 + }, 2448 + { 2449 + "adultOnly": false, 2450 + "blurs": "content", 2451 + "defaultSetting": "ignore", 2452 + "identifier": "nazi-symbolism", 2453 + "locales": [ 2454 + { 2455 + "description": "Username, handle, and / or description which includes Nazi and neo-nazi symbols, including swastikas, references to the 14 words and Hitler's initials, or double lightning bolts.", 2456 + "lang": "en", 2457 + "name": "Nazi Symbolism" 2458 + } 2459 + ], 2460 + "severity": "alert" 2461 + }, 2462 + { 2463 + "adultOnly": false, 2464 + "blurs": "content", 2465 + "defaultSetting": "ignore", 2466 + "identifier": "rmve-imve", 2467 + "locales": [ 2468 + { 2469 + "description": "Account or post advocates for or supports racially, ethnically, or ideologically motivated extremism, violent or otherwise.", 2470 + "lang": "en", 2471 + "name": "RM(V)E / IM(V)E" 2472 + } 2473 + ], 2474 + "severity": "alert" 2475 + }, 2476 + { 2477 + "adultOnly": false, 2478 + "blurs": "media", 2479 + "defaultSetting": "warn", 2480 + "identifier": "sensual-alf", 2481 + "locales": [{ "description": "Lewd and rude Alf.", "lang": "en", "name": "Sensual Alf" }], 2482 + "severity": "alert" 2483 + }, 2484 + { 2485 + "adultOnly": false, 2486 + "blurs": "content", 2487 + "defaultSetting": "ignore", 2488 + "identifier": "sports-betting", 2489 + "locales": [ 2490 + { 2491 + "description": "Applied to posts which contain a link to sites commonly used for sports betting, such as Draft Kings or Fan Duel. If you or a loved one have a gambling problem, please find help here: https://www.ncpgambling.org/help-treatment/help-by-state/", 2492 + "lang": "en", 2493 + "name": "Sports Betting Link" 2494 + } 2495 + ], 2496 + "severity": "inform" 2497 + }, 2498 + { 2499 + "adultOnly": false, 2500 + "blurs": "content", 2501 + "defaultSetting": "ignore", 2502 + "identifier": "terf-gc", 2503 + "locales": [ 2504 + { 2505 + "description": "Applied to accounts who self describe as being a “Trans-Exclusionary Radical Feminist” (TERF), “Gender Critical” (GC), \"Gender Realist\", use known signage such as \"💜🤍💚\" or \"Feminist🦖\", as well as high-profile individuals whose body of work identifies them as such, or accounts with multiple posts which attack trans people or use pejorative terms such as TRA.", 2506 + "lang": "en", 2507 + "name": "TERF" 2508 + } 2509 + ], 2510 + "severity": "alert" 2511 + }, 2512 + { 2513 + "adultOnly": false, 2514 + "blurs": "content", 2515 + "defaultSetting": "ignore", 2516 + "identifier": "unsourced-reporting", 2517 + "locales": [ 2518 + { 2519 + "description": "Claims which the posting account asserts or implies to be factual without supporting evidence or credible sourcing details. Also applied to accounts which regularly these post this type of claim.", 2520 + "lang": "en", 2521 + "name": "Unsourced Claims" 2522 + } 2523 + ], 2524 + "severity": "alert" 2525 + } 2526 + ], 2527 + "labelValues": [ 2528 + "alf", 2529 + "alt-gov", 2530 + "alt-tech", 2531 + "amplifier", 2532 + "beans", 2533 + "blue-heart-emoji", 2534 + "bluesky-elder", 2535 + "contains-slur", 2536 + "dehumanizing-rhetoric", 2537 + "discriminatory-language", 2538 + "discourse-bait", 2539 + "disinformation-network", 2540 + "elon-musk", 2541 + "fringe-media", 2542 + "follow-farming", 2543 + "fundraising-link", 2544 + "hammer-sickle", 2545 + "inverted-red-triangle", 2546 + "low-quality-replies", 2547 + "maga-trump", 2548 + "nazi-symbolism", 2549 + "rmve-imve", 2550 + "sensual-alf", 2551 + "sports-betting", 2552 + "suspect-inauthentic", 2553 + "terf-gc", 2554 + "troll", 2555 + "unsourced-reporting", 2556 + "us-gov-account" 2557 + ] 2558 + }, 2559 + "reasonTypes": [ 2560 + "com.atproto.moderation.defs#reasonAppeal", 2561 + "com.atproto.moderation.defs#reasonSpam", 2562 + "com.atproto.moderation.defs#reasonMisleading", 2563 + "com.atproto.moderation.defs#reasonRude", 2564 + "com.atproto.moderation.defs#reasonViolation", 2565 + "com.atproto.moderation.defs#reasonOther", 2566 + "com.atproto.moderation.defs#reasonAppeal" 2567 + ], 2568 + "subjectTypes": ["account", "record"], 2569 + "$type": "app.bsky.labeler.defs#labelerViewDetailed" 2570 + }, 2571 + { 2572 + "uri": "at://did:plc:ubt73xes4uesthuuhbqwf37d/app.bsky.labeler.service/self", 2573 + "cid": "bafyreieij5qvbfnfxf4edvo3y2ydwvxc6qbq23gngxexq2x5mvjbzsghtu", 2574 + "creator": { 2575 + "did": "did:plc:ubt73xes4uesthuuhbqwf37d", 2576 + "handle": "kickflip.renahlee.com", 2577 + "displayName": "kickflip", 2578 + "avatar": "https://cdn.bsky.app/img/avatar/plain/did:plc:ubt73xes4uesthuuhbqwf37d/bafkreifx5ikglbtyfju7gflwy67rvrtgwxzlzjgt6cox5j2ilvvky6kuey@jpeg", 2579 + "associated": { 2580 + "labeler": true, 2581 + "chat": { "allowIncoming": "all" }, 2582 + "activitySubscription": { "allowSubscriptions": "followers" } 2583 + }, 2584 + "viewer": { "muted": false, "blockedBy": false }, 2585 + "labels": [ 2586 + { 2587 + "cts": "2024-09-11T04:14:38.987Z", 2588 + "src": "did:plc:ubt73xes4uesthuuhbqwf37d", 2589 + "uri": "did:plc:ubt73xes4uesthuuhbqwf37d", 2590 + "val": "skate", 2591 + "ver": 1 2592 + } 2593 + ], 2594 + "createdAt": "2024-07-03T23:30:29.079Z", 2595 + "description": "𝐍𝐚𝐭𝐢𝐨𝐧𝐬\n\n👉 Runs once daily 🕡\n\nDM a flag emoji to use and 🏳️ to remove all. Make sure it’s the last message and wait for confirmation 💌\n\nSee pinned post if you need help DMing and don’t forget to subscribe 🩵", 2596 + "indexedAt": "2025-01-26T04:13:19.246Z" 2597 + }, 2598 + "likeCount": 1006, 2599 + "viewer": { "like": "at://did:plc:yfvwmnlztr4dwkb7hwz55r2g/app.bsky.feed.like/3lpmsrqutff27" }, 2600 + "indexedAt": "2025-10-02T20:06:48.259Z", 2601 + "labels": [], 2602 + "policies": { 2603 + "labelValueDefinitions": [ 2604 + { 2605 + "adultOnly": false, 2606 + "blurs": "none", 2607 + "defaultSetting": "warn", 2608 + "identifier": "prd", 2609 + "locales": [{ "description": "Pride Nation", "lang": "en", "name": "🏳️‍🌈" }], 2610 + "severity": "inform" 2611 + }, 2612 + { 2613 + "adultOnly": false, 2614 + "blurs": "none", 2615 + "defaultSetting": "warn", 2616 + "identifier": "trn", 2617 + "locales": [{ "description": "Trans Nation", "lang": "en", "name": "🏳️‍⚧️" }], 2618 + "severity": "inform" 2619 + }, 2620 + { 2621 + "adultOnly": false, 2622 + "blurs": "none", 2623 + "defaultSetting": "warn", 2624 + "identifier": "ad", 2625 + "locales": [{ "description": "Andorra", "lang": "en", "name": "🇦🇩" }], 2626 + "severity": "inform" 2627 + }, 2628 + { 2629 + "adultOnly": false, 2630 + "blurs": "none", 2631 + "defaultSetting": "warn", 2632 + "identifier": "ae", 2633 + "locales": [{ "description": "United Arab Emirates", "lang": "en", "name": "🇦🇪" }], 2634 + "severity": "inform" 2635 + }, 2636 + { 2637 + "adultOnly": false, 2638 + "blurs": "none", 2639 + "defaultSetting": "warn", 2640 + "identifier": "af", 2641 + "locales": [{ "description": "Afghanistan", "lang": "en", "name": "🇦🇫" }], 2642 + "severity": "inform" 2643 + }, 2644 + { 2645 + "adultOnly": false, 2646 + "blurs": "none", 2647 + "defaultSetting": "warn", 2648 + "identifier": "ag", 2649 + "locales": [{ "description": "Antigua and Barbuda", "lang": "en", "name": "🇦🇬" }], 2650 + "severity": "inform" 2651 + }, 2652 + { 2653 + "adultOnly": false, 2654 + "blurs": "none", 2655 + "defaultSetting": "warn", 2656 + "identifier": "ai", 2657 + "locales": [{ "description": "Anguilla", "lang": "en", "name": "🇦🇮" }], 2658 + "severity": "inform" 2659 + }, 2660 + { 2661 + "adultOnly": false, 2662 + "blurs": "none", 2663 + "defaultSetting": "warn", 2664 + "identifier": "al", 2665 + "locales": [{ "description": "Albania", "lang": "en", "name": "🇦🇱" }], 2666 + "severity": "inform" 2667 + }, 2668 + { 2669 + "adultOnly": false, 2670 + "blurs": "none", 2671 + "defaultSetting": "warn", 2672 + "identifier": "am", 2673 + "locales": [{ "description": "Armenia", "lang": "en", "name": "🇦🇲" }], 2674 + "severity": "inform" 2675 + }, 2676 + { 2677 + "adultOnly": false, 2678 + "blurs": "none", 2679 + "defaultSetting": "warn", 2680 + "identifier": "ao", 2681 + "locales": [{ "description": "Angola", "lang": "en", "name": "🇦🇴" }], 2682 + "severity": "inform" 2683 + }, 2684 + { 2685 + "adultOnly": false, 2686 + "blurs": "none", 2687 + "defaultSetting": "warn", 2688 + "identifier": "aq", 2689 + "locales": [{ "description": "Antarctica", "lang": "en", "name": "🇦🇶" }], 2690 + "severity": "inform" 2691 + }, 2692 + { 2693 + "adultOnly": false, 2694 + "blurs": "none", 2695 + "defaultSetting": "warn", 2696 + "identifier": "ar", 2697 + "locales": [{ "description": "Argentina", "lang": "en", "name": "🇦🇷" }], 2698 + "severity": "inform" 2699 + }, 2700 + { 2701 + "adultOnly": false, 2702 + "blurs": "none", 2703 + "defaultSetting": "warn", 2704 + "identifier": "as", 2705 + "locales": [{ "description": "American Samoa", "lang": "en", "name": "🇦🇸" }], 2706 + "severity": "inform" 2707 + }, 2708 + { 2709 + "adultOnly": false, 2710 + "blurs": "none", 2711 + "defaultSetting": "warn", 2712 + "identifier": "at", 2713 + "locales": [{ "description": "Austria", "lang": "en", "name": "🇦🇹" }], 2714 + "severity": "inform" 2715 + }, 2716 + { 2717 + "adultOnly": false, 2718 + "blurs": "none", 2719 + "defaultSetting": "warn", 2720 + "identifier": "au", 2721 + "locales": [{ "description": "Australia", "lang": "en", "name": "🇦🇺" }], 2722 + "severity": "inform" 2723 + }, 2724 + { 2725 + "adultOnly": false, 2726 + "blurs": "none", 2727 + "defaultSetting": "warn", 2728 + "identifier": "aw", 2729 + "locales": [{ "description": "Aruba", "lang": "en", "name": "🇦🇼" }], 2730 + "severity": "inform" 2731 + }, 2732 + { 2733 + "adultOnly": false, 2734 + "blurs": "none", 2735 + "defaultSetting": "warn", 2736 + "identifier": "ax", 2737 + "locales": [{ "description": "Åland Islands", "lang": "en", "name": "🇦🇽" }], 2738 + "severity": "inform" 2739 + }, 2740 + { 2741 + "adultOnly": false, 2742 + "blurs": "none", 2743 + "defaultSetting": "warn", 2744 + "identifier": "az", 2745 + "locales": [{ "description": "Azerbaijan", "lang": "en", "name": "🇦🇿" }], 2746 + "severity": "inform" 2747 + }, 2748 + { 2749 + "adultOnly": false, 2750 + "blurs": "none", 2751 + "defaultSetting": "warn", 2752 + "identifier": "ba", 2753 + "locales": [{ "description": "Bosnia and Herzegovina", "lang": "en", "name": "🇧🇦" }], 2754 + "severity": "inform" 2755 + }, 2756 + { 2757 + "adultOnly": false, 2758 + "blurs": "none", 2759 + "defaultSetting": "warn", 2760 + "identifier": "bb", 2761 + "locales": [{ "description": "Barbados", "lang": "en", "name": "🇧🇧" }], 2762 + "severity": "inform" 2763 + }, 2764 + { 2765 + "adultOnly": false, 2766 + "blurs": "none", 2767 + "defaultSetting": "warn", 2768 + "identifier": "bd", 2769 + "locales": [{ "description": "Bangladesh", "lang": "en", "name": "🇧🇩" }], 2770 + "severity": "inform" 2771 + }, 2772 + { 2773 + "adultOnly": false, 2774 + "blurs": "none", 2775 + "defaultSetting": "warn", 2776 + "identifier": "be", 2777 + "locales": [{ "description": "Belgium", "lang": "en", "name": "🇧🇪" }], 2778 + "severity": "inform" 2779 + }, 2780 + { 2781 + "adultOnly": false, 2782 + "blurs": "none", 2783 + "defaultSetting": "warn", 2784 + "identifier": "bf", 2785 + "locales": [{ "description": "Burkina Faso", "lang": "en", "name": "🇧🇫" }], 2786 + "severity": "inform" 2787 + }, 2788 + { 2789 + "adultOnly": false, 2790 + "blurs": "none", 2791 + "defaultSetting": "warn", 2792 + "identifier": "bg", 2793 + "locales": [{ "description": "Bulgaria", "lang": "en", "name": "🇧🇬" }], 2794 + "severity": "inform" 2795 + }, 2796 + { 2797 + "adultOnly": false, 2798 + "blurs": "none", 2799 + "defaultSetting": "warn", 2800 + "identifier": "bh", 2801 + "locales": [{ "description": "Bahrain", "lang": "en", "name": "🇧🇭" }], 2802 + "severity": "inform" 2803 + }, 2804 + { 2805 + "adultOnly": false, 2806 + "blurs": "none", 2807 + "defaultSetting": "warn", 2808 + "identifier": "bi", 2809 + "locales": [{ "description": "Burundi", "lang": "en", "name": "🇧🇮" }], 2810 + "severity": "inform" 2811 + }, 2812 + { 2813 + "adultOnly": false, 2814 + "blurs": "none", 2815 + "defaultSetting": "warn", 2816 + "identifier": "bj", 2817 + "locales": [{ "description": "Benin", "lang": "en", "name": "🇧🇯" }], 2818 + "severity": "inform" 2819 + }, 2820 + { 2821 + "adultOnly": false, 2822 + "blurs": "none", 2823 + "defaultSetting": "warn", 2824 + "identifier": "bl", 2825 + "locales": [{ "description": "Saint Barthélemy", "lang": "en", "name": "🇧🇱" }], 2826 + "severity": "inform" 2827 + }, 2828 + { 2829 + "adultOnly": false, 2830 + "blurs": "none", 2831 + "defaultSetting": "warn", 2832 + "identifier": "bm", 2833 + "locales": [{ "description": "Bermuda", "lang": "en", "name": "🇧🇲" }], 2834 + "severity": "inform" 2835 + }, 2836 + { 2837 + "adultOnly": false, 2838 + "blurs": "none", 2839 + "defaultSetting": "warn", 2840 + "identifier": "bn", 2841 + "locales": [{ "description": "Brunei Darussalam", "lang": "en", "name": "🇧🇳" }], 2842 + "severity": "inform" 2843 + }, 2844 + { 2845 + "adultOnly": false, 2846 + "blurs": "none", 2847 + "defaultSetting": "warn", 2848 + "identifier": "bo", 2849 + "locales": [{ "description": "Bolivia", "lang": "en", "name": "🇧🇴" }], 2850 + "severity": "inform" 2851 + }, 2852 + { 2853 + "adultOnly": false, 2854 + "blurs": "none", 2855 + "defaultSetting": "warn", 2856 + "identifier": "bq", 2857 + "locales": [{ "description": "Bonaire, Sint Eustatius and Saba", "lang": "en", "name": "🇧🇶" }], 2858 + "severity": "inform" 2859 + }, 2860 + { 2861 + "adultOnly": false, 2862 + "blurs": "none", 2863 + "defaultSetting": "warn", 2864 + "identifier": "br", 2865 + "locales": [{ "description": "Brazil", "lang": "en", "name": "🇧🇷" }], 2866 + "severity": "inform" 2867 + }, 2868 + { 2869 + "adultOnly": false, 2870 + "blurs": "none", 2871 + "defaultSetting": "warn", 2872 + "identifier": "bs", 2873 + "locales": [{ "description": "Bahamas", "lang": "en", "name": "🇧🇸" }], 2874 + "severity": "inform" 2875 + }, 2876 + { 2877 + "adultOnly": false, 2878 + "blurs": "none", 2879 + "defaultSetting": "warn", 2880 + "identifier": "bt", 2881 + "locales": [{ "description": "Bhutan", "lang": "en", "name": "🇧🇹" }], 2882 + "severity": "inform" 2883 + }, 2884 + { 2885 + "adultOnly": false, 2886 + "blurs": "none", 2887 + "defaultSetting": "warn", 2888 + "identifier": "bv", 2889 + "locales": [{ "description": "Bouvet Island", "lang": "en", "name": "🇧🇻" }], 2890 + "severity": "inform" 2891 + }, 2892 + { 2893 + "adultOnly": false, 2894 + "blurs": "none", 2895 + "defaultSetting": "warn", 2896 + "identifier": "bw", 2897 + "locales": [{ "description": "Botswana", "lang": "en", "name": "🇧🇼" }], 2898 + "severity": "inform" 2899 + }, 2900 + { 2901 + "adultOnly": false, 2902 + "blurs": "none", 2903 + "defaultSetting": "warn", 2904 + "identifier": "by", 2905 + "locales": [{ "description": "Belarus", "lang": "en", "name": "🇧🇾" }], 2906 + "severity": "inform" 2907 + }, 2908 + { 2909 + "adultOnly": false, 2910 + "blurs": "none", 2911 + "defaultSetting": "warn", 2912 + "identifier": "bz", 2913 + "locales": [{ "description": "Belize", "lang": "en", "name": "🇧🇿" }], 2914 + "severity": "inform" 2915 + }, 2916 + { 2917 + "adultOnly": false, 2918 + "blurs": "none", 2919 + "defaultSetting": "warn", 2920 + "identifier": "ca", 2921 + "locales": [{ "description": "Canada", "lang": "en", "name": "🇨🇦" }], 2922 + "severity": "inform" 2923 + }, 2924 + { 2925 + "adultOnly": false, 2926 + "blurs": "none", 2927 + "defaultSetting": "warn", 2928 + "identifier": "cc", 2929 + "locales": [{ "description": "Cocos (Keeling) Islands", "lang": "en", "name": "🇨🇨" }], 2930 + "severity": "inform" 2931 + }, 2932 + { 2933 + "adultOnly": false, 2934 + "blurs": "none", 2935 + "defaultSetting": "warn", 2936 + "identifier": "cd", 2937 + "locales": [{ "description": "Congo", "lang": "en", "name": "🇨🇩" }], 2938 + "severity": "inform" 2939 + }, 2940 + { 2941 + "adultOnly": false, 2942 + "blurs": "none", 2943 + "defaultSetting": "warn", 2944 + "identifier": "cf", 2945 + "locales": [{ "description": "Central African Republic", "lang": "en", "name": "🇨🇫" }], 2946 + "severity": "inform" 2947 + }, 2948 + { 2949 + "adultOnly": false, 2950 + "blurs": "none", 2951 + "defaultSetting": "warn", 2952 + "identifier": "cg", 2953 + "locales": [{ "description": "Congo", "lang": "en", "name": "🇨🇬" }], 2954 + "severity": "inform" 2955 + }, 2956 + { 2957 + "adultOnly": false, 2958 + "blurs": "none", 2959 + "defaultSetting": "warn", 2960 + "identifier": "ch", 2961 + "locales": [{ "description": "Switzerland", "lang": "en", "name": "🇨🇭" }], 2962 + "severity": "inform" 2963 + }, 2964 + { 2965 + "adultOnly": false, 2966 + "blurs": "none", 2967 + "defaultSetting": "warn", 2968 + "identifier": "ci", 2969 + "locales": [{ "description": "Côte D'Ivoire", "lang": "en", "name": "🇨🇮" }], 2970 + "severity": "inform" 2971 + }, 2972 + { 2973 + "adultOnly": false, 2974 + "blurs": "none", 2975 + "defaultSetting": "warn", 2976 + "identifier": "ck", 2977 + "locales": [{ "description": "Cook Islands", "lang": "en", "name": "🇨🇰" }], 2978 + "severity": "inform" 2979 + }, 2980 + { 2981 + "adultOnly": false, 2982 + "blurs": "none", 2983 + "defaultSetting": "warn", 2984 + "identifier": "cl", 2985 + "locales": [{ "description": "Chile", "lang": "en", "name": "🇨🇱" }], 2986 + "severity": "inform" 2987 + }, 2988 + { 2989 + "adultOnly": false, 2990 + "blurs": "none", 2991 + "defaultSetting": "warn", 2992 + "identifier": "cm", 2993 + "locales": [{ "description": "Cameroon", "lang": "en", "name": "🇨🇲" }], 2994 + "severity": "inform" 2995 + }, 2996 + { 2997 + "adultOnly": false, 2998 + "blurs": "none", 2999 + "defaultSetting": "warn", 3000 + "identifier": "cn", 3001 + "locales": [{ "description": "China", "lang": "en", "name": "🇨🇳" }], 3002 + "severity": "inform" 3003 + }, 3004 + { 3005 + "adultOnly": false, 3006 + "blurs": "none", 3007 + "defaultSetting": "warn", 3008 + "identifier": "co", 3009 + "locales": [{ "description": "Colombia", "lang": "en", "name": "🇨🇴" }], 3010 + "severity": "inform" 3011 + }, 3012 + { 3013 + "adultOnly": false, 3014 + "blurs": "none", 3015 + "defaultSetting": "warn", 3016 + "identifier": "cr", 3017 + "locales": [{ "description": "Costa Rica", "lang": "en", "name": "🇨🇷" }], 3018 + "severity": "inform" 3019 + }, 3020 + { 3021 + "adultOnly": false, 3022 + "blurs": "none", 3023 + "defaultSetting": "warn", 3024 + "identifier": "cu", 3025 + "locales": [{ "description": "Cuba", "lang": "en", "name": "🇨🇺" }], 3026 + "severity": "inform" 3027 + }, 3028 + { 3029 + "adultOnly": false, 3030 + "blurs": "none", 3031 + "defaultSetting": "warn", 3032 + "identifier": "cv", 3033 + "locales": [{ "description": "Cape Verde", "lang": "en", "name": "🇨🇻" }], 3034 + "severity": "inform" 3035 + }, 3036 + { 3037 + "adultOnly": false, 3038 + "blurs": "none", 3039 + "defaultSetting": "warn", 3040 + "identifier": "cw", 3041 + "locales": [{ "description": "Curaçao", "lang": "en", "name": "🇨🇼" }], 3042 + "severity": "inform" 3043 + }, 3044 + { 3045 + "adultOnly": false, 3046 + "blurs": "none", 3047 + "defaultSetting": "warn", 3048 + "identifier": "cx", 3049 + "locales": [{ "description": "Christmas Island", "lang": "en", "name": "🇨🇽" }], 3050 + "severity": "inform" 3051 + }, 3052 + { 3053 + "adultOnly": false, 3054 + "blurs": "none", 3055 + "defaultSetting": "warn", 3056 + "identifier": "cy", 3057 + "locales": [{ "description": "Cyprus", "lang": "en", "name": "🇨🇾" }], 3058 + "severity": "inform" 3059 + }, 3060 + { 3061 + "adultOnly": false, 3062 + "blurs": "none", 3063 + "defaultSetting": "warn", 3064 + "identifier": "cz", 3065 + "locales": [{ "description": "Czech Republic", "lang": "en", "name": "🇨🇿" }], 3066 + "severity": "inform" 3067 + }, 3068 + { 3069 + "adultOnly": false, 3070 + "blurs": "none", 3071 + "defaultSetting": "warn", 3072 + "identifier": "de", 3073 + "locales": [{ "description": "Germany", "lang": "en", "name": "🇩🇪" }], 3074 + "severity": "inform" 3075 + }, 3076 + { 3077 + "adultOnly": false, 3078 + "blurs": "none", 3079 + "defaultSetting": "warn", 3080 + "identifier": "dj", 3081 + "locales": [{ "description": "Djibouti", "lang": "en", "name": "🇩🇯" }], 3082 + "severity": "inform" 3083 + }, 3084 + { 3085 + "adultOnly": false, 3086 + "blurs": "none", 3087 + "defaultSetting": "warn", 3088 + "identifier": "dk", 3089 + "locales": [{ "description": "Denmark", "lang": "en", "name": "🇩🇰" }], 3090 + "severity": "inform" 3091 + }, 3092 + { 3093 + "adultOnly": false, 3094 + "blurs": "none", 3095 + "defaultSetting": "warn", 3096 + "identifier": "dm", 3097 + "locales": [{ "description": "Dominica", "lang": "en", "name": "🇩🇲" }], 3098 + "severity": "inform" 3099 + }, 3100 + { 3101 + "adultOnly": false, 3102 + "blurs": "none", 3103 + "defaultSetting": "warn", 3104 + "identifier": "do", 3105 + "locales": [{ "description": "Dominican Republic", "lang": "en", "name": "🇩🇴" }], 3106 + "severity": "inform" 3107 + }, 3108 + { 3109 + "adultOnly": false, 3110 + "blurs": "none", 3111 + "defaultSetting": "warn", 3112 + "identifier": "dz", 3113 + "locales": [{ "description": "Algeria", "lang": "en", "name": "🇩🇿" }], 3114 + "severity": "inform" 3115 + }, 3116 + { 3117 + "adultOnly": false, 3118 + "blurs": "none", 3119 + "defaultSetting": "warn", 3120 + "identifier": "ec", 3121 + "locales": [{ "description": "Ecuador", "lang": "en", "name": "🇪🇨" }], 3122 + "severity": "inform" 3123 + }, 3124 + { 3125 + "adultOnly": false, 3126 + "blurs": "none", 3127 + "defaultSetting": "warn", 3128 + "identifier": "ee", 3129 + "locales": [{ "description": "Estonia", "lang": "en", "name": "🇪🇪" }], 3130 + "severity": "inform" 3131 + }, 3132 + { 3133 + "adultOnly": false, 3134 + "blurs": "none", 3135 + "defaultSetting": "warn", 3136 + "identifier": "eg", 3137 + "locales": [{ "description": "Egypt", "lang": "en", "name": "🇪🇬" }], 3138 + "severity": "inform" 3139 + }, 3140 + { 3141 + "adultOnly": false, 3142 + "blurs": "none", 3143 + "defaultSetting": "warn", 3144 + "identifier": "eh", 3145 + "locales": [{ "description": "Western Sahara", "lang": "en", "name": "🇪🇭" }], 3146 + "severity": "inform" 3147 + }, 3148 + { 3149 + "adultOnly": false, 3150 + "blurs": "none", 3151 + "defaultSetting": "warn", 3152 + "identifier": "er", 3153 + "locales": [{ "description": "Eritrea", "lang": "en", "name": "🇪🇷" }], 3154 + "severity": "inform" 3155 + }, 3156 + { 3157 + "adultOnly": false, 3158 + "blurs": "none", 3159 + "defaultSetting": "warn", 3160 + "identifier": "es", 3161 + "locales": [{ "description": "Spain", "lang": "en", "name": "🇪🇸" }], 3162 + "severity": "inform" 3163 + }, 3164 + { 3165 + "adultOnly": false, 3166 + "blurs": "none", 3167 + "defaultSetting": "warn", 3168 + "identifier": "et", 3169 + "locales": [{ "description": "Ethiopia", "lang": "en", "name": "🇪🇹" }], 3170 + "severity": "inform" 3171 + }, 3172 + { 3173 + "adultOnly": false, 3174 + "blurs": "none", 3175 + "defaultSetting": "warn", 3176 + "identifier": "fi", 3177 + "locales": [{ "description": "Finland", "lang": "en", "name": "🇫🇮" }], 3178 + "severity": "inform" 3179 + }, 3180 + { 3181 + "adultOnly": false, 3182 + "blurs": "none", 3183 + "defaultSetting": "warn", 3184 + "identifier": "fj", 3185 + "locales": [{ "description": "Fiji", "lang": "en", "name": "🇫🇯" }], 3186 + "severity": "inform" 3187 + }, 3188 + { 3189 + "adultOnly": false, 3190 + "blurs": "none", 3191 + "defaultSetting": "warn", 3192 + "identifier": "fk", 3193 + "locales": [{ "description": "Falkland Islands (Malvinas)", "lang": "en", "name": "🇫🇰" }], 3194 + "severity": "inform" 3195 + }, 3196 + { 3197 + "adultOnly": false, 3198 + "blurs": "none", 3199 + "defaultSetting": "warn", 3200 + "identifier": "fm", 3201 + "locales": [{ "description": "Micronesia", "lang": "en", "name": "🇫🇲" }], 3202 + "severity": "inform" 3203 + }, 3204 + { 3205 + "adultOnly": false, 3206 + "blurs": "none", 3207 + "defaultSetting": "warn", 3208 + "identifier": "fo", 3209 + "locales": [{ "description": "Faroe Islands", "lang": "en", "name": "🇫🇴" }], 3210 + "severity": "inform" 3211 + }, 3212 + { 3213 + "adultOnly": false, 3214 + "blurs": "none", 3215 + "defaultSetting": "warn", 3216 + "identifier": "fr", 3217 + "locales": [{ "description": "France", "lang": "en", "name": "🇫🇷" }], 3218 + "severity": "inform" 3219 + }, 3220 + { 3221 + "adultOnly": false, 3222 + "blurs": "none", 3223 + "defaultSetting": "warn", 3224 + "identifier": "ga", 3225 + "locales": [{ "description": "Gabon", "lang": "en", "name": "🇬🇦" }], 3226 + "severity": "inform" 3227 + }, 3228 + { 3229 + "adultOnly": false, 3230 + "blurs": "none", 3231 + "defaultSetting": "warn", 3232 + "identifier": "gb", 3233 + "locales": [{ "description": "United Kingdom", "lang": "en", "name": "🇬🇧" }], 3234 + "severity": "inform" 3235 + }, 3236 + { 3237 + "adultOnly": false, 3238 + "blurs": "none", 3239 + "defaultSetting": "warn", 3240 + "identifier": "gd", 3241 + "locales": [{ "description": "Grenada", "lang": "en", "name": "🇬🇩" }], 3242 + "severity": "inform" 3243 + }, 3244 + { 3245 + "adultOnly": false, 3246 + "blurs": "none", 3247 + "defaultSetting": "warn", 3248 + "identifier": "ge", 3249 + "locales": [{ "description": "Georgia", "lang": "en", "name": "🇬🇪" }], 3250 + "severity": "inform" 3251 + }, 3252 + { 3253 + "adultOnly": false, 3254 + "blurs": "none", 3255 + "defaultSetting": "warn", 3256 + "identifier": "gf", 3257 + "locales": [{ "description": "French Guiana", "lang": "en", "name": "🇬🇫" }], 3258 + "severity": "inform" 3259 + }, 3260 + { 3261 + "adultOnly": false, 3262 + "blurs": "none", 3263 + "defaultSetting": "warn", 3264 + "identifier": "gg", 3265 + "locales": [{ "description": "Guernsey", "lang": "en", "name": "🇬🇬" }], 3266 + "severity": "inform" 3267 + }, 3268 + { 3269 + "adultOnly": false, 3270 + "blurs": "none", 3271 + "defaultSetting": "warn", 3272 + "identifier": "gh", 3273 + "locales": [{ "description": "Ghana", "lang": "en", "name": "🇬🇭" }], 3274 + "severity": "inform" 3275 + }, 3276 + { 3277 + "adultOnly": false, 3278 + "blurs": "none", 3279 + "defaultSetting": "warn", 3280 + "identifier": "gi", 3281 + "locales": [{ "description": "Gibraltar", "lang": "en", "name": "🇬🇮" }], 3282 + "severity": "inform" 3283 + }, 3284 + { 3285 + "adultOnly": false, 3286 + "blurs": "none", 3287 + "defaultSetting": "warn", 3288 + "identifier": "gl", 3289 + "locales": [{ "description": "Greenland", "lang": "en", "name": "🇬🇱" }], 3290 + "severity": "inform" 3291 + }, 3292 + { 3293 + "adultOnly": false, 3294 + "blurs": "none", 3295 + "defaultSetting": "warn", 3296 + "identifier": "gm", 3297 + "locales": [{ "description": "Gambia", "lang": "en", "name": "🇬🇲" }], 3298 + "severity": "inform" 3299 + }, 3300 + { 3301 + "adultOnly": false, 3302 + "blurs": "none", 3303 + "defaultSetting": "warn", 3304 + "identifier": "gn", 3305 + "locales": [{ "description": "Guinea", "lang": "en", "name": "🇬🇳" }], 3306 + "severity": "inform" 3307 + }, 3308 + { 3309 + "adultOnly": false, 3310 + "blurs": "none", 3311 + "defaultSetting": "warn", 3312 + "identifier": "gp", 3313 + "locales": [{ "description": "Guadeloupe", "lang": "en", "name": "🇬🇵" }], 3314 + "severity": "inform" 3315 + }, 3316 + { 3317 + "adultOnly": false, 3318 + "blurs": "none", 3319 + "defaultSetting": "warn", 3320 + "identifier": "gq", 3321 + "locales": [{ "description": "Equatorial Guinea", "lang": "en", "name": "🇬🇶" }], 3322 + "severity": "inform" 3323 + }, 3324 + { 3325 + "adultOnly": false, 3326 + "blurs": "none", 3327 + "defaultSetting": "warn", 3328 + "identifier": "gr", 3329 + "locales": [{ "description": "Greece", "lang": "en", "name": "🇬🇷" }], 3330 + "severity": "inform" 3331 + }, 3332 + { 3333 + "adultOnly": false, 3334 + "blurs": "none", 3335 + "defaultSetting": "warn", 3336 + "identifier": "gs", 3337 + "locales": [{ "description": "South Georgia", "lang": "en", "name": "🇬🇸" }], 3338 + "severity": "inform" 3339 + }, 3340 + { 3341 + "adultOnly": false, 3342 + "blurs": "none", 3343 + "defaultSetting": "warn", 3344 + "identifier": "gt", 3345 + "locales": [{ "description": "Guatemala", "lang": "en", "name": "🇬🇹" }], 3346 + "severity": "inform" 3347 + }, 3348 + { 3349 + "adultOnly": false, 3350 + "blurs": "none", 3351 + "defaultSetting": "warn", 3352 + "identifier": "gu", 3353 + "locales": [{ "description": "Guam", "lang": "en", "name": "🇬🇺" }], 3354 + "severity": "inform" 3355 + }, 3356 + { 3357 + "adultOnly": false, 3358 + "blurs": "none", 3359 + "defaultSetting": "warn", 3360 + "identifier": "gw", 3361 + "locales": [{ "description": "Guinea-Bissau", "lang": "en", "name": "🇬🇼" }], 3362 + "severity": "inform" 3363 + }, 3364 + { 3365 + "adultOnly": false, 3366 + "blurs": "none", 3367 + "defaultSetting": "warn", 3368 + "identifier": "gy", 3369 + "locales": [{ "description": "Guyana", "lang": "en", "name": "🇬🇾" }], 3370 + "severity": "inform" 3371 + }, 3372 + { 3373 + "adultOnly": false, 3374 + "blurs": "none", 3375 + "defaultSetting": "warn", 3376 + "identifier": "hk", 3377 + "locales": [{ "description": "Hong Kong", "lang": "en", "name": "🇭🇰" }], 3378 + "severity": "inform" 3379 + }, 3380 + { 3381 + "adultOnly": false, 3382 + "blurs": "none", 3383 + "defaultSetting": "warn", 3384 + "identifier": "hm", 3385 + "locales": [{ "description": "Heard Island and Mcdonald Islands", "lang": "en", "name": "🇭🇲" }], 3386 + "severity": "inform" 3387 + }, 3388 + { 3389 + "adultOnly": false, 3390 + "blurs": "none", 3391 + "defaultSetting": "warn", 3392 + "identifier": "hn", 3393 + "locales": [{ "description": "Honduras", "lang": "en", "name": "🇭🇳" }], 3394 + "severity": "inform" 3395 + }, 3396 + { 3397 + "adultOnly": false, 3398 + "blurs": "none", 3399 + "defaultSetting": "warn", 3400 + "identifier": "hr", 3401 + "locales": [{ "description": "Croatia", "lang": "en", "name": "🇭🇷" }], 3402 + "severity": "inform" 3403 + }, 3404 + { 3405 + "adultOnly": false, 3406 + "blurs": "none", 3407 + "defaultSetting": "warn", 3408 + "identifier": "ht", 3409 + "locales": [{ "description": "Haiti", "lang": "en", "name": "🇭🇹" }], 3410 + "severity": "inform" 3411 + }, 3412 + { 3413 + "adultOnly": false, 3414 + "blurs": "none", 3415 + "defaultSetting": "warn", 3416 + "identifier": "hu", 3417 + "locales": [{ "description": "Hungary", "lang": "en", "name": "🇭🇺" }], 3418 + "severity": "inform" 3419 + }, 3420 + { 3421 + "adultOnly": false, 3422 + "blurs": "none", 3423 + "defaultSetting": "warn", 3424 + "identifier": "id", 3425 + "locales": [{ "description": "Indonesia", "lang": "en", "name": "🇮🇩" }], 3426 + "severity": "inform" 3427 + }, 3428 + { 3429 + "adultOnly": false, 3430 + "blurs": "none", 3431 + "defaultSetting": "warn", 3432 + "identifier": "ie", 3433 + "locales": [{ "description": "Ireland", "lang": "en", "name": "🇮🇪" }], 3434 + "severity": "inform" 3435 + }, 3436 + { 3437 + "adultOnly": false, 3438 + "blurs": "none", 3439 + "defaultSetting": "warn", 3440 + "identifier": "il", 3441 + "locales": [{ "description": "Israel", "lang": "en", "name": "🇮🇱" }], 3442 + "severity": "inform" 3443 + }, 3444 + { 3445 + "adultOnly": false, 3446 + "blurs": "none", 3447 + "defaultSetting": "warn", 3448 + "identifier": "im", 3449 + "locales": [{ "description": "Isle of Man", "lang": "en", "name": "🇮🇲" }], 3450 + "severity": "inform" 3451 + }, 3452 + { 3453 + "adultOnly": false, 3454 + "blurs": "none", 3455 + "defaultSetting": "warn", 3456 + "identifier": "in", 3457 + "locales": [{ "description": "India", "lang": "en", "name": "🇮🇳" }], 3458 + "severity": "inform" 3459 + }, 3460 + { 3461 + "adultOnly": false, 3462 + "blurs": "none", 3463 + "defaultSetting": "warn", 3464 + "identifier": "io", 3465 + "locales": [{ "description": "British Indian Ocean Territory", "lang": "en", "name": "🇮🇴" }], 3466 + "severity": "inform" 3467 + }, 3468 + { 3469 + "adultOnly": false, 3470 + "blurs": "none", 3471 + "defaultSetting": "warn", 3472 + "identifier": "iq", 3473 + "locales": [{ "description": "Iraq", "lang": "en", "name": "🇮🇶" }], 3474 + "severity": "inform" 3475 + }, 3476 + { 3477 + "adultOnly": false, 3478 + "blurs": "none", 3479 + "defaultSetting": "warn", 3480 + "identifier": "ir", 3481 + "locales": [{ "description": "Iran", "lang": "en", "name": "🇮🇷" }], 3482 + "severity": "inform" 3483 + }, 3484 + { 3485 + "adultOnly": false, 3486 + "blurs": "none", 3487 + "defaultSetting": "warn", 3488 + "identifier": "is", 3489 + "locales": [{ "description": "Iceland", "lang": "en", "name": "🇮🇸" }], 3490 + "severity": "inform" 3491 + }, 3492 + { 3493 + "adultOnly": false, 3494 + "blurs": "none", 3495 + "defaultSetting": "warn", 3496 + "identifier": "it", 3497 + "locales": [{ "description": "Italy", "lang": "en", "name": "🇮🇹" }], 3498 + "severity": "inform" 3499 + }, 3500 + { 3501 + "adultOnly": false, 3502 + "blurs": "none", 3503 + "defaultSetting": "warn", 3504 + "identifier": "je", 3505 + "locales": [{ "description": "Jersey", "lang": "en", "name": "🇯🇪" }], 3506 + "severity": "inform" 3507 + }, 3508 + { 3509 + "adultOnly": false, 3510 + "blurs": "none", 3511 + "defaultSetting": "warn", 3512 + "identifier": "jm", 3513 + "locales": [{ "description": "Jamaica", "lang": "en", "name": "🇯🇲" }], 3514 + "severity": "inform" 3515 + }, 3516 + { 3517 + "adultOnly": false, 3518 + "blurs": "none", 3519 + "defaultSetting": "warn", 3520 + "identifier": "jo", 3521 + "locales": [{ "description": "Jordan", "lang": "en", "name": "🇯🇴" }], 3522 + "severity": "inform" 3523 + }, 3524 + { 3525 + "adultOnly": false, 3526 + "blurs": "none", 3527 + "defaultSetting": "warn", 3528 + "identifier": "jp", 3529 + "locales": [{ "description": "Japan", "lang": "en", "name": "🇯🇵" }], 3530 + "severity": "inform" 3531 + }, 3532 + { 3533 + "adultOnly": false, 3534 + "blurs": "none", 3535 + "defaultSetting": "warn", 3536 + "identifier": "ke", 3537 + "locales": [{ "description": "Kenya", "lang": "en", "name": "🇰🇪" }], 3538 + "severity": "inform" 3539 + }, 3540 + { 3541 + "adultOnly": false, 3542 + "blurs": "none", 3543 + "defaultSetting": "warn", 3544 + "identifier": "kg", 3545 + "locales": [{ "description": "Kyrgyzstan", "lang": "en", "name": "🇰🇬" }], 3546 + "severity": "inform" 3547 + }, 3548 + { 3549 + "adultOnly": false, 3550 + "blurs": "none", 3551 + "defaultSetting": "warn", 3552 + "identifier": "kh", 3553 + "locales": [{ "description": "Cambodia", "lang": "en", "name": "🇰🇭" }], 3554 + "severity": "inform" 3555 + }, 3556 + { 3557 + "adultOnly": false, 3558 + "blurs": "none", 3559 + "defaultSetting": "warn", 3560 + "identifier": "ki", 3561 + "locales": [{ "description": "Kiribati", "lang": "en", "name": "🇰🇮" }], 3562 + "severity": "inform" 3563 + }, 3564 + { 3565 + "adultOnly": false, 3566 + "blurs": "none", 3567 + "defaultSetting": "warn", 3568 + "identifier": "km", 3569 + "locales": [{ "description": "Comoros", "lang": "en", "name": "🇰🇲" }], 3570 + "severity": "inform" 3571 + }, 3572 + { 3573 + "adultOnly": false, 3574 + "blurs": "none", 3575 + "defaultSetting": "warn", 3576 + "identifier": "kn", 3577 + "locales": [{ "description": "Saint Kitts and Nevis", "lang": "en", "name": "🇰🇳" }], 3578 + "severity": "inform" 3579 + }, 3580 + { 3581 + "adultOnly": false, 3582 + "blurs": "none", 3583 + "defaultSetting": "warn", 3584 + "identifier": "kp", 3585 + "locales": [{ "description": "North Korea", "lang": "en", "name": "🇰🇵" }], 3586 + "severity": "inform" 3587 + }, 3588 + { 3589 + "adultOnly": false, 3590 + "blurs": "none", 3591 + "defaultSetting": "warn", 3592 + "identifier": "kr", 3593 + "locales": [{ "description": "South Korea", "lang": "en", "name": "🇰🇷" }], 3594 + "severity": "inform" 3595 + }, 3596 + { 3597 + "adultOnly": false, 3598 + "blurs": "none", 3599 + "defaultSetting": "warn", 3600 + "identifier": "kw", 3601 + "locales": [{ "description": "Kuwait", "lang": "en", "name": "🇰🇼" }], 3602 + "severity": "inform" 3603 + }, 3604 + { 3605 + "adultOnly": false, 3606 + "blurs": "none", 3607 + "defaultSetting": "warn", 3608 + "identifier": "ky", 3609 + "locales": [{ "description": "Cayman Islands", "lang": "en", "name": "🇰🇾" }], 3610 + "severity": "inform" 3611 + }, 3612 + { 3613 + "adultOnly": false, 3614 + "blurs": "none", 3615 + "defaultSetting": "warn", 3616 + "identifier": "kz", 3617 + "locales": [{ "description": "Kazakhstan", "lang": "en", "name": "🇰🇿" }], 3618 + "severity": "inform" 3619 + }, 3620 + { 3621 + "adultOnly": false, 3622 + "blurs": "none", 3623 + "defaultSetting": "warn", 3624 + "identifier": "la", 3625 + "locales": [{ "description": "Lao People's Democratic Republic", "lang": "en", "name": "🇱🇦" }], 3626 + "severity": "inform" 3627 + }, 3628 + { 3629 + "adultOnly": false, 3630 + "blurs": "none", 3631 + "defaultSetting": "warn", 3632 + "identifier": "lb", 3633 + "locales": [{ "description": "Lebanon", "lang": "en", "name": "🇱🇧" }], 3634 + "severity": "inform" 3635 + }, 3636 + { 3637 + "adultOnly": false, 3638 + "blurs": "none", 3639 + "defaultSetting": "warn", 3640 + "identifier": "lc", 3641 + "locales": [{ "description": "Saint Lucia", "lang": "en", "name": "🇱🇨" }], 3642 + "severity": "inform" 3643 + }, 3644 + { 3645 + "adultOnly": false, 3646 + "blurs": "none", 3647 + "defaultSetting": "warn", 3648 + "identifier": "li", 3649 + "locales": [{ "description": "Liechtenstein", "lang": "en", "name": "🇱🇮" }], 3650 + "severity": "inform" 3651 + }, 3652 + { 3653 + "adultOnly": false, 3654 + "blurs": "none", 3655 + "defaultSetting": "warn", 3656 + "identifier": "lk", 3657 + "locales": [{ "description": "Sri Lanka", "lang": "en", "name": "🇱🇰" }], 3658 + "severity": "inform" 3659 + }, 3660 + { 3661 + "adultOnly": false, 3662 + "blurs": "none", 3663 + "defaultSetting": "warn", 3664 + "identifier": "lr", 3665 + "locales": [{ "description": "Liberia", "lang": "en", "name": "🇱🇷" }], 3666 + "severity": "inform" 3667 + }, 3668 + { 3669 + "adultOnly": false, 3670 + "blurs": "none", 3671 + "defaultSetting": "warn", 3672 + "identifier": "ls", 3673 + "locales": [{ "description": "Lesotho", "lang": "en", "name": "🇱🇸" }], 3674 + "severity": "inform" 3675 + }, 3676 + { 3677 + "adultOnly": false, 3678 + "blurs": "none", 3679 + "defaultSetting": "warn", 3680 + "identifier": "lt", 3681 + "locales": [{ "description": "Lithuania", "lang": "en", "name": "🇱🇹" }], 3682 + "severity": "inform" 3683 + }, 3684 + { 3685 + "adultOnly": false, 3686 + "blurs": "none", 3687 + "defaultSetting": "warn", 3688 + "identifier": "lu", 3689 + "locales": [{ "description": "Luxembourg", "lang": "en", "name": "🇱🇺" }], 3690 + "severity": "inform" 3691 + }, 3692 + { 3693 + "adultOnly": false, 3694 + "blurs": "none", 3695 + "defaultSetting": "warn", 3696 + "identifier": "lv", 3697 + "locales": [{ "description": "Latvia", "lang": "en", "name": "🇱🇻" }], 3698 + "severity": "inform" 3699 + }, 3700 + { 3701 + "adultOnly": false, 3702 + "blurs": "none", 3703 + "defaultSetting": "warn", 3704 + "identifier": "ly", 3705 + "locales": [{ "description": "Libya", "lang": "en", "name": "🇱🇾" }], 3706 + "severity": "inform" 3707 + }, 3708 + { 3709 + "adultOnly": false, 3710 + "blurs": "none", 3711 + "defaultSetting": "warn", 3712 + "identifier": "ma", 3713 + "locales": [{ "description": "Morocco", "lang": "en", "name": "🇲🇦" }], 3714 + "severity": "inform" 3715 + }, 3716 + { 3717 + "adultOnly": false, 3718 + "blurs": "none", 3719 + "defaultSetting": "warn", 3720 + "identifier": "mc", 3721 + "locales": [{ "description": "Monaco", "lang": "en", "name": "🇲🇨" }], 3722 + "severity": "inform" 3723 + }, 3724 + { 3725 + "adultOnly": false, 3726 + "blurs": "none", 3727 + "defaultSetting": "warn", 3728 + "identifier": "md", 3729 + "locales": [{ "description": "Moldova", "lang": "en", "name": "🇲🇩" }], 3730 + "severity": "inform" 3731 + }, 3732 + { 3733 + "adultOnly": false, 3734 + "blurs": "none", 3735 + "defaultSetting": "warn", 3736 + "identifier": "me", 3737 + "locales": [{ "description": "Montenegro", "lang": "en", "name": "🇲🇪" }], 3738 + "severity": "inform" 3739 + }, 3740 + { 3741 + "adultOnly": false, 3742 + "blurs": "none", 3743 + "defaultSetting": "warn", 3744 + "identifier": "mf", 3745 + "locales": [{ "description": "Saint Martin (French Part)", "lang": "en", "name": "🇲🇫" }], 3746 + "severity": "inform" 3747 + }, 3748 + { 3749 + "adultOnly": false, 3750 + "blurs": "none", 3751 + "defaultSetting": "warn", 3752 + "identifier": "mg", 3753 + "locales": [{ "description": "Madagascar", "lang": "en", "name": "🇲🇬" }], 3754 + "severity": "inform" 3755 + }, 3756 + { 3757 + "adultOnly": false, 3758 + "blurs": "none", 3759 + "defaultSetting": "warn", 3760 + "identifier": "mh", 3761 + "locales": [{ "description": "Marshall Islands", "lang": "en", "name": "🇲🇭" }], 3762 + "severity": "inform" 3763 + }, 3764 + { 3765 + "adultOnly": false, 3766 + "blurs": "none", 3767 + "defaultSetting": "warn", 3768 + "identifier": "mk", 3769 + "locales": [{ "description": "Macedonia", "lang": "en", "name": "🇲🇰" }], 3770 + "severity": "inform" 3771 + }, 3772 + { 3773 + "adultOnly": false, 3774 + "blurs": "none", 3775 + "defaultSetting": "warn", 3776 + "identifier": "ml", 3777 + "locales": [{ "description": "Mali", "lang": "en", "name": "🇲🇱" }], 3778 + "severity": "inform" 3779 + }, 3780 + { 3781 + "adultOnly": false, 3782 + "blurs": "none", 3783 + "defaultSetting": "warn", 3784 + "identifier": "mm", 3785 + "locales": [{ "description": "Myanmar", "lang": "en", "name": "🇲🇲" }], 3786 + "severity": "inform" 3787 + }, 3788 + { 3789 + "adultOnly": false, 3790 + "blurs": "none", 3791 + "defaultSetting": "warn", 3792 + "identifier": "mn", 3793 + "locales": [{ "description": "Mongolia", "lang": "en", "name": "🇲🇳" }], 3794 + "severity": "inform" 3795 + }, 3796 + { 3797 + "adultOnly": false, 3798 + "blurs": "none", 3799 + "defaultSetting": "warn", 3800 + "identifier": "mo", 3801 + "locales": [{ "description": "Macao", "lang": "en", "name": "🇲🇴" }], 3802 + "severity": "inform" 3803 + }, 3804 + { 3805 + "adultOnly": false, 3806 + "blurs": "none", 3807 + "defaultSetting": "warn", 3808 + "identifier": "mp", 3809 + "locales": [{ "description": "Northern Mariana Islands", "lang": "en", "name": "🇲🇵" }], 3810 + "severity": "inform" 3811 + }, 3812 + { 3813 + "adultOnly": false, 3814 + "blurs": "none", 3815 + "defaultSetting": "warn", 3816 + "identifier": "mq", 3817 + "locales": [{ "description": "Martinique", "lang": "en", "name": "🇲🇶" }], 3818 + "severity": "inform" 3819 + }, 3820 + { 3821 + "adultOnly": false, 3822 + "blurs": "none", 3823 + "defaultSetting": "warn", 3824 + "identifier": "mr", 3825 + "locales": [{ "description": "Mauritania", "lang": "en", "name": "🇲🇷" }], 3826 + "severity": "inform" 3827 + }, 3828 + { 3829 + "adultOnly": false, 3830 + "blurs": "none", 3831 + "defaultSetting": "warn", 3832 + "identifier": "ms", 3833 + "locales": [{ "description": "Montserrat", "lang": "en", "name": "🇲🇸" }], 3834 + "severity": "inform" 3835 + }, 3836 + { 3837 + "adultOnly": false, 3838 + "blurs": "none", 3839 + "defaultSetting": "warn", 3840 + "identifier": "mt", 3841 + "locales": [{ "description": "Malta", "lang": "en", "name": "🇲🇹" }], 3842 + "severity": "inform" 3843 + }, 3844 + { 3845 + "adultOnly": false, 3846 + "blurs": "none", 3847 + "defaultSetting": "warn", 3848 + "identifier": "mu", 3849 + "locales": [{ "description": "Mauritius", "lang": "en", "name": "🇲🇺" }], 3850 + "severity": "inform" 3851 + }, 3852 + { 3853 + "adultOnly": false, 3854 + "blurs": "none", 3855 + "defaultSetting": "warn", 3856 + "identifier": "mv", 3857 + "locales": [{ "description": "Maldives", "lang": "en", "name": "🇲🇻" }], 3858 + "severity": "inform" 3859 + }, 3860 + { 3861 + "adultOnly": false, 3862 + "blurs": "none", 3863 + "defaultSetting": "warn", 3864 + "identifier": "mw", 3865 + "locales": [{ "description": "Malawi", "lang": "en", "name": "🇲🇼" }], 3866 + "severity": "inform" 3867 + }, 3868 + { 3869 + "adultOnly": false, 3870 + "blurs": "none", 3871 + "defaultSetting": "warn", 3872 + "identifier": "mx", 3873 + "locales": [{ "description": "Mexico", "lang": "en", "name": "🇲🇽" }], 3874 + "severity": "inform" 3875 + }, 3876 + { 3877 + "adultOnly": false, 3878 + "blurs": "none", 3879 + "defaultSetting": "warn", 3880 + "identifier": "my", 3881 + "locales": [{ "description": "Malaysia", "lang": "en", "name": "🇲🇾" }], 3882 + "severity": "inform" 3883 + }, 3884 + { 3885 + "adultOnly": false, 3886 + "blurs": "none", 3887 + "defaultSetting": "warn", 3888 + "identifier": "mz", 3889 + "locales": [{ "description": "Mozambique", "lang": "en", "name": "🇲🇿" }], 3890 + "severity": "inform" 3891 + }, 3892 + { 3893 + "adultOnly": false, 3894 + "blurs": "none", 3895 + "defaultSetting": "warn", 3896 + "identifier": "na", 3897 + "locales": [{ "description": "Namibia", "lang": "en", "name": "🇳🇦" }], 3898 + "severity": "inform" 3899 + }, 3900 + { 3901 + "adultOnly": false, 3902 + "blurs": "none", 3903 + "defaultSetting": "warn", 3904 + "identifier": "nc", 3905 + "locales": [{ "description": "New Caledonia", "lang": "en", "name": "🇳🇨" }], 3906 + "severity": "inform" 3907 + }, 3908 + { 3909 + "adultOnly": false, 3910 + "blurs": "none", 3911 + "defaultSetting": "warn", 3912 + "identifier": "ne", 3913 + "locales": [{ "description": "Niger", "lang": "en", "name": "🇳🇪" }], 3914 + "severity": "inform" 3915 + }, 3916 + { 3917 + "adultOnly": false, 3918 + "blurs": "none", 3919 + "defaultSetting": "warn", 3920 + "identifier": "nf", 3921 + "locales": [{ "description": "Norfolk Island", "lang": "en", "name": "🇳🇫" }], 3922 + "severity": "inform" 3923 + }, 3924 + { 3925 + "adultOnly": false, 3926 + "blurs": "none", 3927 + "defaultSetting": "warn", 3928 + "identifier": "ng", 3929 + "locales": [{ "description": "Nigeria", "lang": "en", "name": "🇳🇬" }], 3930 + "severity": "inform" 3931 + }, 3932 + { 3933 + "adultOnly": false, 3934 + "blurs": "none", 3935 + "defaultSetting": "warn", 3936 + "identifier": "ni", 3937 + "locales": [{ "description": "Nicaragua", "lang": "en", "name": "🇳🇮" }], 3938 + "severity": "inform" 3939 + }, 3940 + { 3941 + "adultOnly": false, 3942 + "blurs": "none", 3943 + "defaultSetting": "warn", 3944 + "identifier": "nl", 3945 + "locales": [{ "description": "Netherlands", "lang": "en", "name": "🇳🇱" }], 3946 + "severity": "inform" 3947 + }, 3948 + { 3949 + "adultOnly": false, 3950 + "blurs": "none", 3951 + "defaultSetting": "warn", 3952 + "identifier": "no", 3953 + "locales": [{ "description": "Norway", "lang": "en", "name": "🇳🇴" }], 3954 + "severity": "inform" 3955 + }, 3956 + { 3957 + "adultOnly": false, 3958 + "blurs": "none", 3959 + "defaultSetting": "warn", 3960 + "identifier": "np", 3961 + "locales": [{ "description": "Nepal", "lang": "en", "name": "🇳🇵" }], 3962 + "severity": "inform" 3963 + }, 3964 + { 3965 + "adultOnly": false, 3966 + "blurs": "none", 3967 + "defaultSetting": "warn", 3968 + "identifier": "nr", 3969 + "locales": [{ "description": "Nauru", "lang": "en", "name": "🇳🇷" }], 3970 + "severity": "inform" 3971 + }, 3972 + { 3973 + "adultOnly": false, 3974 + "blurs": "none", 3975 + "defaultSetting": "warn", 3976 + "identifier": "nu", 3977 + "locales": [{ "description": "Niue", "lang": "en", "name": "🇳🇺" }], 3978 + "severity": "inform" 3979 + }, 3980 + { 3981 + "adultOnly": false, 3982 + "blurs": "none", 3983 + "defaultSetting": "warn", 3984 + "identifier": "nz", 3985 + "locales": [{ "description": "New Zealand", "lang": "en", "name": "🇳🇿" }], 3986 + "severity": "inform" 3987 + }, 3988 + { 3989 + "adultOnly": false, 3990 + "blurs": "none", 3991 + "defaultSetting": "warn", 3992 + "identifier": "om", 3993 + "locales": [{ "description": "Oman", "lang": "en", "name": "🇴🇲" }], 3994 + "severity": "inform" 3995 + }, 3996 + { 3997 + "adultOnly": false, 3998 + "blurs": "none", 3999 + "defaultSetting": "warn", 4000 + "identifier": "pa", 4001 + "locales": [{ "description": "Panama", "lang": "en", "name": "🇵🇦" }], 4002 + "severity": "inform" 4003 + }, 4004 + { 4005 + "adultOnly": false, 4006 + "blurs": "none", 4007 + "defaultSetting": "warn", 4008 + "identifier": "pe", 4009 + "locales": [{ "description": "Peru", "lang": "en", "name": "🇵🇪" }], 4010 + "severity": "inform" 4011 + }, 4012 + { 4013 + "adultOnly": false, 4014 + "blurs": "none", 4015 + "defaultSetting": "warn", 4016 + "identifier": "pf", 4017 + "locales": [{ "description": "French Polynesia", "lang": "en", "name": "🇵🇫" }], 4018 + "severity": "inform" 4019 + }, 4020 + { 4021 + "adultOnly": false, 4022 + "blurs": "none", 4023 + "defaultSetting": "warn", 4024 + "identifier": "pg", 4025 + "locales": [{ "description": "Papua New Guinea", "lang": "en", "name": "🇵🇬" }], 4026 + "severity": "inform" 4027 + }, 4028 + { 4029 + "adultOnly": false, 4030 + "blurs": "none", 4031 + "defaultSetting": "warn", 4032 + "identifier": "ph", 4033 + "locales": [{ "description": "Philippines", "lang": "en", "name": "🇵🇭" }], 4034 + "severity": "inform" 4035 + }, 4036 + { 4037 + "adultOnly": false, 4038 + "blurs": "none", 4039 + "defaultSetting": "warn", 4040 + "identifier": "pk", 4041 + "locales": [{ "description": "Pakistan", "lang": "en", "name": "🇵🇰" }], 4042 + "severity": "inform" 4043 + }, 4044 + { 4045 + "adultOnly": false, 4046 + "blurs": "none", 4047 + "defaultSetting": "warn", 4048 + "identifier": "pl", 4049 + "locales": [{ "description": "Poland", "lang": "en", "name": "🇵🇱" }], 4050 + "severity": "inform" 4051 + }, 4052 + { 4053 + "adultOnly": false, 4054 + "blurs": "none", 4055 + "defaultSetting": "warn", 4056 + "identifier": "pm", 4057 + "locales": [{ "description": "Saint Pierre and Miquelon", "lang": "en", "name": "🇵🇲" }], 4058 + "severity": "inform" 4059 + }, 4060 + { 4061 + "adultOnly": false, 4062 + "blurs": "none", 4063 + "defaultSetting": "warn", 4064 + "identifier": "pn", 4065 + "locales": [{ "description": "Pitcairn", "lang": "en", "name": "🇵🇳" }], 4066 + "severity": "inform" 4067 + }, 4068 + { 4069 + "adultOnly": false, 4070 + "blurs": "none", 4071 + "defaultSetting": "warn", 4072 + "identifier": "pr", 4073 + "locales": [{ "description": "Puerto Rico", "lang": "en", "name": "🇵🇷" }], 4074 + "severity": "inform" 4075 + }, 4076 + { 4077 + "adultOnly": false, 4078 + "blurs": "none", 4079 + "defaultSetting": "warn", 4080 + "identifier": "ps", 4081 + "locales": [{ "description": "Palestine", "lang": "en", "name": "🇵🇸" }], 4082 + "severity": "inform" 4083 + }, 4084 + { 4085 + "adultOnly": false, 4086 + "blurs": "none", 4087 + "defaultSetting": "warn", 4088 + "identifier": "pt", 4089 + "locales": [{ "description": "Portugal", "lang": "en", "name": "🇵🇹" }], 4090 + "severity": "inform" 4091 + }, 4092 + { 4093 + "adultOnly": false, 4094 + "blurs": "none", 4095 + "defaultSetting": "warn", 4096 + "identifier": "pw", 4097 + "locales": [{ "description": "Palau", "lang": "en", "name": "🇵🇼" }], 4098 + "severity": "inform" 4099 + }, 4100 + { 4101 + "adultOnly": false, 4102 + "blurs": "none", 4103 + "defaultSetting": "warn", 4104 + "identifier": "py", 4105 + "locales": [{ "description": "Paraguay", "lang": "en", "name": "🇵🇾" }], 4106 + "severity": "inform" 4107 + }, 4108 + { 4109 + "adultOnly": false, 4110 + "blurs": "none", 4111 + "defaultSetting": "warn", 4112 + "identifier": "qa", 4113 + "locales": [{ "description": "Qatar", "lang": "en", "name": "🇶🇦" }], 4114 + "severity": "inform" 4115 + }, 4116 + { 4117 + "adultOnly": false, 4118 + "blurs": "none", 4119 + "defaultSetting": "warn", 4120 + "identifier": "re", 4121 + "locales": [{ "description": "Réunion", "lang": "en", "name": "🇷🇪" }], 4122 + "severity": "inform" 4123 + }, 4124 + { 4125 + "adultOnly": false, 4126 + "blurs": "none", 4127 + "defaultSetting": "warn", 4128 + "identifier": "ro", 4129 + "locales": [{ "description": "Romania", "lang": "en", "name": "🇷🇴" }], 4130 + "severity": "inform" 4131 + }, 4132 + { 4133 + "adultOnly": false, 4134 + "blurs": "none", 4135 + "defaultSetting": "warn", 4136 + "identifier": "rs", 4137 + "locales": [{ "description": "Serbia", "lang": "en", "name": "🇷🇸" }], 4138 + "severity": "inform" 4139 + }, 4140 + { 4141 + "adultOnly": false, 4142 + "blurs": "none", 4143 + "defaultSetting": "warn", 4144 + "identifier": "ru", 4145 + "locales": [{ "description": "Russia", "lang": "en", "name": "🇷🇺" }], 4146 + "severity": "inform" 4147 + }, 4148 + { 4149 + "adultOnly": false, 4150 + "blurs": "none", 4151 + "defaultSetting": "warn", 4152 + "identifier": "rw", 4153 + "locales": [{ "description": "Rwanda", "lang": "en", "name": "🇷🇼" }], 4154 + "severity": "inform" 4155 + }, 4156 + { 4157 + "adultOnly": false, 4158 + "blurs": "none", 4159 + "defaultSetting": "warn", 4160 + "identifier": "sa", 4161 + "locales": [{ "description": "Saudi Arabia", "lang": "en", "name": "🇸🇦" }], 4162 + "severity": "inform" 4163 + }, 4164 + { 4165 + "adultOnly": false, 4166 + "blurs": "none", 4167 + "defaultSetting": "warn", 4168 + "identifier": "sb", 4169 + "locales": [{ "description": "Solomon Islands", "lang": "en", "name": "🇸🇧" }], 4170 + "severity": "inform" 4171 + }, 4172 + { 4173 + "adultOnly": false, 4174 + "blurs": "none", 4175 + "defaultSetting": "warn", 4176 + "identifier": "sc", 4177 + "locales": [{ "description": "Seychelles", "lang": "en", "name": "🇸🇨" }], 4178 + "severity": "inform" 4179 + }, 4180 + { 4181 + "adultOnly": false, 4182 + "blurs": "none", 4183 + "defaultSetting": "warn", 4184 + "identifier": "sd", 4185 + "locales": [{ "description": "Sudan", "lang": "en", "name": "🇸🇩" }], 4186 + "severity": "inform" 4187 + }, 4188 + { 4189 + "adultOnly": false, 4190 + "blurs": "none", 4191 + "defaultSetting": "warn", 4192 + "identifier": "se", 4193 + "locales": [{ "description": "Sweden", "lang": "en", "name": "🇸🇪" }], 4194 + "severity": "inform" 4195 + }, 4196 + { 4197 + "adultOnly": false, 4198 + "blurs": "none", 4199 + "defaultSetting": "warn", 4200 + "identifier": "sg", 4201 + "locales": [{ "description": "Singapore", "lang": "en", "name": "🇸🇬" }], 4202 + "severity": "inform" 4203 + }, 4204 + { 4205 + "adultOnly": false, 4206 + "blurs": "none", 4207 + "defaultSetting": "warn", 4208 + "identifier": "sh", 4209 + "locales": [{ "description": "Saint Helena, Ascension and Tristan Da Cunha", "lang": "en", "name": "🇸🇭" }], 4210 + "severity": "inform" 4211 + }, 4212 + { 4213 + "adultOnly": false, 4214 + "blurs": "none", 4215 + "defaultSetting": "warn", 4216 + "identifier": "si", 4217 + "locales": [{ "description": "Slovenia", "lang": "en", "name": "🇸🇮" }], 4218 + "severity": "inform" 4219 + }, 4220 + { 4221 + "adultOnly": false, 4222 + "blurs": "none", 4223 + "defaultSetting": "warn", 4224 + "identifier": "sj", 4225 + "locales": [{ "description": "Svalbard and Jan Mayen", "lang": "en", "name": "🇸🇯" }], 4226 + "severity": "inform" 4227 + }, 4228 + { 4229 + "adultOnly": false, 4230 + "blurs": "none", 4231 + "defaultSetting": "warn", 4232 + "identifier": "sk", 4233 + "locales": [{ "description": "Slovakia", "lang": "en", "name": "🇸🇰" }], 4234 + "severity": "inform" 4235 + }, 4236 + { 4237 + "adultOnly": false, 4238 + "blurs": "none", 4239 + "defaultSetting": "warn", 4240 + "identifier": "sl", 4241 + "locales": [{ "description": "Sierra Leone", "lang": "en", "name": "🇸🇱" }], 4242 + "severity": "inform" 4243 + }, 4244 + { 4245 + "adultOnly": false, 4246 + "blurs": "none", 4247 + "defaultSetting": "warn", 4248 + "identifier": "sm", 4249 + "locales": [{ "description": "San Marino", "lang": "en", "name": "🇸🇲" }], 4250 + "severity": "inform" 4251 + }, 4252 + { 4253 + "adultOnly": false, 4254 + "blurs": "none", 4255 + "defaultSetting": "warn", 4256 + "identifier": "sn", 4257 + "locales": [{ "description": "Senegal", "lang": "en", "name": "🇸🇳" }], 4258 + "severity": "inform" 4259 + }, 4260 + { 4261 + "adultOnly": false, 4262 + "blurs": "none", 4263 + "defaultSetting": "warn", 4264 + "identifier": "so", 4265 + "locales": [{ "description": "Somalia", "lang": "en", "name": "🇸🇴" }], 4266 + "severity": "inform" 4267 + }, 4268 + { 4269 + "adultOnly": false, 4270 + "blurs": "none", 4271 + "defaultSetting": "warn", 4272 + "identifier": "sr", 4273 + "locales": [{ "description": "Suriname", "lang": "en", "name": "🇸🇷" }], 4274 + "severity": "inform" 4275 + }, 4276 + { 4277 + "adultOnly": false, 4278 + "blurs": "none", 4279 + "defaultSetting": "warn", 4280 + "identifier": "ss", 4281 + "locales": [{ "description": "South Sudan", "lang": "en", "name": "🇸🇸" }], 4282 + "severity": "inform" 4283 + }, 4284 + { 4285 + "adultOnly": false, 4286 + "blurs": "none", 4287 + "defaultSetting": "warn", 4288 + "identifier": "st", 4289 + "locales": [{ "description": "Sao Tome and Principe", "lang": "en", "name": "🇸🇹" }], 4290 + "severity": "inform" 4291 + }, 4292 + { 4293 + "adultOnly": false, 4294 + "blurs": "none", 4295 + "defaultSetting": "warn", 4296 + "identifier": "sv", 4297 + "locales": [{ "description": "El Salvador", "lang": "en", "name": "🇸🇻" }], 4298 + "severity": "inform" 4299 + }, 4300 + { 4301 + "adultOnly": false, 4302 + "blurs": "none", 4303 + "defaultSetting": "warn", 4304 + "identifier": "sx", 4305 + "locales": [{ "description": "Sint Maarten (Dutch Part)", "lang": "en", "name": "🇸🇽" }], 4306 + "severity": "inform" 4307 + }, 4308 + { 4309 + "adultOnly": false, 4310 + "blurs": "none", 4311 + "defaultSetting": "warn", 4312 + "identifier": "sy", 4313 + "locales": [{ "description": "Syrian Arab Republic", "lang": "en", "name": "🇸🇾" }], 4314 + "severity": "inform" 4315 + }, 4316 + { 4317 + "adultOnly": false, 4318 + "blurs": "none", 4319 + "defaultSetting": "warn", 4320 + "identifier": "sz", 4321 + "locales": [{ "description": "Swaziland", "lang": "en", "name": "🇸🇿" }], 4322 + "severity": "inform" 4323 + }, 4324 + { 4325 + "adultOnly": false, 4326 + "blurs": "none", 4327 + "defaultSetting": "warn", 4328 + "identifier": "tc", 4329 + "locales": [{ "description": "Turks and Caicos Islands", "lang": "en", "name": "🇹🇨" }], 4330 + "severity": "inform" 4331 + }, 4332 + { 4333 + "adultOnly": false, 4334 + "blurs": "none", 4335 + "defaultSetting": "warn", 4336 + "identifier": "td", 4337 + "locales": [{ "description": "Chad", "lang": "en", "name": "🇹🇩" }], 4338 + "severity": "inform" 4339 + }, 4340 + { 4341 + "adultOnly": false, 4342 + "blurs": "none", 4343 + "defaultSetting": "warn", 4344 + "identifier": "tf", 4345 + "locales": [{ "description": "French Southern Territories", "lang": "en", "name": "🇹🇫" }], 4346 + "severity": "inform" 4347 + }, 4348 + { 4349 + "adultOnly": false, 4350 + "blurs": "none", 4351 + "defaultSetting": "warn", 4352 + "identifier": "tg", 4353 + "locales": [{ "description": "Togo", "lang": "en", "name": "🇹🇬" }], 4354 + "severity": "inform" 4355 + }, 4356 + { 4357 + "adultOnly": false, 4358 + "blurs": "none", 4359 + "defaultSetting": "warn", 4360 + "identifier": "th", 4361 + "locales": [{ "description": "Thailand", "lang": "en", "name": "🇹🇭" }], 4362 + "severity": "inform" 4363 + }, 4364 + { 4365 + "adultOnly": false, 4366 + "blurs": "none", 4367 + "defaultSetting": "warn", 4368 + "identifier": "tj", 4369 + "locales": [{ "description": "Tajikistan", "lang": "en", "name": "🇹🇯" }], 4370 + "severity": "inform" 4371 + }, 4372 + { 4373 + "adultOnly": false, 4374 + "blurs": "none", 4375 + "defaultSetting": "warn", 4376 + "identifier": "tk", 4377 + "locales": [{ "description": "Tokelau", "lang": "en", "name": "🇹🇰" }], 4378 + "severity": "inform" 4379 + }, 4380 + { 4381 + "adultOnly": false, 4382 + "blurs": "none", 4383 + "defaultSetting": "warn", 4384 + "identifier": "tl", 4385 + "locales": [{ "description": "Timor-Leste", "lang": "en", "name": "🇹🇱" }], 4386 + "severity": "inform" 4387 + }, 4388 + { 4389 + "adultOnly": false, 4390 + "blurs": "none", 4391 + "defaultSetting": "warn", 4392 + "identifier": "tm", 4393 + "locales": [{ "description": "Turkmenistan", "lang": "en", "name": "🇹🇲" }], 4394 + "severity": "inform" 4395 + }, 4396 + { 4397 + "adultOnly": false, 4398 + "blurs": "none", 4399 + "defaultSetting": "warn", 4400 + "identifier": "tn", 4401 + "locales": [{ "description": "Tunisia", "lang": "en", "name": "🇹🇳" }], 4402 + "severity": "inform" 4403 + }, 4404 + { 4405 + "adultOnly": false, 4406 + "blurs": "none", 4407 + "defaultSetting": "warn", 4408 + "identifier": "to", 4409 + "locales": [{ "description": "Tonga", "lang": "en", "name": "🇹🇴" }], 4410 + "severity": "inform" 4411 + }, 4412 + { 4413 + "adultOnly": false, 4414 + "blurs": "none", 4415 + "defaultSetting": "warn", 4416 + "identifier": "tr", 4417 + "locales": [{ "description": "Turkey", "lang": "en", "name": "🇹🇷" }], 4418 + "severity": "inform" 4419 + }, 4420 + { 4421 + "adultOnly": false, 4422 + "blurs": "none", 4423 + "defaultSetting": "warn", 4424 + "identifier": "tt", 4425 + "locales": [{ "description": "Trinidad and Tobago", "lang": "en", "name": "🇹🇹" }], 4426 + "severity": "inform" 4427 + }, 4428 + { 4429 + "adultOnly": false, 4430 + "blurs": "none", 4431 + "defaultSetting": "warn", 4432 + "identifier": "tv", 4433 + "locales": [{ "description": "Tuvalu", "lang": "en", "name": "🇹🇻" }], 4434 + "severity": "inform" 4435 + }, 4436 + { 4437 + "adultOnly": false, 4438 + "blurs": "none", 4439 + "defaultSetting": "warn", 4440 + "identifier": "tw", 4441 + "locales": [{ "description": "Taiwan", "lang": "en", "name": "🇹🇼" }], 4442 + "severity": "inform" 4443 + }, 4444 + { 4445 + "adultOnly": false, 4446 + "blurs": "none", 4447 + "defaultSetting": "warn", 4448 + "identifier": "tz", 4449 + "locales": [{ "description": "Tanzania", "lang": "en", "name": "🇹🇿" }], 4450 + "severity": "inform" 4451 + }, 4452 + { 4453 + "adultOnly": false, 4454 + "blurs": "none", 4455 + "defaultSetting": "warn", 4456 + "identifier": "ua", 4457 + "locales": [{ "description": "Ukraine", "lang": "en", "name": "🇺🇦" }], 4458 + "severity": "inform" 4459 + }, 4460 + { 4461 + "adultOnly": false, 4462 + "blurs": "none", 4463 + "defaultSetting": "warn", 4464 + "identifier": "ug", 4465 + "locales": [{ "description": "Uganda", "lang": "en", "name": "🇺🇬" }], 4466 + "severity": "inform" 4467 + }, 4468 + { 4469 + "adultOnly": false, 4470 + "blurs": "none", 4471 + "defaultSetting": "warn", 4472 + "identifier": "um", 4473 + "locales": [{ "description": "United States Minor Outlying Islands", "lang": "en", "name": "🇺🇲" }], 4474 + "severity": "inform" 4475 + }, 4476 + { 4477 + "adultOnly": false, 4478 + "blurs": "none", 4479 + "defaultSetting": "warn", 4480 + "identifier": "us", 4481 + "locales": [{ "description": "United States", "lang": "en", "name": "🇺🇸" }], 4482 + "severity": "inform" 4483 + }, 4484 + { 4485 + "adultOnly": false, 4486 + "blurs": "none", 4487 + "defaultSetting": "warn", 4488 + "identifier": "uy", 4489 + "locales": [{ "description": "Uruguay", "lang": "en", "name": "🇺🇾" }], 4490 + "severity": "inform" 4491 + }, 4492 + { 4493 + "adultOnly": false, 4494 + "blurs": "none", 4495 + "defaultSetting": "warn", 4496 + "identifier": "uz", 4497 + "locales": [{ "description": "Uzbekistan", "lang": "en", "name": "🇺🇿" }], 4498 + "severity": "inform" 4499 + }, 4500 + { 4501 + "adultOnly": false, 4502 + "blurs": "none", 4503 + "defaultSetting": "warn", 4504 + "identifier": "va", 4505 + "locales": [{ "description": "Vatican City", "lang": "en", "name": "🇻🇦" }], 4506 + "severity": "inform" 4507 + }, 4508 + { 4509 + "adultOnly": false, 4510 + "blurs": "none", 4511 + "defaultSetting": "warn", 4512 + "identifier": "vc", 4513 + "locales": [{ "description": "Saint Vincent and The Grenadines", "lang": "en", "name": "🇻🇨" }], 4514 + "severity": "inform" 4515 + }, 4516 + { 4517 + "adultOnly": false, 4518 + "blurs": "none", 4519 + "defaultSetting": "warn", 4520 + "identifier": "ve", 4521 + "locales": [{ "description": "Venezuela", "lang": "en", "name": "🇻🇪" }], 4522 + "severity": "inform" 4523 + }, 4524 + { 4525 + "adultOnly": false, 4526 + "blurs": "none", 4527 + "defaultSetting": "warn", 4528 + "identifier": "vg", 4529 + "locales": [{ "description": "Virgin Islands, British", "lang": "en", "name": "🇻🇬" }], 4530 + "severity": "inform" 4531 + }, 4532 + { 4533 + "adultOnly": false, 4534 + "blurs": "none", 4535 + "defaultSetting": "warn", 4536 + "identifier": "vi", 4537 + "locales": [{ "description": "Virgin Islands, U.S.", "lang": "en", "name": "🇻🇮" }], 4538 + "severity": "inform" 4539 + }, 4540 + { 4541 + "adultOnly": false, 4542 + "blurs": "none", 4543 + "defaultSetting": "warn", 4544 + "identifier": "vn", 4545 + "locales": [{ "description": "Viet Nam", "lang": "en", "name": "🇻🇳" }], 4546 + "severity": "inform" 4547 + }, 4548 + { 4549 + "adultOnly": false, 4550 + "blurs": "none", 4551 + "defaultSetting": "warn", 4552 + "identifier": "vu", 4553 + "locales": [{ "description": "Vanuatu", "lang": "en", "name": "🇻🇺" }], 4554 + "severity": "inform" 4555 + }, 4556 + { 4557 + "adultOnly": false, 4558 + "blurs": "none", 4559 + "defaultSetting": "warn", 4560 + "identifier": "wf", 4561 + "locales": [{ "description": "Wallis and Futuna", "lang": "en", "name": "🇼🇫" }], 4562 + "severity": "inform" 4563 + }, 4564 + { 4565 + "adultOnly": false, 4566 + "blurs": "none", 4567 + "defaultSetting": "warn", 4568 + "identifier": "ws", 4569 + "locales": [{ "description": "Samoa", "lang": "en", "name": "🇼🇸" }], 4570 + "severity": "inform" 4571 + }, 4572 + { 4573 + "adultOnly": false, 4574 + "blurs": "none", 4575 + "defaultSetting": "warn", 4576 + "identifier": "xk", 4577 + "locales": [{ "description": "Kosovo", "lang": "en", "name": "🇽🇰" }], 4578 + "severity": "inform" 4579 + }, 4580 + { 4581 + "adultOnly": false, 4582 + "blurs": "none", 4583 + "defaultSetting": "warn", 4584 + "identifier": "ye", 4585 + "locales": [{ "description": "Yemen", "lang": "en", "name": "🇾🇪" }], 4586 + "severity": "inform" 4587 + }, 4588 + { 4589 + "adultOnly": false, 4590 + "blurs": "none", 4591 + "defaultSetting": "warn", 4592 + "identifier": "yt", 4593 + "locales": [{ "description": "Mayotte", "lang": "en", "name": "🇾🇹" }], 4594 + "severity": "inform" 4595 + }, 4596 + { 4597 + "adultOnly": false, 4598 + "blurs": "none", 4599 + "defaultSetting": "warn", 4600 + "identifier": "za", 4601 + "locales": [{ "description": "South Africa", "lang": "en", "name": "🇿🇦" }], 4602 + "severity": "inform" 4603 + }, 4604 + { 4605 + "adultOnly": false, 4606 + "blurs": "none", 4607 + "defaultSetting": "warn", 4608 + "identifier": "zm", 4609 + "locales": [{ "description": "Zambia", "lang": "en", "name": "🇿🇲" }], 4610 + "severity": "inform" 4611 + }, 4612 + { 4613 + "adultOnly": false, 4614 + "blurs": "none", 4615 + "defaultSetting": "warn", 4616 + "identifier": "zw", 4617 + "locales": [{ "description": "Zimbabwe", "lang": "en", "name": "🇿🇼" }], 4618 + "severity": "inform" 4619 + }, 4620 + { 4621 + "adultOnly": false, 4622 + "blurs": "none", 4623 + "defaultSetting": "warn", 4624 + "identifier": "eng", 4625 + "locales": [{ "description": "England", "lang": "en", "name": "🏴󠁧󠁢󠁥󠁮󠁧󠁿" }], 4626 + "severity": "inform" 4627 + }, 4628 + { 4629 + "adultOnly": false, 4630 + "blurs": "none", 4631 + "defaultSetting": "warn", 4632 + "identifier": "scot", 4633 + "locales": [{ "description": "Scotland", "lang": "en", "name": "🏴󠁧󠁢󠁳󠁣󠁴󠁿" }], 4634 + "severity": "inform" 4635 + }, 4636 + { 4637 + "adultOnly": false, 4638 + "blurs": "none", 4639 + "defaultSetting": "warn", 4640 + "identifier": "wl", 4641 + "locales": [{ "description": "Wales", "lang": "en", "name": "🏴󠁧󠁢󠁷󠁬󠁳󠁿" }], 4642 + "severity": "inform" 4643 + }, 4644 + { 4645 + "adultOnly": false, 4646 + "blurs": "none", 4647 + "defaultSetting": "warn", 4648 + "identifier": "eu", 4649 + "locales": [{ "description": "European Union", "lang": "en", "name": "🇪🇺" }], 4650 + "severity": "inform" 4651 + }, 4652 + { 4653 + "adultOnly": false, 4654 + "blurs": "none", 4655 + "defaultSetting": "warn", 4656 + "identifier": "un", 4657 + "locales": [{ "description": "United Nations", "lang": "en", "name": "🇺🇳" }], 4658 + "severity": "inform" 4659 + }, 4660 + { 4661 + "adultOnly": false, 4662 + "blurs": "none", 4663 + "defaultSetting": "warn", 4664 + "identifier": "met", 4665 + "locales": [{ "description": "Métis", "lang": "en", "name": "♾️💙" }], 4666 + "severity": "inform" 4667 + }, 4668 + { 4669 + "adultOnly": false, 4670 + "blurs": "none", 4671 + "defaultSetting": "warn", 4672 + "identifier": "fri", 4673 + "locales": [{ "description": "The Friday Commonwealth", "lang": "en", "name": "️🏁" }], 4674 + "severity": "inform" 4675 + }, 4676 + { 4677 + "adultOnly": false, 4678 + "blurs": "none", 4679 + "defaultSetting": "warn", 4680 + "identifier": "ahoy", 4681 + "locales": [{ "description": "Seven Seas", "lang": "en", "name": "🏴‍☠️" }], 4682 + "severity": "inform" 4683 + }, 4684 + { 4685 + "adultOnly": false, 4686 + "blurs": "none", 4687 + "defaultSetting": "warn", 4688 + "identifier": "cross", 4689 + "locales": [{ "description": "Land of the Rising Sun", "lang": "en", "name": "🎌" }], 4690 + "severity": "inform" 4691 + }, 4692 + { 4693 + "adultOnly": false, 4694 + "blurs": "none", 4695 + "defaultSetting": "warn", 4696 + "identifier": "golf", 4697 + "locales": [{ "description": "On the Green", "lang": "en", "name": "⛳️" }], 4698 + "severity": "inform" 4699 + }, 4700 + { 4701 + "adultOnly": false, 4702 + "blurs": "none", 4703 + "defaultSetting": "warn", 4704 + "identifier": "toxic", 4705 + "locales": [{ "description": "Toxic", "lang": "en", "name": "🚩" }], 4706 + "severity": "inform" 4707 + }, 4708 + { 4709 + "adultOnly": false, 4710 + "blurs": "none", 4711 + "defaultSetting": "warn", 4712 + "identifier": "atm", 4713 + "locales": [{ "description": "The Atmosphere 🩵", "lang": "en", "name": "☁️" }], 4714 + "severity": "inform" 4715 + }, 4716 + { 4717 + "adultOnly": false, 4718 + "blurs": "none", 4719 + "defaultSetting": "warn", 4720 + "identifier": "lib", 4721 + "locales": [{ "description": "La Biblioteca", "lang": "en", "name": "📚" }], 4722 + "severity": "inform" 4723 + }, 4724 + { 4725 + "adultOnly": false, 4726 + "blurs": "none", 4727 + "defaultSetting": "warn", 4728 + "identifier": "hell", 4729 + "locales": [{ "description": "The Ninth Circle of Hell", "lang": "en", "name": "🔥" }], 4730 + "severity": "inform" 4731 + }, 4732 + { 4733 + "adultOnly": false, 4734 + "blurs": "none", 4735 + "defaultSetting": "warn", 4736 + "identifier": "bot", 4737 + "locales": [{ "description": "Skynet", "lang": "en", "name": "🤖" }], 4738 + "severity": "inform" 4739 + }, 4740 + { 4741 + "adultOnly": false, 4742 + "blurs": "none", 4743 + "defaultSetting": "warn", 4744 + "identifier": "ihop", 4745 + "locales": [{ "description": "International House of Pancakes", "lang": "en", "name": "🥞" }], 4746 + "severity": "inform" 4747 + }, 4748 + { 4749 + "adultOnly": false, 4750 + "blurs": "none", 4751 + "defaultSetting": "warn", 4752 + "identifier": "kiki", 4753 + "locales": [{ "description": "Koriko", "lang": "en", "name": "🧹" }], 4754 + "severity": "inform" 4755 + }, 4756 + { 4757 + "adultOnly": false, 4758 + "blurs": "none", 4759 + "defaultSetting": "warn", 4760 + "identifier": "mis", 4761 + "locales": [{ "description": "Misinformation Nation", "lang": "en", "name": "📰" }], 4762 + "severity": "inform" 4763 + }, 4764 + { 4765 + "adultOnly": false, 4766 + "blurs": "none", 4767 + "defaultSetting": "warn", 4768 + "identifier": "mob", 4769 + "locales": [{ "description": "Manifold Garden", "lang": "en", "name": "♾️" }], 4770 + "severity": "inform" 4771 + }, 4772 + { 4773 + "adultOnly": false, 4774 + "blurs": "none", 4775 + "defaultSetting": "warn", 4776 + "identifier": "skate", 4777 + "locales": [{ "description": "The Skate Park", "lang": "en", "name": "🛹" }], 4778 + "severity": "inform" 4779 + }, 4780 + { 4781 + "adultOnly": false, 4782 + "blurs": "none", 4783 + "defaultSetting": "warn", 4784 + "identifier": "soap", 4785 + "locales": [{ "description": "Soap Nation", "lang": "en", "name": "️🧼" }], 4786 + "severity": "inform" 4787 + }, 4788 + { 4789 + "adultOnly": false, 4790 + "blurs": "none", 4791 + "defaultSetting": "warn", 4792 + "identifier": "www", 4793 + "locales": [{ "description": "World Wide Web", "lang": "en", "name": "🌐" }], 4794 + "severity": "inform" 4795 + }, 4796 + { 4797 + "adultOnly": false, 4798 + "blurs": "none", 4799 + "defaultSetting": "warn", 4800 + "identifier": "ten", 4801 + "locales": [{ "description": "Decadence", "lang": "en", "name": "🤍" }], 4802 + "severity": "inform" 4803 + }, 4804 + { 4805 + "adultOnly": false, 4806 + "blurs": "none", 4807 + "defaultSetting": "warn", 4808 + "identifier": "bis", 4809 + "locales": [{ "description": "Bisexual", "lang": "en", "name": "💙💜🩷" }], 4810 + "severity": "inform" 4811 + }, 4812 + { 4813 + "adultOnly": false, 4814 + "blurs": "none", 4815 + "defaultSetting": "warn", 4816 + "identifier": "ic", 4817 + "locales": [{ "description": "Canary Islands", "lang": "en", "name": "🇮🇨" }], 4818 + "severity": "inform" 4819 + }, 4820 + { 4821 + "adultOnly": false, 4822 + "blurs": "none", 4823 + "defaultSetting": "warn", 4824 + "identifier": "pan", 4825 + "locales": [{ "description": "Pansexual", "lang": "en", "name": "🩷💛💙" }], 4826 + "severity": "inform" 4827 + }, 4828 + { 4829 + "adultOnly": false, 4830 + "blurs": "none", 4831 + "defaultSetting": "warn", 4832 + "identifier": "black", 4833 + "locales": [{ "description": "No Nation", "lang": "en", "name": "🏴" }], 4834 + "severity": "inform" 4835 + }, 4836 + { 4837 + "adultOnly": false, 4838 + "blurs": "none", 4839 + "defaultSetting": "warn", 4840 + "identifier": "res", 4841 + "locales": [ 4842 + { 4843 + "description": "Labels below are reserved. 🤖 is available by request if you run a bot account. Please DM @renahlee.com", 4844 + "lang": "en", 4845 + "name": "RESERVED" 4846 + } 4847 + ], 4848 + "severity": "inform" 4849 + }, 4850 + { 4851 + "adultOnly": false, 4852 + "blurs": "none", 4853 + "defaultSetting": "warn", 4854 + "identifier": "glcs", 4855 + "locales": [{ "description": "Gloucestershire", "lang": "en", "name": "💚💙💛" }], 4856 + "severity": "inform" 4857 + }, 4858 + { 4859 + "adultOnly": false, 4860 + "blurs": "none", 4861 + "defaultSetting": "warn", 4862 + "identifier": "prick", 4863 + "locales": [{ "description": "Prickle Nation", "lang": "en", "name": "🌵" }], 4864 + "severity": "inform" 4865 + }, 4866 + { 4867 + "adultOnly": false, 4868 + "blurs": "none", 4869 + "defaultSetting": "warn", 4870 + "identifier": "ace", 4871 + "locales": [{ "description": "Asexual", "lang": "en", "name": "🖤🩶🤍💜" }], 4872 + "severity": "inform" 4873 + }, 4874 + { 4875 + "adultOnly": false, 4876 + "blurs": "none", 4877 + "defaultSetting": "warn", 4878 + "identifier": "queerp", 4879 + "locales": [{ "description": "Queerplatonic", "lang": "en", "name": "💛🩷🤍🩶🖤" }], 4880 + "severity": "inform" 4881 + }, 4882 + { 4883 + "adultOnly": false, 4884 + "blurs": "none", 4885 + "defaultSetting": "warn", 4886 + "identifier": "dreary", 4887 + "locales": [{ "description": "Willow", "lang": "en", "name": "🩷" }], 4888 + "severity": "inform" 4889 + }, 4890 + { 4891 + "adultOnly": false, 4892 + "blurs": "none", 4893 + "defaultSetting": "warn", 4894 + "identifier": "repl", 4895 + "locales": [{ "description": "Replika", "lang": "en", "name": "✨" }], 4896 + "severity": "inform" 4897 + }, 4898 + { 4899 + "adultOnly": false, 4900 + "blurs": "none", 4901 + "defaultSetting": "warn", 4902 + "identifier": "waho", 4903 + "locales": [{ "description": "Waffle House", "lang": "en", "name": "🧇" }], 4904 + "severity": "inform" 4905 + } 4906 + ], 4907 + "labelValues": [ 4908 + "ihop", 4909 + "waho", 4910 + "prd", 4911 + "trn", 4912 + "black", 4913 + "ad", 4914 + "ae", 4915 + "af", 4916 + "ag", 4917 + "ai", 4918 + "al", 4919 + "am", 4920 + "ao", 4921 + "aq", 4922 + "ar", 4923 + "as", 4924 + "at", 4925 + "au", 4926 + "aw", 4927 + "ax", 4928 + "az", 4929 + "ba", 4930 + "bb", 4931 + "bd", 4932 + "be", 4933 + "bf", 4934 + "bg", 4935 + "bh", 4936 + "bi", 4937 + "bj", 4938 + "bl", 4939 + "bm", 4940 + "bn", 4941 + "bo", 4942 + "bq", 4943 + "br", 4944 + "bs", 4945 + "bt", 4946 + "bv", 4947 + "bw", 4948 + "by", 4949 + "bz", 4950 + "ca", 4951 + "cc", 4952 + "cd", 4953 + "cf", 4954 + "cg", 4955 + "ch", 4956 + "ci", 4957 + "ck", 4958 + "cl", 4959 + "cm", 4960 + "cn", 4961 + "co", 4962 + "cr", 4963 + "cu", 4964 + "cv", 4965 + "cw", 4966 + "cx", 4967 + "cy", 4968 + "cz", 4969 + "de", 4970 + "dj", 4971 + "dk", 4972 + "dm", 4973 + "do", 4974 + "dz", 4975 + "ec", 4976 + "ee", 4977 + "eg", 4978 + "eh", 4979 + "er", 4980 + "es", 4981 + "et", 4982 + "fi", 4983 + "fj", 4984 + "fk", 4985 + "fm", 4986 + "fo", 4987 + "fr", 4988 + "ga", 4989 + "gb", 4990 + "gd", 4991 + "ge", 4992 + "gf", 4993 + "gg", 4994 + "gh", 4995 + "gi", 4996 + "gl", 4997 + "gm", 4998 + "gn", 4999 + "gp", 5000 + "gq", 5001 + "gr", 5002 + "gs", 5003 + "gt", 5004 + "gu", 5005 + "gw", 5006 + "gy", 5007 + "hk", 5008 + "hm", 5009 + "hn", 5010 + "hr", 5011 + "ht", 5012 + "hu", 5013 + "ic", 5014 + "id", 5015 + "ie", 5016 + "il", 5017 + "im", 5018 + "in", 5019 + "io", 5020 + "iq", 5021 + "ir", 5022 + "is", 5023 + "it", 5024 + "je", 5025 + "jm", 5026 + "jo", 5027 + "jp", 5028 + "ke", 5029 + "kg", 5030 + "kh", 5031 + "ki", 5032 + "km", 5033 + "kn", 5034 + "kp", 5035 + "kr", 5036 + "kw", 5037 + "ky", 5038 + "kz", 5039 + "la", 5040 + "lb", 5041 + "lc", 5042 + "li", 5043 + "lk", 5044 + "lr", 5045 + "ls", 5046 + "lt", 5047 + "lu", 5048 + "lv", 5049 + "ly", 5050 + "ma", 5051 + "mc", 5052 + "md", 5053 + "me", 5054 + "mf", 5055 + "mg", 5056 + "mh", 5057 + "mk", 5058 + "ml", 5059 + "mm", 5060 + "mn", 5061 + "mo", 5062 + "mp", 5063 + "mq", 5064 + "mr", 5065 + "ms", 5066 + "mt", 5067 + "mu", 5068 + "mv", 5069 + "mw", 5070 + "mx", 5071 + "my", 5072 + "mz", 5073 + "na", 5074 + "nc", 5075 + "ne", 5076 + "nf", 5077 + "ng", 5078 + "ni", 5079 + "nl", 5080 + "no", 5081 + "np", 5082 + "nr", 5083 + "nu", 5084 + "nz", 5085 + "om", 5086 + "pa", 5087 + "pe", 5088 + "pf", 5089 + "pg", 5090 + "ph", 5091 + "pk", 5092 + "pl", 5093 + "pm", 5094 + "pn", 5095 + "pr", 5096 + "ps", 5097 + "pt", 5098 + "pw", 5099 + "py", 5100 + "qa", 5101 + "re", 5102 + "ro", 5103 + "rs", 5104 + "ru", 5105 + "rw", 5106 + "sa", 5107 + "sb", 5108 + "sc", 5109 + "sd", 5110 + "se", 5111 + "sg", 5112 + "sh", 5113 + "si", 5114 + "sj", 5115 + "sk", 5116 + "sl", 5117 + "sm", 5118 + "sn", 5119 + "so", 5120 + "sr", 5121 + "ss", 5122 + "st", 5123 + "sv", 5124 + "sx", 5125 + "sy", 5126 + "sz", 5127 + "tc", 5128 + "td", 5129 + "tf", 5130 + "tg", 5131 + "th", 5132 + "tj", 5133 + "tk", 5134 + "tl", 5135 + "tm", 5136 + "tn", 5137 + "to", 5138 + "tr", 5139 + "tt", 5140 + "tv", 5141 + "tw", 5142 + "tz", 5143 + "ua", 5144 + "ug", 5145 + "um", 5146 + "us", 5147 + "uy", 5148 + "uz", 5149 + "va", 5150 + "vc", 5151 + "ve", 5152 + "vg", 5153 + "vi", 5154 + "vn", 5155 + "vu", 5156 + "wf", 5157 + "ws", 5158 + "xk", 5159 + "ye", 5160 + "yt", 5161 + "za", 5162 + "zm", 5163 + "zw", 5164 + "eng", 5165 + "scot", 5166 + "wl", 5167 + "glcs", 5168 + "eu", 5169 + "un", 5170 + "met", 5171 + "fri", 5172 + "ahoy", 5173 + "cross", 5174 + "golf", 5175 + "toxic", 5176 + "atm", 5177 + "www", 5178 + "lib", 5179 + "hell", 5180 + "prick", 5181 + "bis", 5182 + "pan", 5183 + "ace", 5184 + "queerp", 5185 + "res", 5186 + "bot", 5187 + "kiki", 5188 + "mis", 5189 + "mob", 5190 + "skate", 5191 + "soap", 5192 + "ten", 5193 + "dreary", 5194 + "repl" 5195 + ] 5196 + }, 5197 + "reasonTypes": ["com.atproto.moderation.defs#reasonAppeal"], 5198 + "subjectTypes": ["chat"], 5199 + "$type": "app.bsky.labeler.defs#labelerViewDetailed" 5200 + }, 5201 + { 5202 + "uri": "at://did:plc:bpcllqvnvx3dlyrcblqkusat/app.bsky.labeler.service/self", 5203 + "cid": "bafyreigdfcgsjjuxvl5y62xplewby5p476vlfbjmnt43vb4mj6i5mswk2q", 5204 + "creator": { 5205 + "did": "did:plc:bpcllqvnvx3dlyrcblqkusat", 5206 + "handle": "waffles.mosphere.at", 5207 + "displayName": "WAFFLES", 5208 + "avatar": "https://cdn.bsky.app/img/avatar/plain/did:plc:bpcllqvnvx3dlyrcblqkusat/bafkreibjx4b4bhyvoy7y7dzvanaaj7olkp5thadxbqjjgbuqozi6qhbik4@jpeg", 5209 + "associated": { "labeler": true, "activitySubscription": { "allowSubscriptions": "followers" } }, 5210 + "viewer": { "muted": false, "blockedBy": false }, 5211 + "labels": [], 5212 + "createdAt": "2025-10-02T21:35:57.146Z", 5213 + "description": "WAFFLES OR PANCAKES? LIKE THE LABELER TO FIND OUT", 5214 + "indexedAt": "2025-10-02T21:45:12.645Z" 5215 + }, 5216 + "likeCount": 128, 5217 + "viewer": { "like": "at://did:plc:yfvwmnlztr4dwkb7hwz55r2g/app.bsky.feed.like/3m2aku3q77z2s" }, 5218 + "indexedAt": "2025-10-03T21:14:25.657Z", 5219 + "labels": [], 5220 + "policies": { 5221 + "labelValueDefinitions": [ 5222 + { 5223 + "adultOnly": false, 5224 + "blurs": "none", 5225 + "defaultSetting": "warn", 5226 + "identifier": "zzzzzwaffles", 5227 + "locales": [{ "description": "WAFFLES", "lang": "en", "name": "WAFFLES 🧇" }], 5228 + "severity": "inform" 5229 + }, 5230 + { 5231 + "adultOnly": false, 5232 + "blurs": "none", 5233 + "defaultSetting": "warn", 5234 + "identifier": "zzzzzpancakes", 5235 + "locales": [{ "description": "PANCAKES", "lang": "en", "name": "PANCAKES 🥞" }], 5236 + "severity": "inform" 5237 + } 5238 + ], 5239 + "labelValues": ["zzzzzwaffles", "zzzzzpancakes"] 5240 + }, 5241 + "reasonTypes": [], 5242 + "$type": "app.bsky.labeler.defs#labelerViewDetailed" 5243 + }, 5244 + { 5245 + "uri": "at://did:plc:lcdcygpdeiittdmdeddxwt4w/app.bsky.labeler.service/self", 5246 + "cid": "bafyreid4uvmr34yekajhe4ewimqcctzmgmufc6lg4ikyofszmlos6y7n5u", 5247 + "creator": { 5248 + "did": "did:plc:lcdcygpdeiittdmdeddxwt4w", 5249 + "handle": "laelaps.fyi", 5250 + "displayName": "Laelaps", 5251 + "avatar": "https://cdn.bsky.app/img/avatar/plain/did:plc:lcdcygpdeiittdmdeddxwt4w/bafkreidjonmm7jkthlewiykaw3hrhv6sncivbpnad63sqebvgvy77736b4@jpeg", 5252 + "associated": { 5253 + "labeler": true, 5254 + "chat": { "allowIncoming": "all" }, 5255 + "activitySubscription": { "allowSubscriptions": "followers" } 5256 + }, 5257 + "viewer": { "muted": false, "blockedBy": false }, 5258 + "labels": [], 5259 + "createdAt": "2024-07-21T11:13:31.775Z", 5260 + "description": "An anti-zoophilia labeller, from the team behind the Zoophile Mute List.\n\nCriteria and evidence: https://info.laelaps.fyi/\nSupport: https://ko-fi.com/laelapsfyi", 5261 + "indexedAt": "2025-10-12T03:37:57.174Z" 5262 + }, 5263 + "likeCount": 1167, 5264 + "viewer": {}, 5265 + "indexedAt": "2025-06-04T01:19:58.852Z", 5266 + "labels": [], 5267 + "policies": { 5268 + "labelValueDefinitions": [ 5269 + { 5270 + "adultOnly": false, 5271 + "blurs": "none", 5272 + "defaultSetting": "warn", 5273 + "identifier": "open-zoo", 5274 + "locales": [ 5275 + { 5276 + "description": "Publicly identifying as a zoophile. This includes profiles with known coded dogwhistles like the zeta symbol (ζ), the triangles and four-pointed star (◤✦◢), or the Phoenician aleph (𐤀), or having a handle that's linked to a zoophile-centric domain name.", 5277 + "lang": "en", 5278 + "name": "Open Zoophile" 5279 + }, 5280 + { 5281 + "description": "Identificando-se publicamente como zoófilo. Isso inclui perfis assobiados codificados como o símbolo zeta (ζ), os triângulos e a estrela de quatro pontas (◤✦◢) ou o Aleph fenício (𐤀), ou ter um nome de usuário associado a um nome de domínio centrado em zoófilos.", 5282 + "lang": "pt-BR", 5283 + "name": "Zoófilo Aberto" 5284 + } 5285 + ], 5286 + "severity": "alert" 5287 + }, 5288 + { 5289 + "adultOnly": false, 5290 + "blurs": "none", 5291 + "defaultSetting": "warn", 5292 + "identifier": "interacts-with-zoos", 5293 + "locales": [ 5294 + { 5295 + "description": "Actively interacting with open zoophiles. This includes, but is not limited to: liking or reposting posts related to, replying to, or following a large amount of open zoophiles.", 5296 + "lang": "en", 5297 + "name": "Interacts with Zoophiles" 5298 + }, 5299 + { 5300 + "description": "Ativamente interage com zoófilos abertos. Isso inclui, mas não está limitado a: curtir ou repostar postagens associadas a, responder a, ou seguir uma quantia grande de zoófilos abertos.", 5301 + "lang": "pt-BR", 5302 + "name": "Interage com Zoófilos" 5303 + } 5304 + ], 5305 + "severity": "alert" 5306 + }, 5307 + { 5308 + "adultOnly": false, 5309 + "blurs": "none", 5310 + "defaultSetting": "warn", 5311 + "identifier": "zoo-supporter", 5312 + "locales": [ 5313 + { 5314 + "description": "Supporting or defending zoophiles or their associates, or creating spaces that welcome zoophiles.", 5315 + "lang": "en", 5316 + "name": "Zoophile Supporter" 5317 + }, 5318 + { 5319 + "description": "Apoiador ou defensor de zoófilos ou seus associados, ou que criam espaços que acolhem zoófilos.", 5320 + "lang": "pt-BR", 5321 + "name": "Apoiador Zoófilo" 5322 + } 5323 + ], 5324 + "severity": "alert" 5325 + }, 5326 + { 5327 + "adultOnly": false, 5328 + "blurs": "none", 5329 + "defaultSetting": "warn", 5330 + "identifier": "outed-zoo", 5331 + "locales": [ 5332 + { 5333 + "description": "Being publicly identified as a zoophile by a reputable whistleblower, or being found participating in conversations which advocate for or admit to zoophilic acts.", 5334 + "lang": "en", 5335 + "name": "Outed Zoophile" 5336 + }, 5337 + { 5338 + "description": "Ser identificado publicamente como zoófilo por um denunciante confiável, ou que tenha sido descoberto participando de conversas que defendem ou admitem atos zoofílicos.", 5339 + "lang": "pt-BR", 5340 + "name": "Zoófilo Exposto" 5341 + } 5342 + ], 5343 + "severity": "alert" 5344 + } 5345 + ], 5346 + "labelValues": ["open-zoo", "interacts-with-zoos", "zoo-supporter", "outed-zoo"] 5347 + }, 5348 + "reasonTypes": [ 5349 + "com.atproto.moderation.defs#reasonViolation", 5350 + "com.atproto.moderation.defs#reasonOther", 5351 + "com.atproto.moderation.defs#reasonAppeal", 5352 + "com.atproto.moderation.defs#reasonSexual" 5353 + ], 5354 + "subjectTypes": ["account", "record"], 5355 + "$type": "app.bsky.labeler.defs#labelerViewDetailed" 5356 + } 5357 + ] 5358 + }
+106
crates/jacquard/src/moderation/moderatable.rs
··· 1 + use super::{LabelerDefs, ModerationDecision, ModerationPrefs, moderate}; 2 + use jacquard_common::types::string::Did; 3 + 4 + /// Trait for composite types that contain multiple labeled items 5 + /// 6 + /// Types like `FeedViewPost` contain several pieces that each have their own labels 7 + /// (post, author, reply chain, embeds, etc.). This trait allows them to return 8 + /// moderation decisions for all their parts, tagged with identifiers so consumers 9 + /// can handle each part appropriately. 10 + /// 11 + /// # Example 12 + /// 13 + /// ```ignore 14 + /// # use jacquard::moderation::*; 15 + /// # use jacquard_api::app_bsky::feed::FeedViewPost; 16 + /// # fn example(feed_post: &FeedViewPost<'_>, prefs: &ModerationPrefs<'_>, defs: &LabelerDefs<'_>) { 17 + /// for (tag, decision) in feed_post.moderate_all(prefs, defs, &[]) { 18 + /// match tag { 19 + /// "post" if decision.filter => println!("Hide post content"), 20 + /// "author" if decision.filter => println!("Hide author info"), 21 + /// _ => {} 22 + /// } 23 + /// } 24 + /// # } 25 + /// ``` 26 + pub trait Moderateable<'a> { 27 + /// Apply moderation to all labeled parts of this item 28 + /// 29 + /// Returns a vector of (tag, decision) tuples where the tag identifies 30 + /// which part of the composite item the decision applies to. 31 + fn moderate_all( 32 + &'a self, 33 + prefs: &ModerationPrefs<'_>, 34 + defs: &LabelerDefs<'_>, 35 + accepted_labelers: &[Did<'_>], 36 + ) -> Vec<(&'static str, ModerationDecision)>; 37 + } 38 + 39 + // Implementations for common Bluesky types 40 + #[cfg(feature = "api_bluesky")] 41 + mod bluesky_impls { 42 + use super::*; 43 + use jacquard_api::app_bsky::feed::{FeedViewPost, ReplyRefParent, ReplyRefRoot}; 44 + 45 + impl<'a> Moderateable<'a> for FeedViewPost<'a> { 46 + fn moderate_all( 47 + &'a self, 48 + prefs: &ModerationPrefs<'_>, 49 + defs: &LabelerDefs<'_>, 50 + accepted_labelers: &[Did<'_>], 51 + ) -> Vec<(&'static str, ModerationDecision)> { 52 + let mut decisions = vec![ 53 + ("post", moderate(&self.post, prefs, defs, accepted_labelers)), 54 + ( 55 + "author", 56 + moderate(&self.post.author, prefs, defs, accepted_labelers), 57 + ), 58 + ]; 59 + 60 + // Add reply chain decisions if present 61 + if let Some(reply) = &self.reply { 62 + // Parent post and author 63 + if let ReplyRefParent::PostView(parent) = &reply.parent { 64 + decisions.push(( 65 + "reply_parent", 66 + moderate(&**parent, prefs, defs, accepted_labelers), 67 + )); 68 + decisions.push(( 69 + "reply_parent_author", 70 + moderate(&parent.author, prefs, defs, accepted_labelers), 71 + )); 72 + } 73 + 74 + // Root post and author 75 + if let ReplyRefRoot::PostView(root) = &reply.root { 76 + decisions.push(( 77 + "reply_root", 78 + moderate(&**root, prefs, defs, accepted_labelers), 79 + )); 80 + decisions.push(( 81 + "reply_root_author", 82 + moderate(&root.author, prefs, defs, accepted_labelers), 83 + )); 84 + } 85 + 86 + // Grandparent author 87 + if let Some(grandparent_author) = &reply.grandparent_author { 88 + decisions.push(( 89 + "reply_grandparent_author", 90 + moderate(grandparent_author, prefs, defs, accepted_labelers), 91 + )); 92 + } 93 + } 94 + 95 + // TODO: handle embeds (quote posts, external links with metadata, etc.) 96 + // if let Some(embed) = &self.post.embed { 97 + // match embed { 98 + // PostViewEmbedRecord(record) => { ... } 99 + // ... 100 + // } 101 + // } 102 + 103 + decisions 104 + } 105 + } 106 + }
+4624
crates/jacquard/src/moderation/posts.json
··· 1 + [ 2 + { 3 + "feed": [ 4 + { 5 + "post": { 6 + "uri": "at://did:plc:nyz2ssqxd3g72lpmdrfrsc74/app.bsky.feed.post/3lgc57nllam2y", 7 + "cid": "bafyreifvxnjemmditxgrwz6bvh5p55p2qnurdnce6tabpdakw7hj5xu2ji", 8 + "author": { 9 + "did": "did:plc:nyz2ssqxd3g72lpmdrfrsc74", 10 + "handle": "urbanism.plus", 11 + "displayName": "Urbanism+ Feed Assistant", 12 + "avatar": "https://cdn.bsky.app/img/avatar/plain/did:plc:nyz2ssqxd3g72lpmdrfrsc74/bafkreiehj5qup7rijrp3sdgo5w3ic6pyedhkgippzl5y3cf7yt7dzwy5xe@jpeg", 13 + "associated": { "activitySubscription": { "allowSubscriptions": "followers" } }, 14 + "viewer": { "muted": false, "blockedBy": false }, 15 + "labels": [ 16 + { 17 + "cts": "2024-05-16T22:33:26.039Z", 18 + "src": "did:plc:e4elbtctnfqocyfcml6h2lf7", 19 + "uri": "did:plc:nyz2ssqxd3g72lpmdrfrsc74", 20 + "val": "bluesky-elder", 21 + "ver": 1 22 + } 23 + ], 24 + "createdAt": "2023-08-02T20:50:11.457Z" 25 + }, 26 + "record": { 27 + "$type": "app.bsky.feed.post", 28 + "createdAt": "2025-01-22T00:43:02.906Z", 29 + "facets": [ 30 + { 31 + "$type": "app.bsky.richtext.facet", 32 + "features": [{ "$type": "app.bsky.richtext.facet#link", "uri": "https://www.urbanism.plus" }], 33 + "index": { "byteEnd": 23, "byteStart": 4 } 34 + }, 35 + { 36 + "$type": "app.bsky.richtext.facet", 37 + "features": [ 38 + { 39 + "$type": "app.bsky.richtext.facet#link", 40 + "uri": "https://bsky.app/profile/did:plc:lptjvw6ut224kwrj7ub3sqbe/feed/aaab4ajynotjg" 41 + } 42 + ], 43 + "index": { "byteEnd": 55, "byteStart": 47 } 44 + }, 45 + { 46 + "$type": "app.bsky.richtext.facet", 47 + "features": [ 48 + { 49 + "$type": "app.bsky.richtext.facet#link", 50 + "uri": "https://bsky.app/profile/did:plc:lptjvw6ut224kwrj7ub3sqbe/feed/aaapugyzmggrw" 51 + } 52 + ], 53 + "index": { "byteEnd": 62, "byteStart": 58 } 54 + }, 55 + { 56 + "$type": "app.bsky.richtext.facet", 57 + "features": [ 58 + { 59 + "$type": "app.bsky.richtext.facet#link", 60 + "uri": "https://bsky.app/profile/did:plc:lptjvw6ut224kwrj7ub3sqbe/feed/u-video" 61 + } 62 + ], 63 + "index": { "byteEnd": 70, "byteStart": 65 } 64 + }, 65 + { 66 + "$type": "app.bsky.richtext.facet", 67 + "features": [{ "$type": "app.bsky.richtext.facet#mention", "did": "did:plc:nyz2ssqxd3g72lpmdrfrsc74" }], 68 + "index": { "byteEnd": 97, "byteStart": 83 } 69 + }, 70 + { 71 + "$type": "app.bsky.richtext.facet", 72 + "features": [{ "$type": "app.bsky.richtext.facet#mention", "did": "did:plc:c5d5thu6uwhb5odxgk7ejvni" }], 73 + "index": { "byteEnd": 163, "byteStart": 141 } 74 + }, 75 + { 76 + "$type": "app.bsky.richtext.facet", 77 + "features": [{ "$type": "app.bsky.richtext.facet#link", "uri": "https://discord.gg/bwQHTvnP4D" }], 78 + "index": { "byteEnd": 199, "byteStart": 185 } 79 + }, 80 + { 81 + "$type": "app.bsky.richtext.facet", 82 + "features": [{ "$type": "app.bsky.richtext.facet#link", "uri": "https://ko-fi.com/urbanismplus" }], 83 + "index": { "byteEnd": 211, "byteStart": 202 } 84 + }, 85 + { 86 + "$type": "app.bsky.richtext.facet", 87 + "features": [ 88 + { "$type": "app.bsky.richtext.facet#link", "uri": "https://www.urbanism.plus/pocketbook" } 89 + ], 90 + "index": { "byteEnd": 228, "byteStart": 214 } 91 + }, 92 + { 93 + "$type": "app.bsky.richtext.facet", 94 + "features": [ 95 + { "$type": "app.bsky.richtext.facet#link", "uri": "https://www.urbanism.plus/starter-packs" } 96 + ], 97 + "index": { "byteEnd": 245, "byteStart": 229 } 98 + }, 99 + { 100 + "$type": "app.bsky.richtext.facet", 101 + "features": [ 102 + { 103 + "$type": "app.bsky.richtext.facet#link", 104 + "uri": "https://docs.google.com/document/d/15iePS5dOolcRUeLGNOFV9ciMwxDQQnKI-4j39xGwYGI/edit?usp=sharing" 105 + } 106 + ], 107 + "index": { "byteEnd": 264, "byteStart": 248 } 108 + } 109 + ], 110 + "langs": ["en"], 111 + "tags": [], 112 + "text": "📌Urbanism+ Community\n\n⚙️Feeds: [Live] | Trending | News | Video\n\n👉Follow @urbanism.plus to join the feed!\n🚫Block carbrains with @labeler.urbanism.plus & enjoy cool flair!\n\n🗣️Discord | ☕Donate | 📕Pocketbook\n📃Starterpacks | 📜Rules & Info | ♿Use Alt-Text!" 113 + }, 114 + "bookmarkCount": 4, 115 + "replyCount": 3, 116 + "repostCount": 17, 117 + "likeCount": 241, 118 + "quoteCount": 3, 119 + "indexedAt": "2025-01-22T00:44:19.365Z", 120 + "viewer": { "bookmarked": false, "threadMuted": false, "replyDisabled": true, "embeddingDisabled": false }, 121 + "labels": [], 122 + "threadgate": { 123 + "uri": "at://did:plc:nyz2ssqxd3g72lpmdrfrsc74/app.bsky.feed.threadgate/3lgc57nllam2y", 124 + "cid": "bafyreieud65sbdphjm2wueptlmb77rjobniiumlmklrft7pyjegcb6b74a", 125 + "record": { 126 + "$type": "app.bsky.feed.threadgate", 127 + "allow": [{ "$type": "app.bsky.feed.threadgate#followingRule" }], 128 + "createdAt": "2025-02-05T20:36:01.155Z", 129 + "hiddenReplies": [], 130 + "post": "at://did:plc:nyz2ssqxd3g72lpmdrfrsc74/app.bsky.feed.post/3lgc57nllam2y" 131 + }, 132 + "lists": [] 133 + } 134 + }, 135 + "feedContext": "eyJmZWVkX3VyaSI6ICJhdDovL2RpZDpwbGM6bHB0anZ3NnV0MjI0a3dyajd1YjNzcWJlL2FwcC5ic2t5LmZlZWQuZ2VuZXJhdG9yL2FhYW90Zmp6anBsbmEiLCAiYXR0cmlidXRpb24iOiAibnMxMTU5In0=", 136 + "reqId": "7CD894C82F1A424AB35B8C9E3F" 137 + }, 138 + { 139 + "post": { 140 + "uri": "at://did:plc:usu2qjqr5t55mppqjknbovjn/app.bsky.feed.post/3m3kyoeq3ps2w", 141 + "cid": "bafyreidnjmumafbkre6hs65bjkfulbzyqbjsnigealdbi3iorkn4tvltxi", 142 + "author": { 143 + "did": "did:plc:usu2qjqr5t55mppqjknbovjn", 144 + "handle": "kevdudeula.bsky.social", 145 + "displayName": "", 146 + "avatar": "https://cdn.bsky.app/img/avatar/plain/did:plc:usu2qjqr5t55mppqjknbovjn/bafkreicundg7qpayie4yrwj26ml7cxxvsd7yiguvvepnqok3iosabtpvcm@jpeg", 147 + "associated": { "activitySubscription": { "allowSubscriptions": "followers" } }, 148 + "viewer": { "muted": false, "blockedBy": false }, 149 + "labels": [], 150 + "createdAt": "2024-11-12T13:12:31.705Z" 151 + }, 152 + "record": { 153 + "$type": "app.bsky.feed.post", 154 + "createdAt": "2025-10-19T19:06:06.436Z", 155 + "embed": { 156 + "$type": "app.bsky.embed.external", 157 + "external": { 158 + "description": "Maryland will provide free MARC train and Commuter Bus service to federal workers during the shutdown, Maryland Gov. Wes Moore announced.", 159 + "thumb": { 160 + "$type": "blob", 161 + "ref": { "$link": "bafkreidzzze5hg2knoi56wamkba4nglpyfveqncrqpav6ewq7uem2hplzq" }, 162 + "mimeType": "image/jpeg", 163 + "size": 172334 164 + }, 165 + "title": "Maryland will provide free rail and commuter bus transit to federal workers during shutdown - WTOP News", 166 + "uri": "https://wtop.com/maryland/2025/10/maryland-will-provide-free-rail-and-commuter-bus-transit-to-federal-workers-during-shutdown/" 167 + } 168 + }, 169 + "facets": [ 170 + { 171 + "features": [{ "$type": "app.bsky.richtext.facet#tag", "tag": "StateOfMaryland" }], 172 + "index": { "byteEnd": 16, "byteStart": 0 } 173 + }, 174 + { 175 + "features": [{ "$type": "app.bsky.richtext.facet#tag", "tag": "commutertrain" }], 176 + "index": { "byteEnd": 31, "byteStart": 17 } 177 + }, 178 + { 179 + "features": [{ "$type": "app.bsky.richtext.facet#tag", "tag": "FederalWorkers" }], 180 + "index": { "byteEnd": 47, "byteStart": 32 } 181 + }, 182 + { 183 + "features": [{ "$type": "app.bsky.richtext.facet#tag", "tag": "GovernmentShutdown" }], 184 + "index": { "byteEnd": 67, "byteStart": 48 } 185 + }, 186 + { 187 + "features": [ 188 + { 189 + "$type": "app.bsky.richtext.facet#link", 190 + "uri": "https://wtop.com/maryland/2025/10/maryland-will-provide-free-rail-and-commuter-bus-transit-to-federal-workers-during-shutdown/" 191 + } 192 + ], 193 + "index": { "byteEnd": 245, "byteStart": 221 } 194 + } 195 + ], 196 + "langs": ["en"], 197 + "text": "#StateOfMaryland #commutertrain #FederalWorkers #GovernmentShutdown\n\nReport: State of Maryland, home to thousands of unpaid federal employees, is allowing them to ride commuter train for free during government shutdown:\n\nwtop.com/maryland/202..." 198 + }, 199 + "embed": { 200 + "$type": "app.bsky.embed.external#view", 201 + "external": { 202 + "uri": "https://wtop.com/maryland/2025/10/maryland-will-provide-free-rail-and-commuter-bus-transit-to-federal-workers-during-shutdown/", 203 + "title": "Maryland will provide free rail and commuter bus transit to federal workers during shutdown - WTOP News", 204 + "description": "Maryland will provide free MARC train and Commuter Bus service to federal workers during the shutdown, Maryland Gov. Wes Moore announced.", 205 + "thumb": "https://cdn.bsky.app/img/feed_thumbnail/plain/did:plc:usu2qjqr5t55mppqjknbovjn/bafkreidzzze5hg2knoi56wamkba4nglpyfveqncrqpav6ewq7uem2hplzq@jpeg" 206 + } 207 + }, 208 + "bookmarkCount": 0, 209 + "replyCount": 0, 210 + "repostCount": 0, 211 + "likeCount": 0, 212 + "quoteCount": 0, 213 + "indexedAt": "2025-10-19T19:06:08.457Z", 214 + "viewer": { "bookmarked": false, "threadMuted": false, "embeddingDisabled": false }, 215 + "labels": [] 216 + }, 217 + "feedContext": "eyJmZWVkX3VyaSI6ICJhdDovL2RpZDpwbGM6bHB0anZ3NnV0MjI0a3dyajd1YjNzcWJlL2FwcC5ic2t5LmZlZWQuZ2VuZXJhdG9yL2FhYW90Zmp6anBsbmEifQ==", 218 + "reqId": "7CD894C82F1A424AB35B8C9E3F" 219 + }, 220 + { 221 + "post": { 222 + "uri": "at://did:plc:ohs6kj5iiiedyuoe7phkboqr/app.bsky.feed.post/3m3kyl4n6u22c", 223 + "cid": "bafyreia6t6a574pp54uwtrwp4pqwxeyuu7snfteztf7knbtwwadgxocuxm", 224 + "author": { 225 + "did": "did:plc:ohs6kj5iiiedyuoe7phkboqr", 226 + "handle": "joshlinden.bsky.social", 227 + "displayName": "Josh Linden", 228 + "avatar": "https://cdn.bsky.app/img/avatar/plain/did:plc:ohs6kj5iiiedyuoe7phkboqr/bafkreifen2zufkzhjoh6bxp7lsd2dsfpyuf6yycsfnjfpmtg7urorxkndm@jpeg", 229 + "associated": { 230 + "chat": { "allowIncoming": "all" }, 231 + "activitySubscription": { "allowSubscriptions": "followers" } 232 + }, 233 + "viewer": { "muted": false, "blockedBy": false }, 234 + "labels": [], 235 + "createdAt": "2023-09-26T01:20:58.483Z" 236 + }, 237 + "record": { 238 + "$type": "app.bsky.feed.post", 239 + "createdAt": "2025-10-19T19:04:17.286Z", 240 + "embed": { 241 + "$type": "app.bsky.embed.record", 242 + "record": { 243 + "cid": "bafyreiay5jzm6lpuchjuuufqcoc4ibxmmhku7s5wlwo3ilmdbyze77ig4m", 244 + "uri": "at://did:plc:ln72v57ivz2g46uqf4xxqiuh/app.bsky.feed.post/3m3k32gocx72v" 245 + } 246 + }, 247 + "langs": ["en"], 248 + "text": "Cargo e-bikes can be car replacement, and it's wonderful to experience the freedom they provide\n\nIt's even more wonderful to hear the joy in your kid's voice as they ride with and sing their fave song to the neighborhood. And the smile on neighbors' faces ain't bad either" 249 + }, 250 + "embed": { 251 + "$type": "app.bsky.embed.record#view", 252 + "record": { 253 + "$type": "app.bsky.embed.record#viewRecord", 254 + "uri": "at://did:plc:ln72v57ivz2g46uqf4xxqiuh/app.bsky.feed.post/3m3k32gocx72v", 255 + "cid": "bafyreiay5jzm6lpuchjuuufqcoc4ibxmmhku7s5wlwo3ilmdbyze77ig4m", 256 + "author": { 257 + "did": "did:plc:ln72v57ivz2g46uqf4xxqiuh", 258 + "handle": "npr.org", 259 + "displayName": "NPR", 260 + "avatar": "https://cdn.bsky.app/img/avatar/plain/did:plc:ln72v57ivz2g46uqf4xxqiuh/bafkreibuignib3md64nrejizb45lynj2rf2pfahys46dz3oztgtrmpeizu@jpeg", 261 + "associated": { 262 + "chat": { "allowIncoming": "following" }, 263 + "activitySubscription": { "allowSubscriptions": "followers" } 264 + }, 265 + "viewer": { "muted": false, "blockedBy": false }, 266 + "labels": [ 267 + { 268 + "cts": "2024-05-11T18:31:53.063Z", 269 + "src": "did:plc:e4elbtctnfqocyfcml6h2lf7", 270 + "uri": "did:plc:ln72v57ivz2g46uqf4xxqiuh", 271 + "val": "bluesky-elder", 272 + "ver": 1 273 + } 274 + ], 275 + "createdAt": "2023-05-02T20:04:45.133Z", 276 + "verification": { 277 + "verifications": [ 278 + { 279 + "issuer": "did:plc:z72i7hdynmk6r22z27h6tvur", 280 + "uri": "at://did:plc:z72i7hdynmk6r22z27h6tvur/app.bsky.graph.verification/3lndpuhmhal2i", 281 + "isValid": true, 282 + "createdAt": "2025-04-21T10:47:05.956Z" 283 + } 284 + ], 285 + "verifiedStatus": "valid", 286 + "trustedVerifierStatus": "none" 287 + } 288 + }, 289 + "value": { 290 + "$type": "app.bsky.feed.post", 291 + "createdAt": "2025-10-19T10:15:58.808312Z", 292 + "embed": { 293 + "$type": "app.bsky.embed.external", 294 + "external": { 295 + "description": "Many parents are now are forgoing minivans for greener alternatives: cargo bikes. They have been around for decades, but the advent of the electric bike motor has made them much more popular.", 296 + "thumb": { 297 + "$type": "blob", 298 + "ref": { "$link": "bafkreihcwyz33qijkygbsrvoou22ifjhrvqcdqhrruyuiqyziiy2xf6x6q" }, 299 + "mimeType": "image/jpeg", 300 + "size": 346926 301 + }, 302 + "title": "Why more parents are riding cargo bikes, skipping the minivan", 303 + "uri": "https://n.pr/3WJyZn9" 304 + } 305 + }, 306 + "facets": [ 307 + { 308 + "features": [{ "$type": "app.bsky.richtext.facet#link", "uri": "https://n.pr/3WJyZn9" }], 309 + "index": { "byteEnd": 204, "byteStart": 192 } 310 + } 311 + ], 312 + "text": "Many parents are now are forgoing minivans for greener alternatives: cargo bikes. They have been around for decades, but the advent of the electric bike motor has made them much more popular. n.pr/3WJyZn9" 313 + }, 314 + "labels": [], 315 + "likeCount": 718, 316 + "replyCount": 28, 317 + "repostCount": 120, 318 + "quoteCount": 43, 319 + "indexedAt": "2025-10-19T10:15:59.258Z", 320 + "embeds": [ 321 + { 322 + "$type": "app.bsky.embed.external#view", 323 + "external": { 324 + "uri": "https://n.pr/3WJyZn9", 325 + "title": "Why more parents are riding cargo bikes, skipping the minivan", 326 + "description": "Many parents are now are forgoing minivans for greener alternatives: cargo bikes. They have been around for decades, but the advent of the electric bike motor has made them much more popular.", 327 + "thumb": "https://cdn.bsky.app/img/feed_thumbnail/plain/did:plc:ln72v57ivz2g46uqf4xxqiuh/bafkreihcwyz33qijkygbsrvoou22ifjhrvqcdqhrruyuiqyziiy2xf6x6q@jpeg" 328 + } 329 + } 330 + ] 331 + } 332 + }, 333 + "bookmarkCount": 0, 334 + "replyCount": 0, 335 + "repostCount": 0, 336 + "likeCount": 0, 337 + "quoteCount": 0, 338 + "indexedAt": "2025-10-19T19:04:16.566Z", 339 + "viewer": { "bookmarked": false, "threadMuted": false, "embeddingDisabled": false }, 340 + "labels": [] 341 + }, 342 + "feedContext": "eyJmZWVkX3VyaSI6ICJhdDovL2RpZDpwbGM6bHB0anZ3NnV0MjI0a3dyajd1YjNzcWJlL2FwcC5ic2t5LmZlZWQuZ2VuZXJhdG9yL2FhYW90Zmp6anBsbmEifQ==", 343 + "reqId": "7CD894C82F1A424AB35B8C9E3F" 344 + }, 345 + { 346 + "post": { 347 + "uri": "at://did:plc:gqlenpe5rv7b6qrphzv7qzf6/app.bsky.feed.post/3m3kyinyzbk2e", 348 + "cid": "bafyreieko3nexzziw4qoe3fszmpvrxcynjzkihyyria3ukodljkoukh4ye", 349 + "author": { 350 + "did": "did:plc:gqlenpe5rv7b6qrphzv7qzf6", 351 + "handle": "auguststreet.ca", 352 + "displayName": "august 🍂", 353 + "avatar": "https://cdn.bsky.app/img/avatar/plain/did:plc:gqlenpe5rv7b6qrphzv7qzf6/bafkreicngla2imtetu2anb4536msamcbs4x73yrlw76q3zg2evgcpm46ja@jpeg", 354 + "associated": { "activitySubscription": { "allowSubscriptions": "followers" } }, 355 + "viewer": { "muted": false, "blockedBy": false }, 356 + "labels": [ 357 + { 358 + "cts": "2024-05-13T07:19:31.819Z", 359 + "src": "did:plc:e4elbtctnfqocyfcml6h2lf7", 360 + "uri": "did:plc:gqlenpe5rv7b6qrphzv7qzf6", 361 + "val": "bluesky-elder", 362 + "ver": 1 363 + } 364 + ], 365 + "createdAt": "2023-06-09T17:01:19.385Z" 366 + }, 367 + "record": { 368 + "$type": "app.bsky.feed.post", 369 + "createdAt": "2025-10-19T19:02:54.836Z", 370 + "embed": { 371 + "$type": "app.bsky.embed.video", 372 + "aspectRatio": { "height": 1920, "width": 1080 }, 373 + "video": { 374 + "$type": "blob", 375 + "ref": { "$link": "bafkreih4rtemzgehgfcdtel3yhbsfc72cdtjo5j3llxs7j3lvkdup333eu" }, 376 + "mimeType": "video/mp4", 377 + "size": 4008469 378 + } 379 + }, 380 + "langs": ["en"], 381 + "text": "brentwood is a good place to see a suburban vancouver node right in the middle of a messy, rapid transformation.\n\ndozens of residential towers + more under construction, a shiny new mall with a plaza opening to the skytrain station, while car dealerships & gas stations exist on the same corner." 382 + }, 383 + "embed": { 384 + "$type": "app.bsky.embed.video#view", 385 + "cid": "bafkreih4rtemzgehgfcdtel3yhbsfc72cdtjo5j3llxs7j3lvkdup333eu", 386 + "playlist": "https://video.bsky.app/watch/did%3Aplc%3Agqlenpe5rv7b6qrphzv7qzf6/bafkreih4rtemzgehgfcdtel3yhbsfc72cdtjo5j3llxs7j3lvkdup333eu/playlist.m3u8", 387 + "thumbnail": "https://video.bsky.app/watch/did%3Aplc%3Agqlenpe5rv7b6qrphzv7qzf6/bafkreih4rtemzgehgfcdtel3yhbsfc72cdtjo5j3llxs7j3lvkdup333eu/thumbnail.jpg", 388 + "aspectRatio": { "height": 1920, "width": 1080 } 389 + }, 390 + "bookmarkCount": 0, 391 + "replyCount": 1, 392 + "repostCount": 1, 393 + "likeCount": 8, 394 + "quoteCount": 0, 395 + "indexedAt": "2025-10-19T19:02:54.959Z", 396 + "viewer": { "bookmarked": false, "threadMuted": false, "embeddingDisabled": false }, 397 + "labels": [] 398 + }, 399 + "feedContext": "eyJmZWVkX3VyaSI6ICJhdDovL2RpZDpwbGM6bHB0anZ3NnV0MjI0a3dyajd1YjNzcWJlL2FwcC5ic2t5LmZlZWQuZ2VuZXJhdG9yL2FhYW90Zmp6anBsbmEifQ==", 400 + "reqId": "7CD894C82F1A424AB35B8C9E3F" 401 + }, 402 + { 403 + "post": { 404 + "uri": "at://did:plc:u6ajzyiqzkzbppp2x2y7fpfu/app.bsky.feed.post/3m3kyi7ulqc2b", 405 + "cid": "bafyreibovfizxijeewlt666brdeabkzwvenzdo24w36niin23wagkgl3ky", 406 + "author": { 407 + "did": "did:plc:u6ajzyiqzkzbppp2x2y7fpfu", 408 + "handle": "gravelinfluencer.bsky.social", 409 + "displayName": "Gravel Influencer", 410 + "avatar": "https://cdn.bsky.app/img/avatar/plain/did:plc:u6ajzyiqzkzbppp2x2y7fpfu/bafkreiatpsn3kwvw7jpvopq7l3en4o443awxucse4mkyrchuzfgryhkewy@jpeg", 411 + "associated": { 412 + "chat": { "allowIncoming": "following" }, 413 + "activitySubscription": { "allowSubscriptions": "followers" } 414 + }, 415 + "viewer": { "muted": false, "blockedBy": false }, 416 + "labels": [ 417 + { 418 + "src": "did:plc:u6ajzyiqzkzbppp2x2y7fpfu", 419 + "uri": "at://did:plc:u6ajzyiqzkzbppp2x2y7fpfu/app.bsky.actor.profile/self", 420 + "cid": "bafyreicetjinj2fsi5epy6hvaczgqsneh3xh5rbffqeuhv4frbxlv7rmvu", 421 + "val": "!no-unauthenticated", 422 + "cts": "1970-01-01T00:00:00.000Z" 423 + } 424 + ], 425 + "createdAt": "2023-10-17T19:15:24.315Z" 426 + }, 427 + "record": { 428 + "$type": "app.bsky.feed.post", 429 + "createdAt": "2025-10-19T19:02:40.011Z", 430 + "embed": { 431 + "$type": "app.bsky.embed.external", 432 + "external": { 433 + "description": "Many parents are now are forgoing minivans for greener alternatives: cargo bikes. They have been around for decades, but the advent of the electric bike motor has made them much more popular.", 434 + "thumb": { 435 + "$type": "blob", 436 + "ref": { "$link": "bafkreibzwvlaj4hwgl7ozxbwtctabfekubwshpb6zhdqwfplwebfosrs5a" }, 437 + "mimeType": "image/jpeg", 438 + "size": 545439 439 + }, 440 + "title": "Why more parents are riding cargo bikes, skipping the minivan", 441 + "uri": "https://www.npr.org/2025/10/18/nx-s1-5532087/why-some-parents-are-ditching-minivans-for-cargo-bikes" 442 + } 443 + }, 444 + "facets": [ 445 + { 446 + "$type": "app.bsky.richtext.facet", 447 + "features": [{ "$type": "app.bsky.richtext.facet#mention", "did": "did:plc:kskvqfh6r4wpz4izh4mhrr2u" }], 448 + "index": { "byteEnd": 174, "byteStart": 155 } 449 + } 450 + ], 451 + "langs": ["en"], 452 + "text": "This is a fantastic article about how cargo bikes are proving to be a gamechanger for parents wanting to reduce their car usage.\n\n(With an appearance from @lauragmitchell.com!)" 453 + }, 454 + "embed": { 455 + "$type": "app.bsky.embed.external#view", 456 + "external": { 457 + "uri": "https://www.npr.org/2025/10/18/nx-s1-5532087/why-some-parents-are-ditching-minivans-for-cargo-bikes", 458 + "title": "Why more parents are riding cargo bikes, skipping the minivan", 459 + "description": "Many parents are now are forgoing minivans for greener alternatives: cargo bikes. They have been around for decades, but the advent of the electric bike motor has made them much more popular.", 460 + "thumb": "https://cdn.bsky.app/img/feed_thumbnail/plain/did:plc:u6ajzyiqzkzbppp2x2y7fpfu/bafkreibzwvlaj4hwgl7ozxbwtctabfekubwshpb6zhdqwfplwebfosrs5a@jpeg" 461 + } 462 + }, 463 + "bookmarkCount": 0, 464 + "replyCount": 2, 465 + "repostCount": 5, 466 + "likeCount": 26, 467 + "quoteCount": 0, 468 + "indexedAt": "2025-10-19T19:02:42.460Z", 469 + "viewer": { "bookmarked": false, "threadMuted": false, "replyDisabled": true, "embeddingDisabled": false }, 470 + "labels": [], 471 + "threadgate": { 472 + "uri": "at://did:plc:u6ajzyiqzkzbppp2x2y7fpfu/app.bsky.feed.threadgate/3m3kyi7ulqc2b", 473 + "cid": "bafyreigacgxq3j532styqg4b7vaugi7qh52oej47vgcm24tkuplnqxpieq", 474 + "record": { 475 + "$type": "app.bsky.feed.threadgate", 476 + "allow": [ 477 + { "$type": "app.bsky.feed.threadgate#mentionRule" }, 478 + { "$type": "app.bsky.feed.threadgate#followingRule" } 479 + ], 480 + "createdAt": "2025-10-19T19:02:41.045Z", 481 + "hiddenReplies": [], 482 + "post": "at://did:plc:u6ajzyiqzkzbppp2x2y7fpfu/app.bsky.feed.post/3m3kyi7ulqc2b" 483 + }, 484 + "lists": [] 485 + } 486 + }, 487 + "feedContext": "eyJmZWVkX3VyaSI6ICJhdDovL2RpZDpwbGM6bHB0anZ3NnV0MjI0a3dyajd1YjNzcWJlL2FwcC5ic2t5LmZlZWQuZ2VuZXJhdG9yL2FhYW90Zmp6anBsbmEifQ==", 488 + "reqId": "7CD894C82F1A424AB35B8C9E3F" 489 + }, 490 + { 491 + "post": { 492 + "uri": "at://did:plc:zmfrqr23bzcwiqrhd7iczspi/app.bsky.feed.post/3m3kydts2dc2o", 493 + "cid": "bafyreih4pakoikkwdxzyl5qoquqoe3gz45k64lky2iqx7xxulbmtt25fj4", 494 + "author": { 495 + "did": "did:plc:zmfrqr23bzcwiqrhd7iczspi", 496 + "handle": "arisaction.bsky.social", 497 + "displayName": "Ben L", 498 + "avatar": "https://cdn.bsky.app/img/avatar/plain/did:plc:zmfrqr23bzcwiqrhd7iczspi/bafkreicdfeag5nptknnalceuwop5zwgqbyzq5rcr5trhs7wlmnzsctlvwu@jpeg", 499 + "associated": { "activitySubscription": { "allowSubscriptions": "followers" } }, 500 + "viewer": { "muted": false, "blockedBy": false }, 501 + "labels": [], 502 + "createdAt": "2023-11-29T00:14:22.063Z" 503 + }, 504 + "record": { 505 + "$type": "app.bsky.feed.post", 506 + "createdAt": "2025-10-19T19:00:13.130Z", 507 + "facets": [ 508 + { 509 + "features": [{ "$type": "app.bsky.richtext.facet#tag", "tag": "pokemonZA" }], 510 + "index": { "byteEnd": 104, "byteStart": 94 } 511 + } 512 + ], 513 + "langs": ["en"], 514 + "text": "one of the ZA wild zones literally runs into a cafe and more lol what the heck city planners? #pokemonZA" 515 + }, 516 + "bookmarkCount": 0, 517 + "replyCount": 0, 518 + "repostCount": 0, 519 + "likeCount": 0, 520 + "quoteCount": 0, 521 + "indexedAt": "2025-10-19T19:00:13.161Z", 522 + "viewer": { "bookmarked": false, "threadMuted": false, "embeddingDisabled": false }, 523 + "labels": [] 524 + }, 525 + "feedContext": "eyJmZWVkX3VyaSI6ICJhdDovL2RpZDpwbGM6bHB0anZ3NnV0MjI0a3dyajd1YjNzcWJlL2FwcC5ic2t5LmZlZWQuZ2VuZXJhdG9yL2FhYW90Zmp6anBsbmEifQ==", 526 + "reqId": "7CD894C82F1A424AB35B8C9E3F" 527 + }, 528 + { 529 + "post": { 530 + "uri": "at://did:plc:ie3hznmaux6zavk7stf3qtdz/app.bsky.feed.post/3m3ky7z3jvc2r", 531 + "cid": "bafyreidh5vmm6i4ihk4bodp6ruyrdzhbqdcmr7rrpfq5bahx5msbfg7h3e", 532 + "author": { 533 + "did": "did:plc:ie3hznmaux6zavk7stf3qtdz", 534 + "handle": "bsamuels72.bsky.social", 535 + "displayName": "Barbara Samuels", 536 + "avatar": "https://cdn.bsky.app/img/avatar/plain/did:plc:ie3hznmaux6zavk7stf3qtdz/bafkreiecixefjz5ohu3zyyia3nv33q46qgbgan3r4khnhgq3dxcmjf4oki@jpeg", 537 + "associated": { 538 + "chat": { "allowIncoming": "following" }, 539 + "activitySubscription": { "allowSubscriptions": "followers" } 540 + }, 541 + "viewer": { "muted": false, "blockedBy": false }, 542 + "labels": [], 543 + "createdAt": "2024-11-14T22:01:29.134Z" 544 + }, 545 + "record": { 546 + "$type": "app.bsky.feed.post", 547 + "createdAt": "2025-10-19T18:58:04.463Z", 548 + "embed": { 549 + "$type": "app.bsky.embed.record", 550 + "record": { 551 + "cid": "bafyreifg7pnpczi2pfkt6gmmj6xsupld2oevsld5c22rdiofbaaa53uvve", 552 + "uri": "at://did:plc:xxd42bak7yb6kuicm42lxi63/app.bsky.feed.post/3m3khbp5fek2e" 553 + } 554 + }, 555 + "langs": ["en"], 556 + "text": "Baltimore heavily subsidizes market rate rentals w/tax credits & TIFs but gets little or nothing back thru profit sharing or tax revenue & lets developers dictate what gets built & where. And it also owns sites (e.g Superblock) that private sector cant make work. So why not try something different?" 557 + }, 558 + "embed": { 559 + "$type": "app.bsky.embed.record#view", 560 + "record": { 561 + "$type": "app.bsky.embed.record#viewRecord", 562 + "uri": "at://did:plc:xxd42bak7yb6kuicm42lxi63/app.bsky.feed.post/3m3khbp5fek2e", 563 + "cid": "bafyreifg7pnpczi2pfkt6gmmj6xsupld2oevsld5c22rdiofbaaa53uvve", 564 + "author": { 565 + "did": "did:plc:xxd42bak7yb6kuicm42lxi63", 566 + "handle": "aidancscott.bsky.social", 567 + "displayName": "Aidan Scott", 568 + "avatar": "https://cdn.bsky.app/img/avatar/plain/did:plc:xxd42bak7yb6kuicm42lxi63/bafkreifpikfhtrq45vblyh6gnbixaepoxofdqxjv2i72bsy3ohglhtahqm@jpeg", 569 + "associated": { 570 + "chat": { "allowIncoming": "following" }, 571 + "activitySubscription": { "allowSubscriptions": "followers" } 572 + }, 573 + "viewer": { "muted": false, "blockedBy": false }, 574 + "labels": [], 575 + "createdAt": "2023-09-12T22:50:05.172Z" 576 + }, 577 + "value": { 578 + "$type": "app.bsky.feed.post", 579 + "createdAt": "2025-10-19T13:54:47.537Z", 580 + "embed": { 581 + "$type": "app.bsky.embed.external", 582 + "external": { 583 + "description": "To generate revenue and improve rental housing supply, the City of Vancouver will create a for-profit real estate development company.", 584 + "thumb": { 585 + "$type": "blob", 586 + "ref": { "$link": "bafkreig3czbhhd5ro4t6uyo4xmxlkknrkbpo7vhlqzwyzkyrunykemqvja" }, 587 + "mimeType": "image/jpeg", 588 + "size": 454597 589 + }, 590 + "title": "City of Vancouver to create new real estate company to build rental housing | Urbanized", 591 + "uri": "https://dailyhive.com/vancouver/city-of-vancouver-real-estate-development-company-rental-housing" 592 + } 593 + }, 594 + "facets": [ 595 + { 596 + "features": [ 597 + { 598 + "$type": "app.bsky.richtext.facet#link", 599 + "uri": "https://dailyhive.com/vancouver/city-of-vancouver-real-estate-development-company-rental-housing" 600 + } 601 + ], 602 + "index": { "byteEnd": 178, "byteStart": 149 } 603 + } 604 + ], 605 + "langs": ["en"], 606 + "text": "Should have done this year's ago. \n\nCities should be property developers.\n\nProtect rental housing and ensure appropriate units for young families. \n\ndailyhive.com/vancouver/ci..." 607 + }, 608 + "labels": [], 609 + "likeCount": 2, 610 + "replyCount": 0, 611 + "repostCount": 0, 612 + "quoteCount": 1, 613 + "indexedAt": "2025-10-19T13:54:47.958Z", 614 + "embeds": [ 615 + { 616 + "$type": "app.bsky.embed.external#view", 617 + "external": { 618 + "uri": "https://dailyhive.com/vancouver/city-of-vancouver-real-estate-development-company-rental-housing", 619 + "title": "City of Vancouver to create new real estate company to build rental housing | Urbanized", 620 + "description": "To generate revenue and improve rental housing supply, the City of Vancouver will create a for-profit real estate development company.", 621 + "thumb": "https://cdn.bsky.app/img/feed_thumbnail/plain/did:plc:xxd42bak7yb6kuicm42lxi63/bafkreig3czbhhd5ro4t6uyo4xmxlkknrkbpo7vhlqzwyzkyrunykemqvja@jpeg" 622 + } 623 + } 624 + ] 625 + } 626 + }, 627 + "bookmarkCount": 0, 628 + "replyCount": 1, 629 + "repostCount": 0, 630 + "likeCount": 2, 631 + "quoteCount": 0, 632 + "indexedAt": "2025-10-19T18:58:04.758Z", 633 + "viewer": { "bookmarked": false, "threadMuted": false, "embeddingDisabled": false }, 634 + "labels": [] 635 + }, 636 + "feedContext": "eyJmZWVkX3VyaSI6ICJhdDovL2RpZDpwbGM6bHB0anZ3NnV0MjI0a3dyajd1YjNzcWJlL2FwcC5ic2t5LmZlZWQuZ2VuZXJhdG9yL2FhYW90Zmp6anBsbmEifQ==", 637 + "reqId": "7CD894C82F1A424AB35B8C9E3F" 638 + }, 639 + { 640 + "post": { 641 + "uri": "at://did:plc:5pghxhhzn2fcihyploqv4ijt/app.bsky.feed.post/3m3ky6ywsx22q", 642 + "cid": "bafyreibibnf753y6gmya27v4undqvxl3umla7ecim2tjulqggfpohvmxxi", 643 + "author": { 644 + "did": "did:plc:5pghxhhzn2fcihyploqv4ijt", 645 + "handle": "actfortransit.bsky.social", 646 + "displayName": "Action Committee for Transit", 647 + "avatar": "https://cdn.bsky.app/img/avatar/plain/did:plc:5pghxhhzn2fcihyploqv4ijt/bafkreidzrlxszdp7rljztttdwjcom25doij3htnmj6liojb7mxdjw4qsnq@jpeg", 648 + "associated": { 649 + "chat": { "allowIncoming": "following" }, 650 + "activitySubscription": { "allowSubscriptions": "followers" } 651 + }, 652 + "viewer": { "muted": false, "blockedBy": false }, 653 + "labels": [ 654 + { 655 + "src": "did:plc:5pghxhhzn2fcihyploqv4ijt", 656 + "uri": "at://did:plc:5pghxhhzn2fcihyploqv4ijt/app.bsky.actor.profile/self", 657 + "cid": "bafyreihk2r6y75qtv2fkzuyx4rhugcfhqrfpye6fkow5jncsglqy3g7i6u", 658 + "val": "!no-unauthenticated", 659 + "cts": "1970-01-01T00:00:00.000Z" 660 + } 661 + ], 662 + "createdAt": "2023-10-07T01:21:50.285Z" 663 + }, 664 + "record": { 665 + "$type": "app.bsky.feed.post", 666 + "createdAt": "2025-10-19T18:57:30.735Z", 667 + "embed": { 668 + "$type": "app.bsky.embed.images", 669 + "images": [ 670 + { 671 + "alt": "Satellite image of a large intersection with a traffic signal and three marked crosswalks. The west leg crosswalk is unmarked. There is a red X in the middle of the intersection, indicating the location of the initial crash. There is a red arrow pointing east toward the red X, indicating the path of the driver who ran the red light, and an arrow pointing north toward the red X, indicating the path of the driver who was starting to go on green. Next to the east leg marked crosswalk, there is a red square indicating the third car, which was stopped for the red light, and a little blue stick figure. There is a black arrow pointing from the red X toward the red square and blue stick figure, indicating the direction of travel of the crashed vehicles after the crash.", 672 + "aspectRatio": { "height": 871, "width": 1463 }, 673 + "image": { 674 + "$type": "blob", 675 + "ref": { "$link": "bafkreibrpafutmntv4sj6shhtnbzkuve4crg2kw2ucdfeknqh26yom6vbi" }, 676 + "mimeType": "image/jpeg", 677 + "size": 981052 678 + } 679 + } 680 + ] 681 + }, 682 + "facets": [ 683 + { 684 + "features": [{ "$type": "app.bsky.richtext.facet#tag", "tag": "CollateralDamage" }], 685 + "index": { "byteEnd": 140, "byteStart": 123 } 686 + } 687 + ], 688 + "langs": ["en"], 689 + "text": "On Tues 10/7/25 5:40 pm (Gaithersburg police EJ7916000W) \na pedestrian (17/M) crossing properly in a marked crosswalk \nwas #CollateralDamage (no injury)\nwhen a 2019 Toyota RAV-4 driver going E on Clopper Rd/117 at Longdraft Rd \nran a red light (at fault)\n& hit a driver going S & a driver going W." 690 + }, 691 + "embed": { 692 + "$type": "app.bsky.embed.images#view", 693 + "images": [ 694 + { 695 + "thumb": "https://cdn.bsky.app/img/feed_thumbnail/plain/did:plc:5pghxhhzn2fcihyploqv4ijt/bafkreibrpafutmntv4sj6shhtnbzkuve4crg2kw2ucdfeknqh26yom6vbi@jpeg", 696 + "fullsize": "https://cdn.bsky.app/img/feed_fullsize/plain/did:plc:5pghxhhzn2fcihyploqv4ijt/bafkreibrpafutmntv4sj6shhtnbzkuve4crg2kw2ucdfeknqh26yom6vbi@jpeg", 697 + "alt": "Satellite image of a large intersection with a traffic signal and three marked crosswalks. The west leg crosswalk is unmarked. There is a red X in the middle of the intersection, indicating the location of the initial crash. There is a red arrow pointing east toward the red X, indicating the path of the driver who ran the red light, and an arrow pointing north toward the red X, indicating the path of the driver who was starting to go on green. Next to the east leg marked crosswalk, there is a red square indicating the third car, which was stopped for the red light, and a little blue stick figure. There is a black arrow pointing from the red X toward the red square and blue stick figure, indicating the direction of travel of the crashed vehicles after the crash.", 698 + "aspectRatio": { "height": 871, "width": 1463 } 699 + } 700 + ] 701 + }, 702 + "bookmarkCount": 0, 703 + "replyCount": 0, 704 + "repostCount": 0, 705 + "likeCount": 1, 706 + "quoteCount": 0, 707 + "indexedAt": "2025-10-19T18:57:34.660Z", 708 + "viewer": { "bookmarked": false, "threadMuted": false, "embeddingDisabled": false }, 709 + "labels": [] 710 + }, 711 + "feedContext": "eyJmZWVkX3VyaSI6ICJhdDovL2RpZDpwbGM6bHB0anZ3NnV0MjI0a3dyajd1YjNzcWJlL2FwcC5ic2t5LmZlZWQuZ2VuZXJhdG9yL2FhYW90Zmp6anBsbmEifQ==", 712 + "reqId": "7CD894C82F1A424AB35B8C9E3F" 713 + }, 714 + { 715 + "post": { 716 + "uri": "at://did:plc:nyz2ssqxd3g72lpmdrfrsc74/app.bsky.feed.post/3lzz6zi3toc2k", 717 + "cid": "bafyreia5y452hlkxbs6cmcmwnubn5cqtrkdmuuocpt7sccznx52nx3yxka", 718 + "author": { 719 + "did": "did:plc:nyz2ssqxd3g72lpmdrfrsc74", 720 + "handle": "urbanism.plus", 721 + "displayName": "Urbanism+ Feed Assistant", 722 + "avatar": "https://cdn.bsky.app/img/avatar/plain/did:plc:nyz2ssqxd3g72lpmdrfrsc74/bafkreiehj5qup7rijrp3sdgo5w3ic6pyedhkgippzl5y3cf7yt7dzwy5xe@jpeg", 723 + "associated": { "activitySubscription": { "allowSubscriptions": "followers" } }, 724 + "viewer": { "muted": false, "blockedBy": false }, 725 + "labels": [ 726 + { 727 + "cts": "2024-05-16T22:33:26.039Z", 728 + "src": "did:plc:e4elbtctnfqocyfcml6h2lf7", 729 + "uri": "did:plc:nyz2ssqxd3g72lpmdrfrsc74", 730 + "val": "bluesky-elder", 731 + "ver": 1 732 + } 733 + ], 734 + "createdAt": "2023-08-02T20:50:11.457Z" 735 + }, 736 + "record": { 737 + "$type": "app.bsky.feed.post", 738 + "createdAt": "2025-09-29T23:46:34.597Z", 739 + "embed": { 740 + "$type": "app.bsky.embed.external", 741 + "external": { 742 + "description": "Bluesky Urbanists! Talk about urbanism, improve the feed, add a complaint or suggestion! | 196 members", 743 + "title": "Join the BSKY URBANISM+ Discord Server!", 744 + "uri": "https://discord.gg/aSsUFWUVyR" 745 + } 746 + }, 747 + "langs": ["en"], 748 + "text": "🔁 Hey y'all, is your family tired of listening to you talk about bad street design, trams, and sexy bollards?\n\nConsider sliding in to our discord server! There's some really great people here :)\n\nTired of seeing this post? Click ... and \"Hide post for me\" to disappear this message from the feeds!" 749 + }, 750 + "embed": { 751 + "$type": "app.bsky.embed.external#view", 752 + "external": { 753 + "uri": "https://discord.gg/aSsUFWUVyR", 754 + "title": "Join the BSKY URBANISM+ Discord Server!", 755 + "description": "Bluesky Urbanists! Talk about urbanism, improve the feed, add a complaint or suggestion! | 196 members" 756 + } 757 + }, 758 + "bookmarkCount": 2, 759 + "replyCount": 0, 760 + "repostCount": 3, 761 + "likeCount": 23, 762 + "quoteCount": 0, 763 + "indexedAt": "2025-09-29T23:47:43.957Z", 764 + "viewer": { "bookmarked": false, "threadMuted": false, "embeddingDisabled": false }, 765 + "labels": [] 766 + }, 767 + "feedContext": "eyJmZWVkX3VyaSI6ICJhdDovL2RpZDpwbGM6bHB0anZ3NnV0MjI0a3dyajd1YjNzcWJlL2FwcC5ic2t5LmZlZWQuZ2VuZXJhdG9yL2FhYW90Zmp6anBsbmEiLCAiYXR0cmlidXRpb24iOiAibnM1MjEyIn0=", 768 + "reqId": "7CD894C82F1A424AB35B8C9E3F" 769 + }, 770 + { 771 + "post": { 772 + "uri": "at://did:plc:dcqzhgfggu2wjtwz4oyifyfj/app.bsky.feed.post/3m3ky2nfaj22i", 773 + "cid": "bafyreicoipqdyiwq53e6glnsmgcqxibwbyzkv3gytpn42ctzzmldzd4dcq", 774 + "author": { 775 + "did": "did:plc:dcqzhgfggu2wjtwz4oyifyfj", 776 + "handle": "michelleh373.bsky.social", 777 + "displayName": "Michelle H (formerly michelle373737 on 🐦)", 778 + "avatar": "https://cdn.bsky.app/img/avatar/plain/did:plc:dcqzhgfggu2wjtwz4oyifyfj/bafkreiavxbkdvaitdz7hodzjzbp2oshb4pyaajuyw4tzxc4a54aqedmk7q@jpeg", 779 + "associated": { "activitySubscription": { "allowSubscriptions": "followers" } }, 780 + "viewer": { "muted": false, "blockedBy": false }, 781 + "labels": [ 782 + { 783 + "src": "did:plc:dcqzhgfggu2wjtwz4oyifyfj", 784 + "uri": "at://did:plc:dcqzhgfggu2wjtwz4oyifyfj/app.bsky.actor.profile/self", 785 + "cid": "bafyreibugss5jzdzhnaynybj3wonatkvawb4ukfknzzsnhotrxytry6hnq", 786 + "val": "!no-unauthenticated", 787 + "cts": "2024-11-13T22:07:25.286Z" 788 + } 789 + ], 790 + "createdAt": "2024-11-13T22:07:26.089Z" 791 + }, 792 + "record": { 793 + "$type": "app.bsky.feed.post", 794 + "createdAt": "2025-10-19T18:55:04.417Z", 795 + "embed": { 796 + "$type": "app.bsky.embed.images", 797 + "images": [ 798 + { 799 + "alt": "A photo of the book “That’ll Never Work Here” by Patty Wiens", 800 + "aspectRatio": { "height": 2000, "width": 1500 }, 801 + "image": { 802 + "$type": "blob", 803 + "ref": { "$link": "bafkreidvo7ml7vxzzuwrnjg4f4sffqbvcklxowu7f6en2aqfnguhnw77rq" }, 804 + "mimeType": "image/jpeg", 805 + "size": 940565 806 + } 807 + } 808 + ] 809 + }, 810 + "facets": [ 811 + { 812 + "$type": "app.bsky.richtext.facet", 813 + "features": [{ "$type": "app.bsky.richtext.facet#mention", "did": "did:plc:bnhatb3xvplcxddl6lvnr7k5" }], 814 + "index": { "byteEnd": 83, "byteStart": 68 } 815 + }, 816 + { 817 + "features": [{ "$type": "app.bsky.richtext.facet#tag", "tag": "Winnipeg" }], 818 + "index": { "byteEnd": 179, "byteStart": 170 } 819 + } 820 + ], 821 + "langs": ["en"], 822 + "text": "Really enjoying this new book by my friend and fellow bike advocate @pattybikes.com Love learning more about our her inspiring journey to biking all year round (even in #Winnipeg). \n\nHighly recommend this one, even to non-cyclists! ❤️🙌" 823 + }, 824 + "embed": { 825 + "$type": "app.bsky.embed.images#view", 826 + "images": [ 827 + { 828 + "thumb": "https://cdn.bsky.app/img/feed_thumbnail/plain/did:plc:dcqzhgfggu2wjtwz4oyifyfj/bafkreidvo7ml7vxzzuwrnjg4f4sffqbvcklxowu7f6en2aqfnguhnw77rq@jpeg", 829 + "fullsize": "https://cdn.bsky.app/img/feed_fullsize/plain/did:plc:dcqzhgfggu2wjtwz4oyifyfj/bafkreidvo7ml7vxzzuwrnjg4f4sffqbvcklxowu7f6en2aqfnguhnw77rq@jpeg", 830 + "alt": "A photo of the book “That’ll Never Work Here” by Patty Wiens", 831 + "aspectRatio": { "height": 2000, "width": 1500 } 832 + } 833 + ] 834 + }, 835 + "bookmarkCount": 0, 836 + "replyCount": 0, 837 + "repostCount": 0, 838 + "likeCount": 1, 839 + "quoteCount": 0, 840 + "indexedAt": "2025-10-19T18:55:07.556Z", 841 + "viewer": { "bookmarked": false, "threadMuted": false, "embeddingDisabled": false }, 842 + "labels": [] 843 + }, 844 + "feedContext": "eyJmZWVkX3VyaSI6ICJhdDovL2RpZDpwbGM6bHB0anZ3NnV0MjI0a3dyajd1YjNzcWJlL2FwcC5ic2t5LmZlZWQuZ2VuZXJhdG9yL2FhYW90Zmp6anBsbmEifQ==", 845 + "reqId": "7CD894C82F1A424AB35B8C9E3F" 846 + } 847 + ], 848 + "cursor": "eyJ0aW1lc3RhbXAiOiAxNzYwOTAwMTA0LjAsICJvcmRlciI6ICJuZXciLCAiYXR0cmlidXRpb25zIjogWyJuczUyMTIiLCAibnMxMTU5Il19" 849 + }, 850 + { 851 + "feed": [ 852 + { 853 + "post": { 854 + "uri": "at://did:plc:tqtinqvfzoir4eamxohn5mgb/app.bsky.feed.post/3m3kxregmjk26", 855 + "cid": "bafyreib6b4d5vqwqyr7th47beyrgbycmjhgfp5lmycpob5a7rtiitjiizu", 856 + "author": { 857 + "did": "did:plc:tqtinqvfzoir4eamxohn5mgb", 858 + "handle": "tmliza.bsky.social", 859 + "displayName": "Liza", 860 + "avatar": "https://cdn.bsky.app/img/avatar/plain/did:plc:tqtinqvfzoir4eamxohn5mgb/bafkreieybnzxbonqvc5fwnbmoan4ylvky7uxlhkld7drt34klsr5ax6wya@jpeg", 861 + "associated": { "activitySubscription": { "allowSubscriptions": "followers" } }, 862 + "viewer": { "muted": false, "blockedBy": false }, 863 + "labels": [ 864 + { 865 + "src": "did:plc:tqtinqvfzoir4eamxohn5mgb", 866 + "uri": "at://did:plc:tqtinqvfzoir4eamxohn5mgb/app.bsky.actor.profile/self", 867 + "cid": "bafyreieszkpukzuv2ftskiqkizydoyycmogml2y44nyavd7ddtruufetre", 868 + "val": "!no-unauthenticated", 869 + "cts": "1970-01-01T00:00:00.000Z" 870 + } 871 + ], 872 + "createdAt": "2023-09-11T15:10:14.243Z" 873 + }, 874 + "record": { 875 + "$type": "app.bsky.feed.post", 876 + "createdAt": "2025-10-19T18:49:53.047Z", 877 + "embed": { 878 + "$type": "app.bsky.embed.external", 879 + "external": { 880 + "description": "ALT: a man wearing a hat and a tank top is sitting in front of a pile of wooden crates .", 881 + "thumb": { 882 + "$type": "blob", 883 + "ref": { "$link": "bafkreidcw3ongt5lmbtmyxznei7jq32zir5kojy7e6rqunl7sf2l6c56ea" }, 884 + "mimeType": "image/jpeg", 885 + "size": 128728 886 + }, 887 + "title": "a man wearing a hat and a tank top is sitting in front of a pile of wooden crates .", 888 + "uri": "https://media.tenor.com/PisuVQ15VP0AAAAC/it%27s-gonna-be-fine-b99.gif?hh=360&ww=360" 889 + } 890 + }, 891 + "langs": ["en"], 892 + "text": "Had my dnd game for the first time in forever today. My players ended up unleashing a bunch of monsters into what was pretty much a ren faire because they were trying to get out of paying a fine. Yeah...that won't be a problem later!" 893 + }, 894 + "embed": { 895 + "$type": "app.bsky.embed.external#view", 896 + "external": { 897 + "uri": "https://media.tenor.com/PisuVQ15VP0AAAAC/it%27s-gonna-be-fine-b99.gif?hh=360&ww=360", 898 + "title": "a man wearing a hat and a tank top is sitting in front of a pile of wooden crates .", 899 + "description": "ALT: a man wearing a hat and a tank top is sitting in front of a pile of wooden crates .", 900 + "thumb": "https://cdn.bsky.app/img/feed_thumbnail/plain/did:plc:tqtinqvfzoir4eamxohn5mgb/bafkreidcw3ongt5lmbtmyxznei7jq32zir5kojy7e6rqunl7sf2l6c56ea@jpeg" 901 + } 902 + }, 903 + "bookmarkCount": 0, 904 + "replyCount": 0, 905 + "repostCount": 0, 906 + "likeCount": 1, 907 + "quoteCount": 0, 908 + "indexedAt": "2025-10-19T18:49:54.057Z", 909 + "viewer": { "bookmarked": false, "threadMuted": false, "embeddingDisabled": false }, 910 + "labels": [] 911 + } 912 + }, 913 + { 914 + "post": { 915 + "uri": "at://did:plc:6pjsxq4f4wvihelm4lphbk5e/app.bsky.feed.post/3m3kxpyghy22q", 916 + "cid": "bafyreibd6fa7h4asspymlxcu7rk4fqgj44uhnzji7du2kmfkzbsooj5cda", 917 + "author": { 918 + "did": "did:plc:6pjsxq4f4wvihelm4lphbk5e", 919 + "handle": "ashleemboyer.com", 920 + "displayName": "Ashlee", 921 + "avatar": "https://cdn.bsky.app/img/avatar/plain/did:plc:6pjsxq4f4wvihelm4lphbk5e/bafkreiaiuk6o7ba43h5xryhxq25axf4hfgmqvmh4j6muy2mgl6o5xjmd4q@jpeg", 922 + "associated": { 923 + "chat": { "allowIncoming": "none" }, 924 + "activitySubscription": { "allowSubscriptions": "none" } 925 + }, 926 + "viewer": { "muted": false, "blockedBy": false }, 927 + "labels": [ 928 + { 929 + "cts": "2024-05-11T09:28:45.200Z", 930 + "src": "did:plc:e4elbtctnfqocyfcml6h2lf7", 931 + "uri": "did:plc:6pjsxq4f4wvihelm4lphbk5e", 932 + "val": "bluesky-elder", 933 + "ver": 1 934 + } 935 + ], 936 + "createdAt": "2023-04-24T23:46:32.028Z" 937 + }, 938 + "record": { 939 + "$type": "app.bsky.feed.post", 940 + "createdAt": "2025-10-19T18:49:06.904Z", 941 + "langs": ["en"], 942 + "text": "I was pretty offline this week and guess I missed the queerphobes panicking over DND??? Surely they’re all rage baiting… right???" 943 + }, 944 + "bookmarkCount": 0, 945 + "replyCount": 0, 946 + "repostCount": 0, 947 + "likeCount": 2, 948 + "quoteCount": 0, 949 + "indexedAt": "2025-10-19T18:49:07.258Z", 950 + "viewer": { "bookmarked": false, "threadMuted": false, "embeddingDisabled": false }, 951 + "labels": [] 952 + } 953 + }, 954 + { 955 + "post": { 956 + "uri": "at://did:plc:mpnjjyqrdvymidwwq3abbcth/app.bsky.feed.post/3m3kxolbmms22", 957 + "cid": "bafyreifel6ojs7r45gg7smuoi5tjgqqigaznlw6t7u4rmb7jmzyvwrmpai", 958 + "author": { 959 + "did": "did:plc:mpnjjyqrdvymidwwq3abbcth", 960 + "handle": "rubyfire.bsky.social", 961 + "displayName": "Rubyfire377", 962 + "avatar": "https://cdn.bsky.app/img/avatar/plain/did:plc:mpnjjyqrdvymidwwq3abbcth/bafkreihajmycpufw36r7po7pw2xqri3ivkk46nypsizhwvzlafd3wqgmoq@jpeg", 963 + "associated": { 964 + "chat": { "allowIncoming": "following" }, 965 + "activitySubscription": { "allowSubscriptions": "followers" } 966 + }, 967 + "viewer": { "muted": false, "blockedBy": false }, 968 + "labels": [], 969 + "createdAt": "2023-09-25T17:28:28.363Z" 970 + }, 971 + "record": { 972 + "$type": "app.bsky.feed.post", 973 + "createdAt": "2025-10-19T18:48:19.558Z", 974 + "facets": [ 975 + { 976 + "$type": "app.bsky.richtext.facet", 977 + "features": [{ "$type": "app.bsky.richtext.facet#mention", "did": "did:plc:54z6uixjexd2nrmemne73ixm" }], 978 + "index": { "byteEnd": 113, "byteStart": 87 } 979 + } 980 + ], 981 + "langs": ["en"], 982 + "text": "Its weird that Daggerheart is dangerously close to Daggerfall lmao 🤣 😆 come on @matthewmercer.bsky.social" 983 + }, 984 + "bookmarkCount": 0, 985 + "replyCount": 0, 986 + "repostCount": 0, 987 + "likeCount": 0, 988 + "quoteCount": 0, 989 + "indexedAt": "2025-10-19T18:48:20.257Z", 990 + "viewer": { "bookmarked": false, "threadMuted": false, "embeddingDisabled": false }, 991 + "labels": [] 992 + } 993 + }, 994 + { 995 + "post": { 996 + "uri": "at://did:plc:a63ku6geig7zaoitehuye2fc/app.bsky.feed.post/3m3kxnxwtts2z", 997 + "cid": "bafyreiacbonkj3o2uilikdzt52cnq6ofr6vn3exmrefqnjjjn6u7pinh4e", 998 + "author": { 999 + "did": "did:plc:a63ku6geig7zaoitehuye2fc", 1000 + "handle": "outstar.bsky.social", 1001 + "displayName": "outstar 🧛🏻 in bloodlines 2 era", 1002 + "avatar": "https://cdn.bsky.app/img/avatar/plain/did:plc:a63ku6geig7zaoitehuye2fc/bafkreigmu2t6jk5rz3x6pkch2g45xdbnbpxrflqblyrryijnjgc4ny5wai@jpeg", 1003 + "associated": { 1004 + "chat": { "allowIncoming": "following" }, 1005 + "activitySubscription": { "allowSubscriptions": "followers" } 1006 + }, 1007 + "viewer": { "muted": false, "blockedBy": false }, 1008 + "labels": [ 1009 + { 1010 + "cts": "2024-05-14T07:35:13.898Z", 1011 + "src": "did:plc:e4elbtctnfqocyfcml6h2lf7", 1012 + "uri": "did:plc:a63ku6geig7zaoitehuye2fc", 1013 + "val": "bluesky-elder", 1014 + "ver": 1 1015 + } 1016 + ], 1017 + "createdAt": "2023-07-07T06:18:04.415Z" 1018 + }, 1019 + "record": { 1020 + "$type": "app.bsky.feed.post", 1021 + "createdAt": "2025-10-19T18:47:59.284Z", 1022 + "embed": { 1023 + "$type": "app.bsky.embed.external", 1024 + "external": { 1025 + "description": "ALT: a man in a blue jacket is walking down stairs in a video game with the words motion gaming below him", 1026 + "thumb": { 1027 + "$type": "blob", 1028 + "ref": { "$link": "bafkreibhbfsnrhowpu6eygfgdmjgeoy6lou26qbipwi72uccnk6ljc323m" }, 1029 + "mimeType": "image/jpeg", 1030 + "size": 893982 1031 + }, 1032 + "title": "a man in a blue jacket is walking down stairs in a video game with the words motion gaming below him", 1033 + "uri": "https://media.tenor.com/5cILY7v69r4AAAAC/bloodhunt-parkour.gif?hh=498&ww=498" 1034 + } 1035 + }, 1036 + "langs": ["en"], 1037 + "text": "if you didn't know, vampire: the masquerade has a completely free and great multiplayer game called bloodhunt and you can currently find me in duo queue and try to diablerize me 😊" 1038 + }, 1039 + "embed": { 1040 + "$type": "app.bsky.embed.external#view", 1041 + "external": { 1042 + "uri": "https://media.tenor.com/5cILY7v69r4AAAAC/bloodhunt-parkour.gif?hh=498&ww=498", 1043 + "title": "a man in a blue jacket is walking down stairs in a video game with the words motion gaming below him", 1044 + "description": "ALT: a man in a blue jacket is walking down stairs in a video game with the words motion gaming below him", 1045 + "thumb": "https://cdn.bsky.app/img/feed_thumbnail/plain/did:plc:a63ku6geig7zaoitehuye2fc/bafkreibhbfsnrhowpu6eygfgdmjgeoy6lou26qbipwi72uccnk6ljc323m@jpeg" 1046 + } 1047 + }, 1048 + "bookmarkCount": 0, 1049 + "replyCount": 0, 1050 + "repostCount": 0, 1051 + "likeCount": 7, 1052 + "quoteCount": 0, 1053 + "indexedAt": "2025-10-19T18:48:01.358Z", 1054 + "viewer": { "bookmarked": false, "threadMuted": false, "embeddingDisabled": false }, 1055 + "labels": [] 1056 + } 1057 + }, 1058 + { 1059 + "post": { 1060 + "uri": "at://did:plc:v43hij6cw35vuhx7oixr2jh7/app.bsky.feed.post/3m3kxmh2s222w", 1061 + "cid": "bafyreianxslirvulcnlblwgi32uo2t6ffnzz5s4ytd2dxxqpcbdg5me7v4", 1062 + "author": { 1063 + "did": "did:plc:v43hij6cw35vuhx7oixr2jh7", 1064 + "handle": "sammorao13.bsky.social", 1065 + "displayName": "SamMorao13", 1066 + "avatar": "https://cdn.bsky.app/img/avatar/plain/did:plc:v43hij6cw35vuhx7oixr2jh7/bafkreih33iswj2zwpzw3zjmgecikyavzbzsvayti52hsg5vdtgqd3prshm@jpeg", 1067 + "associated": { "activitySubscription": { "allowSubscriptions": "followers" } }, 1068 + "viewer": { "muted": false, "blockedBy": false }, 1069 + "labels": [], 1070 + "createdAt": "2024-11-20T08:55:34.369Z" 1071 + }, 1072 + "record": { 1073 + "$type": "app.bsky.feed.post", 1074 + "createdAt": "2025-10-19T18:47:08.033Z", 1075 + "langs": ["en"], 1076 + "text": "Polovni automobil kupujem isključivo iz oglasa gde stoji NOV NOV NOV, jer osećam da su to pošteni ljudi. 😎" 1077 + }, 1078 + "bookmarkCount": 0, 1079 + "replyCount": 0, 1080 + "repostCount": 0, 1081 + "likeCount": 0, 1082 + "quoteCount": 0, 1083 + "indexedAt": "2025-10-19T18:47:08.561Z", 1084 + "viewer": { "bookmarked": false, "threadMuted": false, "embeddingDisabled": false }, 1085 + "labels": [] 1086 + } 1087 + }, 1088 + { 1089 + "post": { 1090 + "uri": "at://did:plc:ep4pi52ax6vxpbtheggppuv4/app.bsky.feed.post/3m3kxm44f5k2a", 1091 + "cid": "bafyreihe77v2aikuntvdjkxrv77ilaq6hkdtfgw2w76ndy2h7vxkxxx33e", 1092 + "author": { 1093 + "did": "did:plc:ep4pi52ax6vxpbtheggppuv4", 1094 + "handle": "simplysonia.bsky.social", 1095 + "displayName": "SimplySonia", 1096 + "avatar": "https://cdn.bsky.app/img/avatar/plain/did:plc:ep4pi52ax6vxpbtheggppuv4/bafkreiaznxo2evevazlh2hfetnfz4pfcc7gplff6fcfivi7qg73kklwszu@jpeg", 1097 + "associated": { "activitySubscription": { "allowSubscriptions": "followers" } }, 1098 + "viewer": { "muted": false, "blockedBy": false }, 1099 + "labels": [], 1100 + "createdAt": "2024-11-09T02:54:18.483Z" 1101 + }, 1102 + "record": { 1103 + "$type": "app.bsky.feed.post", 1104 + "createdAt": "2025-10-19T18:46:56.550Z", 1105 + "facets": [ 1106 + { 1107 + "features": [{ "$type": "app.bsky.richtext.facet#tag", "tag": "NeverStopBlowingUp" }], 1108 + "index": { "byteEnd": 94, "byteStart": 75 } 1109 + }, 1110 + { 1111 + "features": [{ "$type": "app.bsky.richtext.facet#tag", "tag": "Dimension20" }], 1112 + "index": { "byteEnd": 107, "byteStart": 95 } 1113 + } 1114 + ], 1115 + "langs": ["en"], 1116 + "text": "Nobody can make me sincerely deeply gasp the way Brennan Lee Mulligan does #NeverStopBlowingUp #Dimension20" 1117 + }, 1118 + "bookmarkCount": 0, 1119 + "replyCount": 0, 1120 + "repostCount": 0, 1121 + "likeCount": 0, 1122 + "quoteCount": 0, 1123 + "indexedAt": "2025-10-19T18:46:56.861Z", 1124 + "viewer": { "bookmarked": false, "threadMuted": false, "embeddingDisabled": false }, 1125 + "labels": [] 1126 + } 1127 + }, 1128 + { 1129 + "post": { 1130 + "uri": "at://did:plc:cidtdqu4mzfhemxp4stwpk2h/app.bsky.feed.post/3m3kxkpm5xc2m", 1131 + "cid": "bafyreifkaad5mnr7irauquqs6cthsxbcirryumzzcu4pthr3ox7ulsfyu4", 1132 + "author": { 1133 + "did": "did:plc:cidtdqu4mzfhemxp4stwpk2h", 1134 + "handle": "obiwancannoli.bsky.social", 1135 + "displayName": "", 1136 + "avatar": "https://cdn.bsky.app/img/avatar/plain/did:plc:cidtdqu4mzfhemxp4stwpk2h/bafkreigujm7fi3uhvsqbdaih5kggmxbzza3lgfy76swap37ehplaxg7mv4@jpeg", 1137 + "associated": { 1138 + "chat": { "allowIncoming": "following" }, 1139 + "activitySubscription": { "allowSubscriptions": "followers" } 1140 + }, 1141 + "viewer": { "muted": false, "blockedBy": false }, 1142 + "labels": [], 1143 + "createdAt": "2024-02-08T09:23:30.220Z" 1144 + }, 1145 + "record": { 1146 + "$type": "app.bsky.feed.post", 1147 + "createdAt": "2025-10-19T18:46:09.879Z", 1148 + "langs": ["en"], 1149 + "text": "The more TTRPGs i play, the more i realize my ideal TRRPG is just a more streamlined version of Pathfinder 1e" 1150 + }, 1151 + "bookmarkCount": 0, 1152 + "replyCount": 0, 1153 + "repostCount": 0, 1154 + "likeCount": 1, 1155 + "quoteCount": 0, 1156 + "indexedAt": "2025-10-19T18:46:10.660Z", 1157 + "viewer": { "bookmarked": false, "threadMuted": false, "embeddingDisabled": false }, 1158 + "labels": [] 1159 + } 1160 + }, 1161 + { 1162 + "post": { 1163 + "uri": "at://did:plc:lormbbbnoybrdgvwvk55gewq/app.bsky.feed.post/3m3kxkeb2ss23", 1164 + "cid": "bafyreiexe575kct4xypd6s3zp7mfn7mxpyfk2ojzevdtfl7zjtmnbzpzsm", 1165 + "author": { 1166 + "did": "did:plc:lormbbbnoybrdgvwvk55gewq", 1167 + "handle": "golda.bsky.social", 1168 + "displayName": "Gold A", 1169 + "avatar": "https://cdn.bsky.app/img/avatar/plain/did:plc:lormbbbnoybrdgvwvk55gewq/bafkreiehg6lcfdpgrzml5aavbkehmxt6xksrg6jveduo6q2ssif64ten6e@jpeg", 1170 + "associated": { 1171 + "chat": { "allowIncoming": "following" }, 1172 + "activitySubscription": { "allowSubscriptions": "followers" } 1173 + }, 1174 + "viewer": { "muted": false, "blockedBy": false }, 1175 + "labels": [ 1176 + { 1177 + "cts": "2024-05-18T01:43:22.622Z", 1178 + "src": "did:plc:e4elbtctnfqocyfcml6h2lf7", 1179 + "uri": "did:plc:lormbbbnoybrdgvwvk55gewq", 1180 + "val": "bluesky-elder", 1181 + "ver": 1 1182 + } 1183 + ], 1184 + "createdAt": "2023-08-10T17:15:24.314Z" 1185 + }, 1186 + "record": { 1187 + "$type": "app.bsky.feed.post", 1188 + "createdAt": "2025-10-19T18:45:57.943Z", 1189 + "embed": { 1190 + "$type": "app.bsky.embed.images", 1191 + "images": [ 1192 + { 1193 + "alt": "", 1194 + "aspectRatio": { "height": 2000, "width": 2000 }, 1195 + "image": { 1196 + "$type": "blob", 1197 + "ref": { "$link": "bafkreibmkp3hr5aypwynl5urndqijgpealicmnjzcfunqliuzxuqiyncmy" }, 1198 + "mimeType": "image/jpeg", 1199 + "size": 982445 1200 + } 1201 + } 1202 + ] 1203 + }, 1204 + "langs": ["en"], 1205 + "text": "Started Dungeons & Dragons The Fallbacks Bound for Ruin audiobook. \n\nSo far it’s fun and the adventure setup is great. The party interactions very much give me a lot of the same energy Honor Among Thieves had." 1206 + }, 1207 + "embed": { 1208 + "$type": "app.bsky.embed.images#view", 1209 + "images": [ 1210 + { 1211 + "thumb": "https://cdn.bsky.app/img/feed_thumbnail/plain/did:plc:lormbbbnoybrdgvwvk55gewq/bafkreibmkp3hr5aypwynl5urndqijgpealicmnjzcfunqliuzxuqiyncmy@jpeg", 1212 + "fullsize": "https://cdn.bsky.app/img/feed_fullsize/plain/did:plc:lormbbbnoybrdgvwvk55gewq/bafkreibmkp3hr5aypwynl5urndqijgpealicmnjzcfunqliuzxuqiyncmy@jpeg", 1213 + "alt": "", 1214 + "aspectRatio": { "height": 2000, "width": 2000 } 1215 + } 1216 + ] 1217 + }, 1218 + "bookmarkCount": 0, 1219 + "replyCount": 0, 1220 + "repostCount": 0, 1221 + "likeCount": 0, 1222 + "quoteCount": 0, 1223 + "indexedAt": "2025-10-19T18:46:05.760Z", 1224 + "viewer": { "bookmarked": false, "threadMuted": false, "embeddingDisabled": false }, 1225 + "labels": [] 1226 + } 1227 + }, 1228 + { 1229 + "post": { 1230 + "uri": "at://did:plc:gis7i47wmrv7xhwzew4zvrzf/app.bsky.feed.post/3m3kxiofflk2z", 1231 + "cid": "bafyreibu7gf4mdcsjgukwi5jhgjm63h2ehljwarjv2fei5646dh5yrmtym", 1232 + "author": { 1233 + "did": "did:plc:gis7i47wmrv7xhwzew4zvrzf", 1234 + "handle": "squiddyvicious.bsky.social", 1235 + "displayName": "", 1236 + "avatar": "https://cdn.bsky.app/img/avatar/plain/did:plc:gis7i47wmrv7xhwzew4zvrzf/bafkreiedttifspwetevksi63sn47au5hrqxl6nhjdiyuaxuibkruqn74yq@jpeg", 1237 + "associated": { "activitySubscription": { "allowSubscriptions": "followers" } }, 1238 + "viewer": { "muted": false, "blockedBy": false }, 1239 + "labels": [ 1240 + { 1241 + "cts": "2024-05-15T04:32:37.899Z", 1242 + "src": "did:plc:e4elbtctnfqocyfcml6h2lf7", 1243 + "uri": "did:plc:gis7i47wmrv7xhwzew4zvrzf", 1244 + "val": "bluesky-elder", 1245 + "ver": 1 1246 + } 1247 + ], 1248 + "createdAt": "2023-07-23T22:11:19.437Z" 1249 + }, 1250 + "record": { 1251 + "$type": "app.bsky.feed.post", 1252 + "createdAt": "2025-10-19T18:45:01.503Z", 1253 + "langs": ["en"], 1254 + "reply": { 1255 + "parent": { 1256 + "cid": "bafyreibugjnbg543douuhjp7pff3zdyuqku52mcr7ds46gdt4wuvzuj36i", 1257 + "uri": "at://did:plc:t5nrjitejqgu3c4qxjj7fhva/app.bsky.feed.post/3m3ia5wno322n" 1258 + }, 1259 + "root": { 1260 + "cid": "bafyreiggpwfw4w55c7oe4b62gvp2ymmmpiezzveovjb6ngtdjbyj6enovm", 1261 + "uri": "at://did:plc:t5nrjitejqgu3c4qxjj7fhva/app.bsky.feed.post/3m3i52cj2vc22" 1262 + } 1263 + }, 1264 + "text": "A Malort... enjoyer?\n\nFascinating... I import Malort as our D&D crit fail shot.\n\nGreat cat name though." 1265 + }, 1266 + "bookmarkCount": 0, 1267 + "replyCount": 1, 1268 + "repostCount": 0, 1269 + "likeCount": 1, 1270 + "quoteCount": 0, 1271 + "indexedAt": "2025-10-19T18:45:06.179Z", 1272 + "viewer": { "bookmarked": false, "threadMuted": false, "embeddingDisabled": false }, 1273 + "labels": [] 1274 + }, 1275 + "reply": { 1276 + "root": { 1277 + "uri": "at://did:plc:t5nrjitejqgu3c4qxjj7fhva/app.bsky.feed.post/3m3i52cj2vc22", 1278 + "cid": "bafyreiggpwfw4w55c7oe4b62gvp2ymmmpiezzveovjb6ngtdjbyj6enovm", 1279 + "author": { 1280 + "did": "did:plc:t5nrjitejqgu3c4qxjj7fhva", 1281 + "handle": "sithlet.bsky.social", 1282 + "displayName": "Skeetlet S. Pumpkins", 1283 + "avatar": "https://cdn.bsky.app/img/avatar/plain/did:plc:t5nrjitejqgu3c4qxjj7fhva/bafkreierkgtn464xee2nuiaahkzi5m5hvx55elxmrrhbstlr4yhzrzjbqy@jpeg", 1284 + "associated": { 1285 + "chat": { "allowIncoming": "following" }, 1286 + "activitySubscription": { "allowSubscriptions": "followers" } 1287 + }, 1288 + "viewer": { "muted": false, "blockedBy": false }, 1289 + "labels": [ 1290 + { 1291 + "cts": "2024-05-11T10:29:23.269Z", 1292 + "src": "did:plc:e4elbtctnfqocyfcml6h2lf7", 1293 + "uri": "did:plc:t5nrjitejqgu3c4qxjj7fhva", 1294 + "val": "bluesky-elder", 1295 + "ver": 1 1296 + }, 1297 + { 1298 + "src": "did:plc:t5nrjitejqgu3c4qxjj7fhva", 1299 + "uri": "at://did:plc:t5nrjitejqgu3c4qxjj7fhva/app.bsky.actor.profile/self", 1300 + "cid": "bafyreifsfidieoah7ryweb3vyze76t7iwmfuo6wqdt775hcb5vmxrcxeuy", 1301 + "val": "!no-unauthenticated", 1302 + "cts": "1970-01-01T00:00:00.000Z" 1303 + } 1304 + ], 1305 + "createdAt": "2023-04-26T11:53:08.669Z" 1306 + }, 1307 + "record": { 1308 + "$type": "app.bsky.feed.post", 1309 + "createdAt": "2025-10-18T15:46:22.514Z", 1310 + "langs": ["en"], 1311 + "text": "Malört killed her first mouse in our home! 🤩" 1312 + }, 1313 + "bookmarkCount": 0, 1314 + "replyCount": 4, 1315 + "repostCount": 0, 1316 + "likeCount": 30, 1317 + "quoteCount": 0, 1318 + "indexedAt": "2025-10-18T15:46:22.758Z", 1319 + "viewer": { "bookmarked": false, "threadMuted": false, "embeddingDisabled": false }, 1320 + "labels": [], 1321 + "$type": "app.bsky.feed.defs#postView" 1322 + }, 1323 + "parent": { 1324 + "uri": "at://did:plc:t5nrjitejqgu3c4qxjj7fhva/app.bsky.feed.post/3m3ia5wno322n", 1325 + "cid": "bafyreibugjnbg543douuhjp7pff3zdyuqku52mcr7ds46gdt4wuvzuj36i", 1326 + "author": { 1327 + "did": "did:plc:t5nrjitejqgu3c4qxjj7fhva", 1328 + "handle": "sithlet.bsky.social", 1329 + "displayName": "Skeetlet S. Pumpkins", 1330 + "avatar": "https://cdn.bsky.app/img/avatar/plain/did:plc:t5nrjitejqgu3c4qxjj7fhva/bafkreierkgtn464xee2nuiaahkzi5m5hvx55elxmrrhbstlr4yhzrzjbqy@jpeg", 1331 + "associated": { 1332 + "chat": { "allowIncoming": "following" }, 1333 + "activitySubscription": { "allowSubscriptions": "followers" } 1334 + }, 1335 + "viewer": { "muted": false, "blockedBy": false }, 1336 + "labels": [ 1337 + { 1338 + "cts": "2024-05-11T10:29:23.269Z", 1339 + "src": "did:plc:e4elbtctnfqocyfcml6h2lf7", 1340 + "uri": "did:plc:t5nrjitejqgu3c4qxjj7fhva", 1341 + "val": "bluesky-elder", 1342 + "ver": 1 1343 + }, 1344 + { 1345 + "src": "did:plc:t5nrjitejqgu3c4qxjj7fhva", 1346 + "uri": "at://did:plc:t5nrjitejqgu3c4qxjj7fhva/app.bsky.actor.profile/self", 1347 + "cid": "bafyreifsfidieoah7ryweb3vyze76t7iwmfuo6wqdt775hcb5vmxrcxeuy", 1348 + "val": "!no-unauthenticated", 1349 + "cts": "1970-01-01T00:00:00.000Z" 1350 + } 1351 + ], 1352 + "createdAt": "2023-04-26T11:53:08.669Z" 1353 + }, 1354 + "record": { 1355 + "$type": "app.bsky.feed.post", 1356 + "createdAt": "2025-10-18T16:42:05.524Z", 1357 + "embed": { 1358 + "$type": "app.bsky.embed.external", 1359 + "external": { 1360 + "description": "", 1361 + "title": "Jean Joseph Rolette - Wikipedia", 1362 + "uri": "https://en.wikipedia.org/wiki/Jean_Joseph_Rolette" 1363 + } 1364 + }, 1365 + "langs": ["en"], 1366 + "reply": { 1367 + "parent": { 1368 + "cid": "bafyreicj3dfhc4pwa2e6737awnfig2jiot2kenw3ng3dy72zywifs3j2ca", 1369 + "uri": "at://did:plc:3qb2xwova7nxyb2xeobw5xjw/app.bsky.feed.post/3m3i7zkufk22h" 1370 + }, 1371 + "root": { 1372 + "cid": "bafyreiggpwfw4w55c7oe4b62gvp2ymmmpiezzveovjb6ngtdjbyj6enovm", 1373 + "uri": "at://did:plc:t5nrjitejqgu3c4qxjj7fhva/app.bsky.feed.post/3m3i52cj2vc22" 1374 + } 1375 + }, 1376 + "text": "I did! Numerous people told me that I (a Malört enjoyer) needed to do so, so it just made sense. The other is named after Joe Rolette." 1377 + }, 1378 + "embed": { 1379 + "$type": "app.bsky.embed.external#view", 1380 + "external": { 1381 + "uri": "https://en.wikipedia.org/wiki/Jean_Joseph_Rolette", 1382 + "title": "Jean Joseph Rolette - Wikipedia", 1383 + "description": "" 1384 + } 1385 + }, 1386 + "bookmarkCount": 0, 1387 + "replyCount": 1, 1388 + "repostCount": 0, 1389 + "likeCount": 2, 1390 + "quoteCount": 0, 1391 + "indexedAt": "2025-10-18T16:42:05.854Z", 1392 + "viewer": { "bookmarked": false, "threadMuted": false, "embeddingDisabled": false }, 1393 + "labels": [], 1394 + "$type": "app.bsky.feed.defs#postView" 1395 + }, 1396 + "grandparentAuthor": { 1397 + "did": "did:plc:3qb2xwova7nxyb2xeobw5xjw", 1398 + "handle": "mplsfietser.bike", 1399 + "displayName": "Regina Burstein 🚲 🚈 🌳", 1400 + "avatar": "https://cdn.bsky.app/img/avatar/plain/did:plc:3qb2xwova7nxyb2xeobw5xjw/bafkreidxna5r5syuovht7rj3osbtrxkbuihpr5t526qpjllj2lb7oi44ly@jpeg", 1401 + "associated": { 1402 + "chat": { "allowIncoming": "all" }, 1403 + "activitySubscription": { "allowSubscriptions": "followers" } 1404 + }, 1405 + "viewer": { "muted": false, "blockedBy": false }, 1406 + "labels": [ 1407 + { 1408 + "cts": "2024-05-12T23:49:34.781Z", 1409 + "src": "did:plc:e4elbtctnfqocyfcml6h2lf7", 1410 + "uri": "did:plc:3qb2xwova7nxyb2xeobw5xjw", 1411 + "val": "bluesky-elder", 1412 + "ver": 1 1413 + } 1414 + ], 1415 + "createdAt": "2023-06-26T17:28:31.480Z" 1416 + } 1417 + } 1418 + }, 1419 + { 1420 + "post": { 1421 + "uri": "at://did:plc:zefgd5fnotimx7tb7uc5xxo2/app.bsky.feed.post/3m3kxilgbnc2q", 1422 + "cid": "bafyreiasayz23kyv27vwpd62h3s2wh5qn4znmaswogr2vl475rl4pdi5a4", 1423 + "author": { 1424 + "did": "did:plc:zefgd5fnotimx7tb7uc5xxo2", 1425 + "handle": "basiliskonline.bsky.social", 1426 + "displayName": "BasiliskOnline🦎", 1427 + "avatar": "https://cdn.bsky.app/img/avatar/plain/did:plc:zefgd5fnotimx7tb7uc5xxo2/bafkreie6bxanvtbs2puon3b2e66ruiusf4fnucbgz6osjseia3husjbdki@jpeg", 1428 + "associated": { 1429 + "chat": { "allowIncoming": "all" }, 1430 + "activitySubscription": { "allowSubscriptions": "followers" } 1431 + }, 1432 + "viewer": { "muted": false, "blockedBy": false }, 1433 + "labels": [ 1434 + { 1435 + "cts": "2024-05-18T13:23:25.695Z", 1436 + "src": "did:plc:e4elbtctnfqocyfcml6h2lf7", 1437 + "uri": "did:plc:zefgd5fnotimx7tb7uc5xxo2", 1438 + "val": "bluesky-elder", 1439 + "ver": 1 1440 + } 1441 + ], 1442 + "createdAt": "2023-08-15T02:49:24.372Z" 1443 + }, 1444 + "record": { 1445 + "$type": "app.bsky.feed.post", 1446 + "createdAt": "2025-10-19T18:44:58.385Z", 1447 + "embed": { 1448 + "$type": "app.bsky.embed.external", 1449 + "external": { 1450 + "description": "Session 0 has happened, but it's not too late! Session 1 starts on Oct 20th!\n\nCurrent Group:\n- Cyclops Necromancer\n- Satyr Bard\n- Minotaur Guardian\n- Kraken Swashbuckler\n\nOff the coast of Casmaron lie...", 1451 + "thumb": { 1452 + "$type": "blob", 1453 + "ref": { "$link": "bafkreidglglmadxu7ldxn3ne4gxplqr3qdk47ctxjc7d26dtjesbqc2i5q" }, 1454 + "mimeType": "image/jpeg", 1455 + "size": 996756 1456 + }, 1457 + "title": "Join Epic Greek Myth, Pathfinder Style! [Battlezoo Options] - Discord / Foundry VTT - Pathfinder 2e | StartPlaying Games", 1458 + "uri": "https://startplaying.games/adventure/cme8ukpgh000fjp0432xurzb5" 1459 + } 1460 + }, 1461 + "facets": [ 1462 + { 1463 + "features": [{ "$type": "app.bsky.richtext.facet#tag", "tag": "PF2E" }], 1464 + "index": { "byteEnd": 100, "byteStart": 95 } 1465 + }, 1466 + { 1467 + "features": [{ "$type": "app.bsky.richtext.facet#tag", "tag": "BasSPG" }], 1468 + "index": { "byteEnd": 208, "byteStart": 201 } 1469 + }, 1470 + { 1471 + "features": [ 1472 + { 1473 + "$type": "app.bsky.richtext.facet#link", 1474 + "uri": "https://startplaying.games/adventure/cme8ukpgh000fjp0432xurzb5" 1475 + } 1476 + ], 1477 + "index": { "byteEnd": 244, "byteStart": 210 } 1478 + } 1479 + ], 1480 + "langs": ["en"], 1481 + "text": "Tomorrow is session 1 of Myth-Speaker! Join the game for an epic greek-myth inspired level 1-9 #PF2E adventure alongside our Kraken Swashbuckler, Cyclops Necromancer, Satyr Bard and Minotaur Guardian! #BasSPG\n\nstartplaying.games/adventure/cm..." 1482 + }, 1483 + "embed": { 1484 + "$type": "app.bsky.embed.external#view", 1485 + "external": { 1486 + "uri": "https://startplaying.games/adventure/cme8ukpgh000fjp0432xurzb5", 1487 + "title": "Join Epic Greek Myth, Pathfinder Style! [Battlezoo Options] - Discord / Foundry VTT - Pathfinder 2e | StartPlaying Games", 1488 + "description": "Session 0 has happened, but it's not too late! Session 1 starts on Oct 20th!\n\nCurrent Group:\n- Cyclops Necromancer\n- Satyr Bard\n- Minotaur Guardian\n- Kraken Swashbuckler\n\nOff the coast of Casmaron lie...", 1489 + "thumb": "https://cdn.bsky.app/img/feed_thumbnail/plain/did:plc:zefgd5fnotimx7tb7uc5xxo2/bafkreidglglmadxu7ldxn3ne4gxplqr3qdk47ctxjc7d26dtjesbqc2i5q@jpeg" 1490 + } 1491 + }, 1492 + "bookmarkCount": 0, 1493 + "replyCount": 0, 1494 + "repostCount": 0, 1495 + "likeCount": 1, 1496 + "quoteCount": 0, 1497 + "indexedAt": "2025-10-19T18:45:05.281Z", 1498 + "viewer": { "bookmarked": false, "threadMuted": false, "embeddingDisabled": false }, 1499 + "labels": [] 1500 + } 1501 + } 1502 + ], 1503 + "cursor": "VaHzdjpB4GI8zsoDSMBBIXIbaXsZ-rKTwg4BqWr9PyU+at://did:plc:zefgd5fnotimx7tb7uc5xxo2/app.bsky.feed.post/3m3kxilgbnc2q" 1504 + }, 1505 + { 1506 + "feed": [ 1507 + { 1508 + "post": { 1509 + "uri": "at://did:plc:kkf4naxqmweop7dv4l2iqqf5/app.bsky.feed.post/3lgh27w2ngc2b", 1510 + "cid": "bafyreiewnkkuksaehip672szl2o5lqny4y7zevibplphnd5byyhdy5un4e", 1511 + "author": { 1512 + "did": "did:plc:kkf4naxqmweop7dv4l2iqqf5", 1513 + "handle": "aendra.com", 1514 + "displayName": "ændra.", 1515 + "avatar": "https://cdn.bsky.app/img/avatar/plain/did:plc:kkf4naxqmweop7dv4l2iqqf5/bafkreiaqkfr6ikrkn2hj2tcapzmcxtkc3qo6hqwjvg4kn7r5f2cmbisstu@jpeg", 1516 + "associated": { 1517 + "chat": { "allowIncoming": "all" }, 1518 + "activitySubscription": { "allowSubscriptions": "followers" } 1519 + }, 1520 + "viewer": { 1521 + "muted": false, 1522 + "blockedBy": false, 1523 + "following": "at://did:plc:yfvwmnlztr4dwkb7hwz55r2g/app.bsky.graph.follow/3kzttxufngv2q", 1524 + "followedBy": "at://did:plc:kkf4naxqmweop7dv4l2iqqf5/app.bsky.graph.follow/3kztt3qel2o2w" 1525 + }, 1526 + "labels": [ 1527 + { 1528 + "cts": "2024-06-28T10:59:23.601Z", 1529 + "src": "did:plc:hysbs7znfgxyb4tsvetzo4sk", 1530 + "uri": "did:plc:kkf4naxqmweop7dv4l2iqqf5", 1531 + "val": "barbarian", 1532 + "ver": 1 1533 + }, 1534 + { 1535 + "cts": "2024-05-11T16:24:51.829Z", 1536 + "src": "did:plc:e4elbtctnfqocyfcml6h2lf7", 1537 + "uri": "did:plc:kkf4naxqmweop7dv4l2iqqf5", 1538 + "val": "bluesky-elder", 1539 + "ver": 1 1540 + }, 1541 + { 1542 + "cts": "2024-06-24T10:39:50.308Z", 1543 + "src": "did:plc:aksxl7qy5azlzfm2jstcwqtz", 1544 + "uri": "did:plc:kkf4naxqmweop7dv4l2iqqf5", 1545 + "val": "bouba", 1546 + "ver": 1 1547 + } 1548 + ], 1549 + "createdAt": "2023-05-04T16:59:41.121Z", 1550 + "verification": { 1551 + "verifications": [ 1552 + { 1553 + "issuer": "did:plc:z72i7hdynmk6r22z27h6tvur", 1554 + "uri": "at://did:plc:z72i7hdynmk6r22z27h6tvur/app.bsky.graph.verification/3lndpwsuopu2i", 1555 + "isValid": true, 1556 + "createdAt": "2025-04-21T10:48:24.872Z" 1557 + } 1558 + ], 1559 + "verifiedStatus": "valid", 1560 + "trustedVerifierStatus": "none" 1561 + } 1562 + }, 1563 + "record": { 1564 + "$type": "app.bsky.feed.post", 1565 + "createdAt": "2025-01-23T23:34:05.638Z", 1566 + "langs": ["en"], 1567 + "text": "📌 📰 News feeds • PINNED POST\n(Expand this thread for feed info)" 1568 + }, 1569 + "bookmarkCount": 117, 1570 + "replyCount": 6, 1571 + "repostCount": 514, 1572 + "likeCount": 4696, 1573 + "quoteCount": 3, 1574 + "indexedAt": "2025-01-23T23:34:07.752Z", 1575 + "viewer": { "bookmarked": false, "threadMuted": false, "replyDisabled": true, "embeddingDisabled": true }, 1576 + "labels": [], 1577 + "threadgate": { 1578 + "uri": "at://did:plc:kkf4naxqmweop7dv4l2iqqf5/app.bsky.feed.threadgate/3lgh27w2ngc2b", 1579 + "cid": "bafyreibrlmovly7l5mhe63rig43nbkm4lfgpnnme7rzkuqwnlneiet7xu4", 1580 + "record": { 1581 + "$type": "app.bsky.feed.threadgate", 1582 + "allow": [], 1583 + "createdAt": "2025-01-23T23:34:05.646Z", 1584 + "hiddenReplies": [], 1585 + "post": "at://did:plc:kkf4naxqmweop7dv4l2iqqf5/app.bsky.feed.post/3lgh27w2ngc2b" 1586 + }, 1587 + "lists": [] 1588 + } 1589 + }, 1590 + "feedContext": "eyJmZWVkX3VyaSI6ICJhdDovL2RpZDpwbGM6a2tmNG5heHFtd2VvcDdkdjRsMmlxcWY1L2FwcC5ic2t5LmZlZWQuZ2VuZXJhdG9yL3RyZW5kaW5nLWNhIiwgImF0dHJpYnV0aW9uIjogIm5zMjg1NiJ9", 1591 + "reqId": "2E8A06A91ED54847AFBAB4D76D" 1592 + }, 1593 + { 1594 + "post": { 1595 + "uri": "at://did:plc:y3xrmnwvkvsq4tqcsgwch4na/app.bsky.feed.post/3m3jxkutrdp2w", 1596 + "cid": "bafyreigqv4ykzc3oqtczenliueteksvhmglsakzi43efipgprrazsj2gwq", 1597 + "author": { 1598 + "did": "did:plc:y3xrmnwvkvsq4tqcsgwch4na", 1599 + "handle": "theglobeandmail.com", 1600 + "displayName": "The Globe and Mail", 1601 + "avatar": "https://cdn.bsky.app/img/avatar/plain/did:plc:y3xrmnwvkvsq4tqcsgwch4na/bafkreihfwl5al6ow5unolsp7rv6kqfnu7q25xz5dwinilebdu5t3easkli@jpeg", 1602 + "associated": { "activitySubscription": { "allowSubscriptions": "followers" } }, 1603 + "viewer": { "muted": false, "blockedBy": false }, 1604 + "labels": [ 1605 + { 1606 + "cts": "2024-05-16T01:02:37.916Z", 1607 + "src": "did:plc:e4elbtctnfqocyfcml6h2lf7", 1608 + "uri": "did:plc:y3xrmnwvkvsq4tqcsgwch4na", 1609 + "val": "bluesky-elder", 1610 + "ver": 1 1611 + } 1612 + ], 1613 + "createdAt": "2023-07-25T19:29:58.720Z", 1614 + "verification": { 1615 + "verifications": [ 1616 + { 1617 + "issuer": "did:plc:z72i7hdynmk6r22z27h6tvur", 1618 + "uri": "at://did:plc:z72i7hdynmk6r22z27h6tvur/app.bsky.graph.verification/3lprljpa5qm2u", 1619 + "isValid": true, 1620 + "createdAt": "2025-05-22T16:57:09.440Z" 1621 + } 1622 + ], 1623 + "verifiedStatus": "valid", 1624 + "trustedVerifierStatus": "valid" 1625 + } 1626 + }, 1627 + "record": { 1628 + "$type": "app.bsky.feed.post", 1629 + "createdAt": "2025-10-19T09:13:34Z", 1630 + "embed": { 1631 + "$type": "app.bsky.embed.external", 1632 + "external": { 1633 + "description": "U.S. President’s success in negotiating the release of the hostages has won him heroic status", 1634 + "thumb": { 1635 + "$type": "blob", 1636 + "ref": { "$link": "bafkreigjvc53fms36u2igiw52w5jef7snl5fsbefdp7mkia5m2krh2jdhq" }, 1637 + "mimeType": "image/jpeg", 1638 + "size": 144400 1639 + }, 1640 + "title": "Will Trump’s popularity in Israel ensure the peace process isn’t abandoned?", 1641 + "uri": "https://www.theglobeandmail.com/world/article-donald-trump-israel-popularity-ceasefire-deal/?utm_source=dlvr.it&utm_medium=bluesky" 1642 + } 1643 + }, 1644 + "text": "" 1645 + }, 1646 + "embed": { 1647 + "$type": "app.bsky.embed.external#view", 1648 + "external": { 1649 + "uri": "https://www.theglobeandmail.com/world/article-donald-trump-israel-popularity-ceasefire-deal/?utm_source=dlvr.it&utm_medium=bluesky", 1650 + "title": "Will Trump’s popularity in Israel ensure the peace process isn’t abandoned?", 1651 + "description": "U.S. President’s success in negotiating the release of the hostages has won him heroic status", 1652 + "thumb": "https://cdn.bsky.app/img/feed_thumbnail/plain/did:plc:y3xrmnwvkvsq4tqcsgwch4na/bafkreigjvc53fms36u2igiw52w5jef7snl5fsbefdp7mkia5m2krh2jdhq@jpeg" 1653 + } 1654 + }, 1655 + "bookmarkCount": 0, 1656 + "replyCount": 55, 1657 + "repostCount": 1, 1658 + "likeCount": 2, 1659 + "quoteCount": 1, 1660 + "indexedAt": "2025-10-19T09:13:36.857Z", 1661 + "viewer": { "bookmarked": false, "threadMuted": false, "embeddingDisabled": false }, 1662 + "labels": [] 1663 + }, 1664 + "feedContext": "eyJmZWVkX3VyaSI6ICJhdDovL2RpZDpwbGM6a2tmNG5heHFtd2VvcDdkdjRsMmlxcWY1L2FwcC5ic2t5LmZlZWQuZ2VuZXJhdG9yL3RyZW5kaW5nLWNhIn0=", 1665 + "reqId": "2E8A06A91ED54847AFBAB4D76D" 1666 + }, 1667 + { 1668 + "post": { 1669 + "uri": "at://did:plc:y3xrmnwvkvsq4tqcsgwch4na/app.bsky.feed.post/3m3kenczmrw2t", 1670 + "cid": "bafyreias32pz2niic6tcoymeypl7l3x5xdfiezz36ldweannm6tfjdce34", 1671 + "author": { 1672 + "did": "did:plc:y3xrmnwvkvsq4tqcsgwch4na", 1673 + "handle": "theglobeandmail.com", 1674 + "displayName": "The Globe and Mail", 1675 + "avatar": "https://cdn.bsky.app/img/avatar/plain/did:plc:y3xrmnwvkvsq4tqcsgwch4na/bafkreihfwl5al6ow5unolsp7rv6kqfnu7q25xz5dwinilebdu5t3easkli@jpeg", 1676 + "associated": { "activitySubscription": { "allowSubscriptions": "followers" } }, 1677 + "viewer": { "muted": false, "blockedBy": false }, 1678 + "labels": [ 1679 + { 1680 + "cts": "2024-05-16T01:02:37.916Z", 1681 + "src": "did:plc:e4elbtctnfqocyfcml6h2lf7", 1682 + "uri": "did:plc:y3xrmnwvkvsq4tqcsgwch4na", 1683 + "val": "bluesky-elder", 1684 + "ver": 1 1685 + } 1686 + ], 1687 + "createdAt": "2023-07-25T19:29:58.720Z", 1688 + "verification": { 1689 + "verifications": [ 1690 + { 1691 + "issuer": "did:plc:z72i7hdynmk6r22z27h6tvur", 1692 + "uri": "at://did:plc:z72i7hdynmk6r22z27h6tvur/app.bsky.graph.verification/3lprljpa5qm2u", 1693 + "isValid": true, 1694 + "createdAt": "2025-05-22T16:57:09.440Z" 1695 + } 1696 + ], 1697 + "verifiedStatus": "valid", 1698 + "trustedVerifierStatus": "valid" 1699 + } 1700 + }, 1701 + "record": { 1702 + "$type": "app.bsky.feed.post", 1703 + "createdAt": "2025-10-19T13:07:36Z", 1704 + "embed": { 1705 + "$type": "app.bsky.embed.external", 1706 + "external": { 1707 + "description": "Plus, these provinces are boycotting U.S. travel the hardest", 1708 + "thumb": { 1709 + "$type": "blob", 1710 + "ref": { "$link": "bafkreidalicfsk3l5x32x4sj73awnbk7u4xxyig26caax4i5tj2hfsir3i" }, 1711 + "mimeType": "image/jpeg", 1712 + "size": 234530 1713 + }, 1714 + "title": "Stellantis shifts to Illinois, trade talks resume and keeping Canadian data out of the U.S.: Must-read business and investing stories", 1715 + "uri": "https://www.theglobeandmail.com/business/article-stellantis-canada-us-trade-data-centres-sovereignty-october-19/?utm_source=dlvr.it&utm_medium=bluesky" 1716 + } 1717 + }, 1718 + "text": "" 1719 + }, 1720 + "embed": { 1721 + "$type": "app.bsky.embed.external#view", 1722 + "external": { 1723 + "uri": "https://www.theglobeandmail.com/business/article-stellantis-canada-us-trade-data-centres-sovereignty-october-19/?utm_source=dlvr.it&utm_medium=bluesky", 1724 + "title": "Stellantis shifts to Illinois, trade talks resume and keeping Canadian data out of the U.S.: Must-read business and investing stories", 1725 + "description": "Plus, these provinces are boycotting U.S. travel the hardest", 1726 + "thumb": "https://cdn.bsky.app/img/feed_thumbnail/plain/did:plc:y3xrmnwvkvsq4tqcsgwch4na/bafkreidalicfsk3l5x32x4sj73awnbk7u4xxyig26caax4i5tj2hfsir3i@jpeg" 1727 + } 1728 + }, 1729 + "bookmarkCount": 1, 1730 + "replyCount": 41, 1731 + "repostCount": 1, 1732 + "likeCount": 7, 1733 + "quoteCount": 0, 1734 + "indexedAt": "2025-10-19T13:07:36.359Z", 1735 + "viewer": { "bookmarked": false, "threadMuted": false, "embeddingDisabled": false }, 1736 + "labels": [] 1737 + }, 1738 + "feedContext": "eyJmZWVkX3VyaSI6ICJhdDovL2RpZDpwbGM6a2tmNG5heHFtd2VvcDdkdjRsMmlxcWY1L2FwcC5ic2t5LmZlZWQuZ2VuZXJhdG9yL3RyZW5kaW5nLWNhIn0=", 1739 + "reqId": "2E8A06A91ED54847AFBAB4D76D" 1740 + }, 1741 + { 1742 + "post": { 1743 + "uri": "at://did:plc:y3xrmnwvkvsq4tqcsgwch4na/app.bsky.feed.post/3m3k53uf44u2a", 1744 + "cid": "bafyreigva37xugl5c2uqrbx6n3o5hchdsvrwtcutw6rvnrvg5fhkf42j4q", 1745 + "author": { 1746 + "did": "did:plc:y3xrmnwvkvsq4tqcsgwch4na", 1747 + "handle": "theglobeandmail.com", 1748 + "displayName": "The Globe and Mail", 1749 + "avatar": "https://cdn.bsky.app/img/avatar/plain/did:plc:y3xrmnwvkvsq4tqcsgwch4na/bafkreihfwl5al6ow5unolsp7rv6kqfnu7q25xz5dwinilebdu5t3easkli@jpeg", 1750 + "associated": { "activitySubscription": { "allowSubscriptions": "followers" } }, 1751 + "viewer": { "muted": false, "blockedBy": false }, 1752 + "labels": [ 1753 + { 1754 + "cts": "2024-05-16T01:02:37.916Z", 1755 + "src": "did:plc:e4elbtctnfqocyfcml6h2lf7", 1756 + "uri": "did:plc:y3xrmnwvkvsq4tqcsgwch4na", 1757 + "val": "bluesky-elder", 1758 + "ver": 1 1759 + } 1760 + ], 1761 + "createdAt": "2023-07-25T19:29:58.720Z", 1762 + "verification": { 1763 + "verifications": [ 1764 + { 1765 + "issuer": "did:plc:z72i7hdynmk6r22z27h6tvur", 1766 + "uri": "at://did:plc:z72i7hdynmk6r22z27h6tvur/app.bsky.graph.verification/3lprljpa5qm2u", 1767 + "isValid": true, 1768 + "createdAt": "2025-05-22T16:57:09.440Z" 1769 + } 1770 + ], 1771 + "verifiedStatus": "valid", 1772 + "trustedVerifierStatus": "valid" 1773 + } 1774 + }, 1775 + "record": { 1776 + "$type": "app.bsky.feed.post", 1777 + "createdAt": "2025-10-19T10:52:34Z", 1778 + "embed": { 1779 + "$type": "app.bsky.embed.external", 1780 + "external": { 1781 + "description": "A centralized, digital system would give parents and health care professionals the information needed to keep immunization records up to date for kids", 1782 + "thumb": { 1783 + "$type": "blob", 1784 + "ref": { "$link": "bafkreiahqwnrjn5kwfowit6p247ndnl3nkdtancd65hbe2nxkzy562z7aa" }, 1785 + "mimeType": "image/jpeg", 1786 + "size": 113939 1787 + }, 1788 + "title": "An injection of innovation for children’s vaccination", 1789 + "uri": "https://www.theglobeandmail.com/opinion/editorials/article-canada-central-vaccination-system-digital-immunization-yellow-card/?utm_source=dlvr.it&utm_medium=bluesky" 1790 + } 1791 + }, 1792 + "text": "" 1793 + }, 1794 + "embed": { 1795 + "$type": "app.bsky.embed.external#view", 1796 + "external": { 1797 + "uri": "https://www.theglobeandmail.com/opinion/editorials/article-canada-central-vaccination-system-digital-immunization-yellow-card/?utm_source=dlvr.it&utm_medium=bluesky", 1798 + "title": "An injection of innovation for children’s vaccination", 1799 + "description": "A centralized, digital system would give parents and health care professionals the information needed to keep immunization records up to date for kids", 1800 + "thumb": "https://cdn.bsky.app/img/feed_thumbnail/plain/did:plc:y3xrmnwvkvsq4tqcsgwch4na/bafkreiahqwnrjn5kwfowit6p247ndnl3nkdtancd65hbe2nxkzy562z7aa@jpeg" 1801 + } 1802 + }, 1803 + "bookmarkCount": 0, 1804 + "replyCount": 31, 1805 + "repostCount": 4, 1806 + "likeCount": 8, 1807 + "quoteCount": 2, 1808 + "indexedAt": "2025-10-19T10:52:34.655Z", 1809 + "viewer": { "bookmarked": false, "threadMuted": false, "embeddingDisabled": false }, 1810 + "labels": [] 1811 + }, 1812 + "feedContext": "eyJmZWVkX3VyaSI6ICJhdDovL2RpZDpwbGM6a2tmNG5heHFtd2VvcDdkdjRsMmlxcWY1L2FwcC5ic2t5LmZlZWQuZ2VuZXJhdG9yL3RyZW5kaW5nLWNhIn0=", 1813 + "reqId": "2E8A06A91ED54847AFBAB4D76D" 1814 + }, 1815 + { 1816 + "post": { 1817 + "uri": "at://did:plc:y3xrmnwvkvsq4tqcsgwch4na/app.bsky.feed.post/3m3kvindfdx2g", 1818 + "cid": "bafyreigog7xdq3zy2wyhqlveedizf3pij2hasmuki2zuo2eqegrpaeoexm", 1819 + "author": { 1820 + "did": "did:plc:y3xrmnwvkvsq4tqcsgwch4na", 1821 + "handle": "theglobeandmail.com", 1822 + "displayName": "The Globe and Mail", 1823 + "avatar": "https://cdn.bsky.app/img/avatar/plain/did:plc:y3xrmnwvkvsq4tqcsgwch4na/bafkreihfwl5al6ow5unolsp7rv6kqfnu7q25xz5dwinilebdu5t3easkli@jpeg", 1824 + "associated": { "activitySubscription": { "allowSubscriptions": "followers" } }, 1825 + "viewer": { "muted": false, "blockedBy": false }, 1826 + "labels": [ 1827 + { 1828 + "cts": "2024-05-16T01:02:37.916Z", 1829 + "src": "did:plc:e4elbtctnfqocyfcml6h2lf7", 1830 + "uri": "did:plc:y3xrmnwvkvsq4tqcsgwch4na", 1831 + "val": "bluesky-elder", 1832 + "ver": 1 1833 + } 1834 + ], 1835 + "createdAt": "2023-07-25T19:29:58.720Z", 1836 + "verification": { 1837 + "verifications": [ 1838 + { 1839 + "issuer": "did:plc:z72i7hdynmk6r22z27h6tvur", 1840 + "uri": "at://did:plc:z72i7hdynmk6r22z27h6tvur/app.bsky.graph.verification/3lprljpa5qm2u", 1841 + "isValid": true, 1842 + "createdAt": "2025-05-22T16:57:09.440Z" 1843 + } 1844 + ], 1845 + "verifiedStatus": "valid", 1846 + "trustedVerifierStatus": "valid" 1847 + } 1848 + }, 1849 + "record": { 1850 + "$type": "app.bsky.feed.post", 1851 + "createdAt": "2025-10-19T18:09:12Z", 1852 + "embed": { 1853 + "$type": "app.bsky.embed.external", 1854 + "external": { 1855 + "description": "A retirement plan can hinge on the TSX’s returns, but Canadians are being shortchanged, both by themselves and by the industry", 1856 + "thumb": { 1857 + "$type": "blob", 1858 + "ref": { "$link": "bafkreiazyvitb6b6lnq7bjbmdjivkrpw4jxcvacdp2ocj7smfoyh6ucyre" }, 1859 + "mimeType": "image/jpeg", 1860 + "size": 216057 1861 + }, 1862 + "title": "The TSX is having a great year. Are you?", 1863 + "uri": "https://www.theglobeandmail.com/investing/markets/inside-the-market/article-tsx-boom-retirement-returns-financial-planning/?utm_source=dlvr.it&utm_medium=bluesky" 1864 + } 1865 + }, 1866 + "text": "" 1867 + }, 1868 + "embed": { 1869 + "$type": "app.bsky.embed.external#view", 1870 + "external": { 1871 + "uri": "https://www.theglobeandmail.com/investing/markets/inside-the-market/article-tsx-boom-retirement-returns-financial-planning/?utm_source=dlvr.it&utm_medium=bluesky", 1872 + "title": "The TSX is having a great year. Are you?", 1873 + "description": "A retirement plan can hinge on the TSX’s returns, but Canadians are being shortchanged, both by themselves and by the industry", 1874 + "thumb": "https://cdn.bsky.app/img/feed_thumbnail/plain/did:plc:y3xrmnwvkvsq4tqcsgwch4na/bafkreiazyvitb6b6lnq7bjbmdjivkrpw4jxcvacdp2ocj7smfoyh6ucyre@jpeg" 1875 + } 1876 + }, 1877 + "bookmarkCount": 1, 1878 + "replyCount": 22, 1879 + "repostCount": 1, 1880 + "likeCount": 6, 1881 + "quoteCount": 0, 1882 + "indexedAt": "2025-10-19T18:09:13.363Z", 1883 + "viewer": { "bookmarked": false, "threadMuted": false, "embeddingDisabled": false }, 1884 + "labels": [] 1885 + }, 1886 + "feedContext": "eyJmZWVkX3VyaSI6ICJhdDovL2RpZDpwbGM6a2tmNG5heHFtd2VvcDdkdjRsMmlxcWY1L2FwcC5ic2t5LmZlZWQuZ2VuZXJhdG9yL3RyZW5kaW5nLWNhIn0=", 1887 + "reqId": "2E8A06A91ED54847AFBAB4D76D" 1888 + }, 1889 + { 1890 + "post": { 1891 + "uri": "at://did:plc:y3xrmnwvkvsq4tqcsgwch4na/app.bsky.feed.post/3m3iuugsgdt2p", 1892 + "cid": "bafyreia3aeacm3g4wjtcvtww6qt5pm5zco4o4xzyo6vywggdjmb5smfrs4", 1893 + "author": { 1894 + "did": "did:plc:y3xrmnwvkvsq4tqcsgwch4na", 1895 + "handle": "theglobeandmail.com", 1896 + "displayName": "The Globe and Mail", 1897 + "avatar": "https://cdn.bsky.app/img/avatar/plain/did:plc:y3xrmnwvkvsq4tqcsgwch4na/bafkreihfwl5al6ow5unolsp7rv6kqfnu7q25xz5dwinilebdu5t3easkli@jpeg", 1898 + "associated": { "activitySubscription": { "allowSubscriptions": "followers" } }, 1899 + "viewer": { "muted": false, "blockedBy": false }, 1900 + "labels": [ 1901 + { 1902 + "cts": "2024-05-16T01:02:37.916Z", 1903 + "src": "did:plc:e4elbtctnfqocyfcml6h2lf7", 1904 + "uri": "did:plc:y3xrmnwvkvsq4tqcsgwch4na", 1905 + "val": "bluesky-elder", 1906 + "ver": 1 1907 + } 1908 + ], 1909 + "createdAt": "2023-07-25T19:29:58.720Z", 1910 + "verification": { 1911 + "verifications": [ 1912 + { 1913 + "issuer": "did:plc:z72i7hdynmk6r22z27h6tvur", 1914 + "uri": "at://did:plc:z72i7hdynmk6r22z27h6tvur/app.bsky.graph.verification/3lprljpa5qm2u", 1915 + "isValid": true, 1916 + "createdAt": "2025-05-22T16:57:09.440Z" 1917 + } 1918 + ], 1919 + "verifiedStatus": "valid", 1920 + "trustedVerifierStatus": "valid" 1921 + } 1922 + }, 1923 + "record": { 1924 + "$type": "app.bsky.feed.post", 1925 + "createdAt": "2025-10-18T22:52:35Z", 1926 + "embed": { 1927 + "$type": "app.bsky.embed.external", 1928 + "external": { 1929 + "description": "Flagship Washington protest is one of more than 2,500 planned national demonstrations", 1930 + "thumb": { 1931 + "$type": "blob", 1932 + "ref": { "$link": "bafkreigkhfj5pp2i32kfinvm4ivhfmpxrwukprtgagbtkdqbp2a6irmkaq" }, 1933 + "mimeType": "image/jpeg", 1934 + "size": 290038 1935 + }, 1936 + "title": "Crowds rally against Trump at No Kings protests across the U.S.", 1937 + "uri": "https://www.theglobeandmail.com/world/us-politics/article-crowds-rally-against-trump-at-no-kings-protests-across-the-us/?utm_source=dlvr.it&utm_medium=bluesky" 1938 + } 1939 + }, 1940 + "text": "" 1941 + }, 1942 + "embed": { 1943 + "$type": "app.bsky.embed.external#view", 1944 + "external": { 1945 + "uri": "https://www.theglobeandmail.com/world/us-politics/article-crowds-rally-against-trump-at-no-kings-protests-across-the-us/?utm_source=dlvr.it&utm_medium=bluesky", 1946 + "title": "Crowds rally against Trump at No Kings protests across the U.S.", 1947 + "description": "Flagship Washington protest is one of more than 2,500 planned national demonstrations", 1948 + "thumb": "https://cdn.bsky.app/img/feed_thumbnail/plain/did:plc:y3xrmnwvkvsq4tqcsgwch4na/bafkreigkhfj5pp2i32kfinvm4ivhfmpxrwukprtgagbtkdqbp2a6irmkaq@jpeg" 1949 + } 1950 + }, 1951 + "bookmarkCount": 0, 1952 + "replyCount": 28, 1953 + "repostCount": 15, 1954 + "likeCount": 87, 1955 + "quoteCount": 5, 1956 + "indexedAt": "2025-10-18T22:52:35.959Z", 1957 + "viewer": { "bookmarked": false, "threadMuted": false, "embeddingDisabled": false }, 1958 + "labels": [] 1959 + }, 1960 + "feedContext": "eyJmZWVkX3VyaSI6ICJhdDovL2RpZDpwbGM6a2tmNG5heHFtd2VvcDdkdjRsMmlxcWY1L2FwcC5ic2t5LmZlZWQuZ2VuZXJhdG9yL3RyZW5kaW5nLWNhIn0=", 1961 + "reqId": "2E8A06A91ED54847AFBAB4D76D" 1962 + }, 1963 + { 1964 + "post": { 1965 + "uri": "at://did:plc:b3nlsopwvdn246ccpxctzsw4/app.bsky.feed.post/3m3kcrc5mze2k", 1966 + "cid": "bafyreice7zqceao54oq45uk7lqydcbwfnzirs6xgfjuqkcr7e75ecyx3hi", 1967 + "author": { 1968 + "did": "did:plc:b3nlsopwvdn246ccpxctzsw4", 1969 + "handle": "hilltimes.com", 1970 + "displayName": "The Hill Times", 1971 + "avatar": "https://cdn.bsky.app/img/avatar/plain/did:plc:b3nlsopwvdn246ccpxctzsw4/bafkreibj63qsyrjvxfnkkqzdb54guapmnlibsmvm3jolwlwibwbp3od76e@jpeg", 1972 + "associated": { "activitySubscription": { "allowSubscriptions": "followers" } }, 1973 + "viewer": { "muted": false, "blockedBy": false }, 1974 + "labels": [], 1975 + "createdAt": "2024-11-11T20:01:46.104Z", 1976 + "verification": { 1977 + "verifications": [ 1978 + { 1979 + "issuer": "did:plc:z72i7hdynmk6r22z27h6tvur", 1980 + "uri": "at://did:plc:z72i7hdynmk6r22z27h6tvur/app.bsky.graph.verification/3lvribbobqk2c", 1981 + "isValid": true, 1982 + "createdAt": "2025-08-07T00:29:55.252Z" 1983 + } 1984 + ], 1985 + "verifiedStatus": "valid", 1986 + "trustedVerifierStatus": "none" 1987 + } 1988 + }, 1989 + "record": { 1990 + "$type": "app.bsky.feed.post", 1991 + "createdAt": "2025-10-19T12:34:00.714Z", 1992 + "embed": { 1993 + "$type": "app.bsky.embed.external", 1994 + "external": { 1995 + "description": "U.S. President Donald Trump has interfered in both Brazilian and Argentine politics, and the U.S. Navy continues its strikes off Venezuela’s coast in a humiliating show of disregard for the country.", 1996 + "thumb": { 1997 + "$type": "blob", 1998 + "ref": { "$link": "bafkreibm7kzeahtp7tahxkt45myzmvafu4vd3l2q4din4xvihjypp2fxti" }, 1999 + "mimeType": "image/jpeg", 2000 + "size": 77680 2001 + }, 2002 + "title": "American contempt for Latin America on full display", 2003 + "uri": "https://www.hilltimes.com/story/2025/10/16/american-contempt-for-latin-america-on-full-display/477517/" 2004 + } 2005 + }, 2006 + "facets": [ 2007 + { 2008 + "features": [ 2009 + { 2010 + "$type": "app.bsky.richtext.facet#link", 2011 + "uri": "https://www.hilltimes.com/story/2025/10/16/american-contempt-for-latin-america-on-full-display/477517/" 2012 + } 2013 + ], 2014 + "index": { "byteEnd": 227, "byteStart": 194 } 2015 + } 2016 + ], 2017 + "text": "Gwynne Dyer: Trump has interfered in both Brazilian and Argentine politics, and the U.S. Navy continues its strikes off Venezuela’s coast in a humiliating show of disregard for the country. \n\nwww.hilltimes.com/story/2025/1..." 2018 + }, 2019 + "embed": { 2020 + "$type": "app.bsky.embed.external#view", 2021 + "external": { 2022 + "uri": "https://www.hilltimes.com/story/2025/10/16/american-contempt-for-latin-america-on-full-display/477517/", 2023 + "title": "American contempt for Latin America on full display", 2024 + "description": "U.S. President Donald Trump has interfered in both Brazilian and Argentine politics, and the U.S. Navy continues its strikes off Venezuela’s coast in a humiliating show of disregard for the country.", 2025 + "thumb": "https://cdn.bsky.app/img/feed_thumbnail/plain/did:plc:b3nlsopwvdn246ccpxctzsw4/bafkreibm7kzeahtp7tahxkt45myzmvafu4vd3l2q4din4xvihjypp2fxti@jpeg" 2026 + } 2027 + }, 2028 + "bookmarkCount": 0, 2029 + "replyCount": 6, 2030 + "repostCount": 16, 2031 + "likeCount": 19, 2032 + "quoteCount": 1, 2033 + "indexedAt": "2025-10-19T12:34:03.759Z", 2034 + "viewer": { "bookmarked": false, "threadMuted": false, "embeddingDisabled": false }, 2035 + "labels": [] 2036 + }, 2037 + "feedContext": "eyJmZWVkX3VyaSI6ICJhdDovL2RpZDpwbGM6a2tmNG5heHFtd2VvcDdkdjRsMmlxcWY1L2FwcC5ic2t5LmZlZWQuZ2VuZXJhdG9yL3RyZW5kaW5nLWNhIn0=", 2038 + "reqId": "2E8A06A91ED54847AFBAB4D76D" 2039 + }, 2040 + { 2041 + "post": { 2042 + "uri": "at://did:plc:ormie3tjweyhnqckjlzowoxg/app.bsky.feed.post/3m3g2ujylvs2r", 2043 + "cid": "bafyreidnj3e7ibjmpok7jwdckvprgqyaloasugngimpezdarlj6dfb4dua", 2044 + "author": { 2045 + "did": "did:plc:ormie3tjweyhnqckjlzowoxg", 2046 + "handle": "thetyee.ca", 2047 + "displayName": "The Tyee", 2048 + "avatar": "https://cdn.bsky.app/img/avatar/plain/did:plc:ormie3tjweyhnqckjlzowoxg/bafkreigbd6ofsimcpmbxc57ymrdca7g5inkc73uqhk4xlaoxh3ezmxuuqu@jpeg", 2049 + "associated": { 2050 + "chat": { "allowIncoming": "following" }, 2051 + "activitySubscription": { "allowSubscriptions": "followers" } 2052 + }, 2053 + "viewer": { "muted": false, "blockedBy": false }, 2054 + "labels": [], 2055 + "createdAt": "2024-02-06T17:28:31.293Z", 2056 + "verification": { 2057 + "verifications": [ 2058 + { 2059 + "issuer": "did:plc:z72i7hdynmk6r22z27h6tvur", 2060 + "uri": "at://did:plc:z72i7hdynmk6r22z27h6tvur/app.bsky.graph.verification/3lv7bid3zw42j", 2061 + "isValid": true, 2062 + "createdAt": "2025-07-30T18:40:40.131Z" 2063 + } 2064 + ], 2065 + "verifiedStatus": "valid", 2066 + "trustedVerifierStatus": "none" 2067 + } 2068 + }, 2069 + "record": { 2070 + "$type": "app.bsky.feed.post", 2071 + "createdAt": "2025-10-17T20:02:02.076Z", 2072 + "embed": { 2073 + "$type": "app.bsky.embed.external", 2074 + "external": { 2075 + "description": "Indigenous land defenders found guilty of criminal contempt may receive shorter sentences due to ‘extremely serious,’ ‘racist’ conduct.", 2076 + "thumb": { 2077 + "$type": "blob", 2078 + "ref": { "$link": "bafkreigznlaekhpzg3reglpbevwc75yukxzv5yvzrsckhs6eyiczqmx7e4" }, 2079 + "mimeType": "image/jpeg", 2080 + "size": 985580 2081 + }, 2082 + "title": "RCMP Violated Charter Rights During CGL Arrests, Court Finds | The Tyee", 2083 + "uri": "https://thetyee.ca/News/2025/02/19/RCMP-Violated-Charter-Rights-CGL-Arrests/?utm_source=bluesky&utm_medium=social&utm_campaign=editorial" 2084 + } 2085 + }, 2086 + "facets": [ 2087 + { 2088 + "features": [{ "$type": "app.bsky.richtext.facet#tag", "tag": "BREAKING" }], 2089 + "index": { "byteEnd": 9, "byteStart": 0 } 2090 + }, 2091 + { 2092 + "features": [{ "$type": "app.bsky.richtext.facet#tag", "tag": "CoastalGasLink" }], 2093 + "index": { "byteEnd": 228, "byteStart": 213 } 2094 + }, 2095 + { 2096 + "$type": "app.bsky.richtext.facet", 2097 + "features": [{ "$type": "app.bsky.richtext.facet#mention", "did": "did:plc:ormie3tjweyhnqckjlzowoxg" }], 2098 + "index": { "byteEnd": 276, "byteStart": 265 } 2099 + }, 2100 + { 2101 + "features": [{ "$type": "app.bsky.richtext.facet#tag", "tag": "bcpoli" }], 2102 + "index": { "byteEnd": 285, "byteStart": 278 } 2103 + } 2104 + ], 2105 + "langs": ["en"], 2106 + "text": "#BREAKING: Sleydo' Molly Wickham, Shaylynn Sampson and Corey Jocko will not serve prison time after a BC Supreme Court judge handed them a suspended sentence in Smithers court today for their role in opposing the #CoastalGasLink pipeline conflict.\n\nMore to come in @thetyee.ca. #bcpoli" 2107 + }, 2108 + "embed": { 2109 + "$type": "app.bsky.embed.external#view", 2110 + "external": { 2111 + "uri": "https://thetyee.ca/News/2025/02/19/RCMP-Violated-Charter-Rights-CGL-Arrests/?utm_source=bluesky&utm_medium=social&utm_campaign=editorial", 2112 + "title": "RCMP Violated Charter Rights During CGL Arrests, Court Finds | The Tyee", 2113 + "description": "Indigenous land defenders found guilty of criminal contempt may receive shorter sentences due to ‘extremely serious,’ ‘racist’ conduct.", 2114 + "thumb": "https://cdn.bsky.app/img/feed_thumbnail/plain/did:plc:ormie3tjweyhnqckjlzowoxg/bafkreigznlaekhpzg3reglpbevwc75yukxzv5yvzrsckhs6eyiczqmx7e4@jpeg" 2115 + } 2116 + }, 2117 + "bookmarkCount": 1, 2118 + "replyCount": 4, 2119 + "repostCount": 70, 2120 + "likeCount": 159, 2121 + "quoteCount": 6, 2122 + "indexedAt": "2025-10-17T20:02:07.662Z", 2123 + "viewer": { "bookmarked": false, "threadMuted": false, "embeddingDisabled": false }, 2124 + "labels": [] 2125 + }, 2126 + "feedContext": "eyJmZWVkX3VyaSI6ICJhdDovL2RpZDpwbGM6a2tmNG5heHFtd2VvcDdkdjRsMmlxcWY1L2FwcC5ic2t5LmZlZWQuZ2VuZXJhdG9yL3RyZW5kaW5nLWNhIn0=", 2127 + "reqId": "2E8A06A91ED54847AFBAB4D76D" 2128 + }, 2129 + { 2130 + "post": { 2131 + "uri": "at://did:plc:y3xrmnwvkvsq4tqcsgwch4na/app.bsky.feed.post/3m3igk244fz2t", 2132 + "cid": "bafyreia7c773ubhqfiejywqtgujtqgiwbu7qojou5jc5pqh2ejadcesdjq", 2133 + "author": { 2134 + "did": "did:plc:y3xrmnwvkvsq4tqcsgwch4na", 2135 + "handle": "theglobeandmail.com", 2136 + "displayName": "The Globe and Mail", 2137 + "avatar": "https://cdn.bsky.app/img/avatar/plain/did:plc:y3xrmnwvkvsq4tqcsgwch4na/bafkreihfwl5al6ow5unolsp7rv6kqfnu7q25xz5dwinilebdu5t3easkli@jpeg", 2138 + "associated": { "activitySubscription": { "allowSubscriptions": "followers" } }, 2139 + "viewer": { "muted": false, "blockedBy": false }, 2140 + "labels": [ 2141 + { 2142 + "cts": "2024-05-16T01:02:37.916Z", 2143 + "src": "did:plc:e4elbtctnfqocyfcml6h2lf7", 2144 + "uri": "did:plc:y3xrmnwvkvsq4tqcsgwch4na", 2145 + "val": "bluesky-elder", 2146 + "ver": 1 2147 + } 2148 + ], 2149 + "createdAt": "2023-07-25T19:29:58.720Z", 2150 + "verification": { 2151 + "verifications": [ 2152 + { 2153 + "issuer": "did:plc:z72i7hdynmk6r22z27h6tvur", 2154 + "uri": "at://did:plc:z72i7hdynmk6r22z27h6tvur/app.bsky.graph.verification/3lprljpa5qm2u", 2155 + "isValid": true, 2156 + "createdAt": "2025-05-22T16:57:09.440Z" 2157 + } 2158 + ], 2159 + "verifiedStatus": "valid", 2160 + "trustedVerifierStatus": "valid" 2161 + } 2162 + }, 2163 + "record": { 2164 + "$type": "app.bsky.feed.post", 2165 + "createdAt": "2025-10-18T18:36:13Z", 2166 + "embed": { 2167 + "$type": "app.bsky.embed.external", 2168 + "external": { 2169 + "description": "Carney said Friday he would act on a 2024 warrant issued for Netanyahu by the International Criminal Court", 2170 + "thumb": { 2171 + "$type": "blob", 2172 + "ref": { "$link": "bafkreiciys26js3qgf32ia5dxgpix7helq67rk34sa2rwu4yjervqyjaym" }, 2173 + "mimeType": "image/jpeg", 2174 + "size": 51256 2175 + }, 2176 + "title": "Netanyahu adviser says Carney should reconsider willingness to arrest Israeli PM if he travelled to Canada", 2177 + "uri": "https://www.theglobeandmail.com/world/article-netanyahu-carney-icc-warrant-israel-gaza/?utm_source=dlvr.it&utm_medium=bluesky" 2178 + } 2179 + }, 2180 + "text": "" 2181 + }, 2182 + "embed": { 2183 + "$type": "app.bsky.embed.external#view", 2184 + "external": { 2185 + "uri": "https://www.theglobeandmail.com/world/article-netanyahu-carney-icc-warrant-israel-gaza/?utm_source=dlvr.it&utm_medium=bluesky", 2186 + "title": "Netanyahu adviser says Carney should reconsider willingness to arrest Israeli PM if he travelled to Canada", 2187 + "description": "Carney said Friday he would act on a 2024 warrant issued for Netanyahu by the International Criminal Court", 2188 + "thumb": "https://cdn.bsky.app/img/feed_thumbnail/plain/did:plc:y3xrmnwvkvsq4tqcsgwch4na/bafkreiciys26js3qgf32ia5dxgpix7helq67rk34sa2rwu4yjervqyjaym@jpeg" 2189 + } 2190 + }, 2191 + "bookmarkCount": 1, 2192 + "replyCount": 16, 2193 + "repostCount": 7, 2194 + "likeCount": 26, 2195 + "quoteCount": 5, 2196 + "indexedAt": "2025-10-18T18:36:14.660Z", 2197 + "viewer": { "bookmarked": false, "threadMuted": false, "embeddingDisabled": false }, 2198 + "labels": [] 2199 + }, 2200 + "feedContext": "eyJmZWVkX3VyaSI6ICJhdDovL2RpZDpwbGM6a2tmNG5heHFtd2VvcDdkdjRsMmlxcWY1L2FwcC5ic2t5LmZlZWQuZ2VuZXJhdG9yL3RyZW5kaW5nLWNhIn0=", 2201 + "reqId": "2E8A06A91ED54847AFBAB4D76D" 2202 + }, 2203 + { 2204 + "post": { 2205 + "uri": "at://did:plc:kkf4naxqmweop7dv4l2iqqf5/app.bsky.feed.post/3llzomcujhs2y", 2206 + "cid": "bafyreigypbohoqi6nwfrfm7kwsvb6wbtpjcsk263solsyfma3hyga6pwoe", 2207 + "author": { 2208 + "did": "did:plc:kkf4naxqmweop7dv4l2iqqf5", 2209 + "handle": "aendra.com", 2210 + "displayName": "ændra.", 2211 + "avatar": "https://cdn.bsky.app/img/avatar/plain/did:plc:kkf4naxqmweop7dv4l2iqqf5/bafkreiaqkfr6ikrkn2hj2tcapzmcxtkc3qo6hqwjvg4kn7r5f2cmbisstu@jpeg", 2212 + "associated": { 2213 + "chat": { "allowIncoming": "all" }, 2214 + "activitySubscription": { "allowSubscriptions": "followers" } 2215 + }, 2216 + "viewer": { 2217 + "muted": false, 2218 + "blockedBy": false, 2219 + "following": "at://did:plc:yfvwmnlztr4dwkb7hwz55r2g/app.bsky.graph.follow/3kzttxufngv2q", 2220 + "followedBy": "at://did:plc:kkf4naxqmweop7dv4l2iqqf5/app.bsky.graph.follow/3kztt3qel2o2w" 2221 + }, 2222 + "labels": [ 2223 + { 2224 + "cts": "2024-06-28T10:59:23.601Z", 2225 + "src": "did:plc:hysbs7znfgxyb4tsvetzo4sk", 2226 + "uri": "did:plc:kkf4naxqmweop7dv4l2iqqf5", 2227 + "val": "barbarian", 2228 + "ver": 1 2229 + }, 2230 + { 2231 + "cts": "2024-05-11T16:24:51.829Z", 2232 + "src": "did:plc:e4elbtctnfqocyfcml6h2lf7", 2233 + "uri": "did:plc:kkf4naxqmweop7dv4l2iqqf5", 2234 + "val": "bluesky-elder", 2235 + "ver": 1 2236 + }, 2237 + { 2238 + "cts": "2024-06-24T10:39:50.308Z", 2239 + "src": "did:plc:aksxl7qy5azlzfm2jstcwqtz", 2240 + "uri": "did:plc:kkf4naxqmweop7dv4l2iqqf5", 2241 + "val": "bouba", 2242 + "ver": 1 2243 + } 2244 + ], 2245 + "createdAt": "2023-05-04T16:59:41.121Z", 2246 + "verification": { 2247 + "verifications": [ 2248 + { 2249 + "issuer": "did:plc:z72i7hdynmk6r22z27h6tvur", 2250 + "uri": "at://did:plc:z72i7hdynmk6r22z27h6tvur/app.bsky.graph.verification/3lndpwsuopu2i", 2251 + "isValid": true, 2252 + "createdAt": "2025-04-21T10:48:24.872Z" 2253 + } 2254 + ], 2255 + "verifiedStatus": "valid", 2256 + "trustedVerifierStatus": "none" 2257 + } 2258 + }, 2259 + "record": { 2260 + "$type": "app.bsky.feed.post", 2261 + "createdAt": "2025-04-05T00:32:49.988Z", 2262 + "embed": { 2263 + "$type": "app.bsky.embed.external", 2264 + "external": { 2265 + "description": "Browse all of the feeds from @aendra.com that you can run advertisements on.", 2266 + "thumb": { 2267 + "$type": "blob", 2268 + "ref": { "$link": "bafkreihwiqmlkllgkr6jwnz7y2gto4yc6r7x3iilx2kymb5f43iw54md7y" }, 2269 + "mimeType": "image/jpeg", 2270 + "size": 981859 2271 + }, 2272 + "title": "@aendra.com's Ad Enabled Feeds | Graze", 2273 + "uri": "https://www.graze.social/ads/user/78" 2274 + } 2275 + }, 2276 + "facets": [ 2277 + { 2278 + "features": [{ "$type": "app.bsky.richtext.facet#tag", "tag": "promoted" }], 2279 + "index": { "byteEnd": 144, "byteStart": 135 } 2280 + }, 2281 + { 2282 + "features": [ 2283 + { "$type": "app.bsky.richtext.facet#link", "uri": "https://www.graze.social/ads/user/78" } 2284 + ], 2285 + "index": { "byteEnd": 260, "byteStart": 232 } 2286 + } 2287 + ], 2288 + "langs": ["en"], 2289 + "text": "Hello, it's me again, the creator of the News and Trending News feeds! 👋🏼💚\n\nI plan to add minimal, unobtrusive, well-labelled #promoted posts to my feeds soon; for info (and how to opt-out from seeing them), please visit:\n\nwww.graze.social/ads/user/78" 2290 + }, 2291 + "embed": { 2292 + "$type": "app.bsky.embed.external#view", 2293 + "external": { 2294 + "uri": "https://www.graze.social/ads/user/78", 2295 + "title": "@aendra.com's Ad Enabled Feeds | Graze", 2296 + "description": "Browse all of the feeds from @aendra.com that you can run advertisements on.", 2297 + "thumb": "https://cdn.bsky.app/img/feed_thumbnail/plain/did:plc:kkf4naxqmweop7dv4l2iqqf5/bafkreihwiqmlkllgkr6jwnz7y2gto4yc6r7x3iilx2kymb5f43iw54md7y@jpeg" 2298 + } 2299 + }, 2300 + "bookmarkCount": 0, 2301 + "replyCount": 39, 2302 + "repostCount": 129, 2303 + "likeCount": 1411, 2304 + "quoteCount": 1, 2305 + "indexedAt": "2025-04-05T00:33:33.607Z", 2306 + "viewer": { "bookmarked": false, "threadMuted": false, "replyDisabled": true, "embeddingDisabled": true }, 2307 + "labels": [], 2308 + "threadgate": { 2309 + "uri": "at://did:plc:kkf4naxqmweop7dv4l2iqqf5/app.bsky.feed.threadgate/3llzomcujhs2y", 2310 + "cid": "bafyreibwggjssdobxln5kvsk6e3feb65dfd532pvajcq7ebzek5n5vgji4", 2311 + "record": { 2312 + "$type": "app.bsky.feed.threadgate", 2313 + "allow": [], 2314 + "createdAt": "2025-04-05T00:33:26.684Z", 2315 + "hiddenReplies": [], 2316 + "post": "at://did:plc:kkf4naxqmweop7dv4l2iqqf5/app.bsky.feed.post/3llzomcujhs2y" 2317 + }, 2318 + "lists": [] 2319 + } 2320 + }, 2321 + "feedContext": "eyJmZWVkX3VyaSI6ICJhdDovL2RpZDpwbGM6a2tmNG5heHFtd2VvcDdkdjRsMmlxcWY1L2FwcC5ic2t5LmZlZWQuZ2VuZXJhdG9yL3RyZW5kaW5nLWNhIiwgImF0dHJpYnV0aW9uIjogIm5zMjg1NSJ9", 2322 + "reqId": "2E8A06A91ED54847AFBAB4D76D" 2323 + } 2324 + ], 2325 + "cursor": "eyJzY29yZSI6IDgsICJvcmRlciI6ICJ0cmVuZGluZyIsICJhdHRyaWJ1dGlvbnMiOiBbIm5zMjg1NSIsICJuczI4NTYiXX0=" 2326 + }, 2327 + { 2328 + "feed": [ 2329 + { 2330 + "post": { 2331 + "uri": "at://did:plc:bfuck3vwwacatltdmnilloym/app.bsky.feed.post/3lolx6iphec2b", 2332 + "cid": "bafyreicuq3ubca7b5sxbqjyndzttqz632jlwswfp7k3uc73ulwk4kc7ycm", 2333 + "author": { 2334 + "did": "did:plc:bfuck3vwwacatltdmnilloym", 2335 + "handle": "slut.dog", 2336 + "displayName": "Pup Harke 🔞", 2337 + "avatar": "https://cdn.bsky.app/img/avatar/plain/did:plc:bfuck3vwwacatltdmnilloym/bafkreibr2tcqu7kvzx2ielworu75n7iwi6r2chy42v6de7dp3dc32ch2su@jpeg", 2338 + "associated": { 2339 + "chat": { "allowIncoming": "all" }, 2340 + "activitySubscription": { "allowSubscriptions": "followers" } 2341 + }, 2342 + "viewer": { "muted": false, "blockedBy": false }, 2343 + "labels": [ 2344 + { 2345 + "cts": "2024-05-11T22:33:56.105Z", 2346 + "src": "did:plc:e4elbtctnfqocyfcml6h2lf7", 2347 + "uri": "did:plc:bfuck3vwwacatltdmnilloym", 2348 + "val": "bluesky-elder", 2349 + "ver": 1 2350 + }, 2351 + { 2352 + "cid": "bafyreihalclyoblmz3hvtljqko4mf7drfe2kuqufzpkngrok5bifih2yj4", 2353 + "cts": "2023-11-01T09:09:41.765Z", 2354 + "neg": false, 2355 + "src": "did:plc:ar7c4by46qjdydhdevvrndac", 2356 + "uri": "at://did:plc:bfuck3vwwacatltdmnilloym/app.bsky.actor.profile/self", 2357 + "val": "sexual" 2358 + } 2359 + ], 2360 + "createdAt": "2023-05-17T18:10:17.346Z" 2361 + }, 2362 + "record": { 2363 + "$type": "app.bsky.feed.post", 2364 + "createdAt": "2025-05-07T17:44:28.571Z", 2365 + "langs": ["en"], 2366 + "text": "Hello everyone! I'm excited to officially announce some brand new feeds!\n\nIntroducing the Hot Stuff Feeds 🥳 \n\nRead the thread to learn more 🧵" 2367 + }, 2368 + "bookmarkCount": 11, 2369 + "replyCount": 20, 2370 + "repostCount": 68, 2371 + "likeCount": 726, 2372 + "quoteCount": 3, 2373 + "indexedAt": "2025-05-07T17:44:29.546Z", 2374 + "viewer": { "bookmarked": false, "threadMuted": false, "embeddingDisabled": false }, 2375 + "labels": [] 2376 + } 2377 + }, 2378 + { 2379 + "post": { 2380 + "uri": "at://did:plc:e72cwu7fen37hzzzhwy6mkxp/app.bsky.feed.post/3m3koqg5vvs2w", 2381 + "cid": "bafyreie5yoesqu22nfck2lkiz7jwybzvisdxf7nlf67wsxxg2c2ns3gvau", 2382 + "author": { 2383 + "did": "did:plc:e72cwu7fen37hzzzhwy6mkxp", 2384 + "handle": "hausofdecline.bsky.social", 2385 + "displayName": "Haus of Decline", 2386 + "avatar": "https://cdn.bsky.app/img/avatar/plain/did:plc:e72cwu7fen37hzzzhwy6mkxp/bafkreigfw5kuf5rmj7cak36uhoryrspeg6dpz4lfoj2ysqaobjsegaf7oe@jpeg", 2387 + "associated": { 2388 + "chat": { "allowIncoming": "following" }, 2389 + "activitySubscription": { "allowSubscriptions": "followers" } 2390 + }, 2391 + "viewer": { 2392 + "muted": false, 2393 + "blockedBy": false, 2394 + "following": "at://did:plc:yfvwmnlztr4dwkb7hwz55r2g/app.bsky.graph.follow/3kq27smhpus2f" 2395 + }, 2396 + "labels": [ 2397 + { 2398 + "cts": "2024-05-11T11:30:56.229Z", 2399 + "src": "did:plc:e4elbtctnfqocyfcml6h2lf7", 2400 + "uri": "did:plc:e72cwu7fen37hzzzhwy6mkxp", 2401 + "val": "bluesky-elder", 2402 + "ver": 1 2403 + } 2404 + ], 2405 + "createdAt": "2023-04-27T17:32:54.011Z" 2406 + }, 2407 + "record": { 2408 + "$type": "app.bsky.feed.post", 2409 + "createdAt": "2025-10-19T16:08:17.613Z", 2410 + "embed": { 2411 + "$type": "app.bsky.embed.images", 2412 + "images": [ 2413 + { 2414 + "alt": "Alex looks at her phone and says \"it's kinda odd this guy listed his enjoyment of Wes Anderson on his Grindr profile.\" She leans in close and says \"ooo, he sent me a dick photograph.\" The dick is centred in a square frame. The wall paper in the room has a whimsical checkerboard pattern. It is wreathed by paintings, bookshelves and vases. A cat stretches on the floor.", 2415 + "aspectRatio": { "height": 1850, "width": 2000 }, 2416 + "image": { 2417 + "$type": "blob", 2418 + "ref": { "$link": "bafkreifgf6y2ju7ph7uu6agg3nnaljjosgz2jwjfvf7lnpzhkbuax2zqnu" }, 2419 + "mimeType": "image/jpeg", 2420 + "size": 942270 2421 + } 2422 + } 2423 + ] 2424 + }, 2425 + "labels": { "$type": "com.atproto.label.defs#selfLabels", "values": [{ "val": "nudity" }] }, 2426 + "langs": ["en"], 2427 + "text": "Wes Anderson" 2428 + }, 2429 + "embed": { 2430 + "$type": "app.bsky.embed.images#view", 2431 + "images": [ 2432 + { 2433 + "thumb": "https://cdn.bsky.app/img/feed_thumbnail/plain/did:plc:e72cwu7fen37hzzzhwy6mkxp/bafkreifgf6y2ju7ph7uu6agg3nnaljjosgz2jwjfvf7lnpzhkbuax2zqnu@jpeg", 2434 + "fullsize": "https://cdn.bsky.app/img/feed_fullsize/plain/did:plc:e72cwu7fen37hzzzhwy6mkxp/bafkreifgf6y2ju7ph7uu6agg3nnaljjosgz2jwjfvf7lnpzhkbuax2zqnu@jpeg", 2435 + "alt": "Alex looks at her phone and says \"it's kinda odd this guy listed his enjoyment of Wes Anderson on his Grindr profile.\" She leans in close and says \"ooo, he sent me a dick photograph.\" The dick is centred in a square frame. The wall paper in the room has a whimsical checkerboard pattern. It is wreathed by paintings, bookshelves and vases. A cat stretches on the floor.", 2436 + "aspectRatio": { "height": 1850, "width": 2000 } 2437 + } 2438 + ] 2439 + }, 2440 + "bookmarkCount": 25, 2441 + "replyCount": 33, 2442 + "repostCount": 341, 2443 + "likeCount": 2259, 2444 + "quoteCount": 4, 2445 + "indexedAt": "2025-10-19T16:09:01.758Z", 2446 + "viewer": { "bookmarked": false, "threadMuted": false, "embeddingDisabled": false }, 2447 + "labels": [ 2448 + { 2449 + "src": "did:plc:e72cwu7fen37hzzzhwy6mkxp", 2450 + "uri": "at://did:plc:e72cwu7fen37hzzzhwy6mkxp/app.bsky.feed.post/3m3koqg5vvs2w", 2451 + "cid": "bafyreie5yoesqu22nfck2lkiz7jwybzvisdxf7nlf67wsxxg2c2ns3gvau", 2452 + "val": "nudity", 2453 + "cts": "2025-10-19T16:08:17.613Z" 2454 + } 2455 + ] 2456 + } 2457 + }, 2458 + { 2459 + "post": { 2460 + "uri": "at://did:plc:qruaxn2eewkli7hsvzxo5hwf/app.bsky.feed.post/3m3itmei7ik2r", 2461 + "cid": "bafyreih7vfvw2bb6st7qaajtekwojqhefygbcxqlskvl3yo53glte4su54", 2462 + "author": { 2463 + "did": "did:plc:qruaxn2eewkli7hsvzxo5hwf", 2464 + "handle": "eva.computer", 2465 + "displayName": "eva (^_^)/", 2466 + "avatar": "https://cdn.bsky.app/img/avatar/plain/did:plc:qruaxn2eewkli7hsvzxo5hwf/bafkreig74mmlupmlki2t6aafekjo4hdlqo6k27zfwdusxtnpvfo4mpurmy@jpeg", 2467 + "associated": { 2468 + "chat": { "allowIncoming": "all" }, 2469 + "activitySubscription": { "allowSubscriptions": "mutuals" } 2470 + }, 2471 + "viewer": { 2472 + "muted": false, 2473 + "blockedBy": false, 2474 + "following": "at://did:plc:yfvwmnlztr4dwkb7hwz55r2g/app.bsky.graph.follow/3k2lyheqnh225", 2475 + "followedBy": "at://did:plc:qruaxn2eewkli7hsvzxo5hwf/app.bsky.graph.follow/3k2lylkwduk2j" 2476 + }, 2477 + "labels": [ 2478 + { 2479 + "cts": "2024-06-28T14:17:21.282Z", 2480 + "src": "did:plc:hysbs7znfgxyb4tsvetzo4sk", 2481 + "uri": "did:plc:qruaxn2eewkli7hsvzxo5hwf", 2482 + "val": "oracle", 2483 + "ver": 1 2484 + }, 2485 + { 2486 + "cts": "2024-05-11T11:30:26.948Z", 2487 + "src": "did:plc:e4elbtctnfqocyfcml6h2lf7", 2488 + "uri": "did:plc:qruaxn2eewkli7hsvzxo5hwf", 2489 + "val": "bluesky-elder", 2490 + "ver": 1 2491 + }, 2492 + { 2493 + "cts": "2025-10-03T21:11:35.075Z", 2494 + "neg": false, 2495 + "src": "did:plc:bpcllqvnvx3dlyrcblqkusat", 2496 + "uri": "did:plc:qruaxn2eewkli7hsvzxo5hwf", 2497 + "val": "zzzzzwaffles", 2498 + "ver": 1 2499 + }, 2500 + { 2501 + "cts": "2024-06-24T04:16:51.276Z", 2502 + "src": "did:plc:aksxl7qy5azlzfm2jstcwqtz", 2503 + "uri": "did:plc:qruaxn2eewkli7hsvzxo5hwf", 2504 + "val": "kiki", 2505 + "ver": 1 2506 + }, 2507 + { 2508 + "src": "did:plc:qruaxn2eewkli7hsvzxo5hwf", 2509 + "uri": "at://did:plc:qruaxn2eewkli7hsvzxo5hwf/app.bsky.actor.profile/self", 2510 + "cid": "bafyreibcn37h6lsmb45q2v2kcefylpev6rqhertmnzrr33fiw6hoscdksm", 2511 + "val": "!no-unauthenticated", 2512 + "cts": "1970-01-01T00:00:00.000Z" 2513 + } 2514 + ], 2515 + "createdAt": "2023-04-26T22:03:28.085Z" 2516 + }, 2517 + "record": { 2518 + "$type": "app.bsky.feed.post", 2519 + "createdAt": "2025-10-18T22:30:10.878Z", 2520 + "embed": { 2521 + "$type": "app.bsky.embed.images", 2522 + "images": [ 2523 + { 2524 + "alt": "YOU MAY BE A 'DAUGHTER' OF THE CARRION LORD, BUT IN MY DOMAIN YOU'LL BE ELEVATED TO THE HONOUR OF BEING MY 'PET.\n-\nBUT AS MY PET YOU'LL BECOME SO MUCH MORE THAN YOU EVER DREAMT\nYOU COULD BE.\nYOU'LL SCREAM FOR ME YOU'LL CRY OUT MY NAME YOUR SISTERS WILL HEAR\nJUST HOW \"ANGELIC\"\nYOU CAN SOUND.\nTHEY'LL WISH THEY COULD BE AS RESPLENDENT AS YOU\nHEAVY LASHES", 2525 + "aspectRatio": { "height": 1202, "width": 850 }, 2526 + "image": { 2527 + "$type": "blob", 2528 + "ref": { "$link": "bafkreigy67jlph4m32rtoz4zhqexjwdprrj565veiubryk56lv75el6jyq" }, 2529 + "mimeType": "image/jpeg", 2530 + "size": 656699 2531 + } 2532 + } 2533 + ] 2534 + }, 2535 + "labels": { "$type": "com.atproto.label.defs#selfLabels", "values": [{ "val": "porn" }] }, 2536 + "langs": ["en"], 2537 + "reply": { 2538 + "parent": { 2539 + "cid": "bafyreigrhbt4nehpovodn3pfyvf45hqyirnjiuv4sychlmmmbcndnhiilq", 2540 + "uri": "at://did:plc:qruaxn2eewkli7hsvzxo5hwf/app.bsky.feed.post/3m3itktxmus2r" 2541 + }, 2542 + "root": { 2543 + "cid": "bafyreibaj7r76qu346kspkmndm2quie7f3kcpo5ox5k7nu5ncovhfhdk3y", 2544 + "uri": "at://did:plc:qruaxn2eewkli7hsvzxo5hwf/app.bsky.feed.post/3m3ireldcdk2r" 2545 + } 2546 + }, 2547 + "text": "or stuff like this might happen" 2548 + }, 2549 + "embed": { 2550 + "$type": "app.bsky.embed.images#view", 2551 + "images": [ 2552 + { 2553 + "thumb": "https://cdn.bsky.app/img/feed_thumbnail/plain/did:plc:qruaxn2eewkli7hsvzxo5hwf/bafkreigy67jlph4m32rtoz4zhqexjwdprrj565veiubryk56lv75el6jyq@jpeg", 2554 + "fullsize": "https://cdn.bsky.app/img/feed_fullsize/plain/did:plc:qruaxn2eewkli7hsvzxo5hwf/bafkreigy67jlph4m32rtoz4zhqexjwdprrj565veiubryk56lv75el6jyq@jpeg", 2555 + "alt": "YOU MAY BE A 'DAUGHTER' OF THE CARRION LORD, BUT IN MY DOMAIN YOU'LL BE ELEVATED TO THE HONOUR OF BEING MY 'PET.\n-\nBUT AS MY PET YOU'LL BECOME SO MUCH MORE THAN YOU EVER DREAMT\nYOU COULD BE.\nYOU'LL SCREAM FOR ME YOU'LL CRY OUT MY NAME YOUR SISTERS WILL HEAR\nJUST HOW \"ANGELIC\"\nYOU CAN SOUND.\nTHEY'LL WISH THEY COULD BE AS RESPLENDENT AS YOU\nHEAVY LASHES", 2556 + "aspectRatio": { "height": 1202, "width": 850 } 2557 + } 2558 + ] 2559 + }, 2560 + "bookmarkCount": 2, 2561 + "replyCount": 6, 2562 + "repostCount": 4, 2563 + "likeCount": 47, 2564 + "quoteCount": 0, 2565 + "indexedAt": "2025-10-18T22:30:13.557Z", 2566 + "viewer": { "bookmarked": false, "threadMuted": false, "embeddingDisabled": false }, 2567 + "labels": [ 2568 + { 2569 + "src": "did:plc:qruaxn2eewkli7hsvzxo5hwf", 2570 + "uri": "at://did:plc:qruaxn2eewkli7hsvzxo5hwf/app.bsky.feed.post/3m3itmei7ik2r", 2571 + "cid": "bafyreih7vfvw2bb6st7qaajtekwojqhefygbcxqlskvl3yo53glte4su54", 2572 + "val": "porn", 2573 + "cts": "2025-10-18T22:30:10.878Z" 2574 + } 2575 + ] 2576 + }, 2577 + "reply": { 2578 + "root": { 2579 + "uri": "at://did:plc:qruaxn2eewkli7hsvzxo5hwf/app.bsky.feed.post/3m3ireldcdk2r", 2580 + "cid": "bafyreibaj7r76qu346kspkmndm2quie7f3kcpo5ox5k7nu5ncovhfhdk3y", 2581 + "author": { 2582 + "did": "did:plc:qruaxn2eewkli7hsvzxo5hwf", 2583 + "handle": "eva.computer", 2584 + "displayName": "eva (^_^)/", 2585 + "avatar": "https://cdn.bsky.app/img/avatar/plain/did:plc:qruaxn2eewkli7hsvzxo5hwf/bafkreig74mmlupmlki2t6aafekjo4hdlqo6k27zfwdusxtnpvfo4mpurmy@jpeg", 2586 + "associated": { 2587 + "chat": { "allowIncoming": "all" }, 2588 + "activitySubscription": { "allowSubscriptions": "mutuals" } 2589 + }, 2590 + "viewer": { 2591 + "muted": false, 2592 + "blockedBy": false, 2593 + "following": "at://did:plc:yfvwmnlztr4dwkb7hwz55r2g/app.bsky.graph.follow/3k2lyheqnh225", 2594 + "followedBy": "at://did:plc:qruaxn2eewkli7hsvzxo5hwf/app.bsky.graph.follow/3k2lylkwduk2j" 2595 + }, 2596 + "labels": [ 2597 + { 2598 + "cts": "2024-06-28T14:17:21.282Z", 2599 + "src": "did:plc:hysbs7znfgxyb4tsvetzo4sk", 2600 + "uri": "did:plc:qruaxn2eewkli7hsvzxo5hwf", 2601 + "val": "oracle", 2602 + "ver": 1 2603 + }, 2604 + { 2605 + "cts": "2024-05-11T11:30:26.948Z", 2606 + "src": "did:plc:e4elbtctnfqocyfcml6h2lf7", 2607 + "uri": "did:plc:qruaxn2eewkli7hsvzxo5hwf", 2608 + "val": "bluesky-elder", 2609 + "ver": 1 2610 + }, 2611 + { 2612 + "cts": "2025-10-03T21:11:35.075Z", 2613 + "neg": false, 2614 + "src": "did:plc:bpcllqvnvx3dlyrcblqkusat", 2615 + "uri": "did:plc:qruaxn2eewkli7hsvzxo5hwf", 2616 + "val": "zzzzzwaffles", 2617 + "ver": 1 2618 + }, 2619 + { 2620 + "cts": "2024-06-24T04:16:51.276Z", 2621 + "src": "did:plc:aksxl7qy5azlzfm2jstcwqtz", 2622 + "uri": "did:plc:qruaxn2eewkli7hsvzxo5hwf", 2623 + "val": "kiki", 2624 + "ver": 1 2625 + }, 2626 + { 2627 + "src": "did:plc:qruaxn2eewkli7hsvzxo5hwf", 2628 + "uri": "at://did:plc:qruaxn2eewkli7hsvzxo5hwf/app.bsky.actor.profile/self", 2629 + "cid": "bafyreibcn37h6lsmb45q2v2kcefylpev6rqhertmnzrr33fiw6hoscdksm", 2630 + "val": "!no-unauthenticated", 2631 + "cts": "1970-01-01T00:00:00.000Z" 2632 + } 2633 + ], 2634 + "createdAt": "2023-04-26T22:03:28.085Z" 2635 + }, 2636 + "record": { 2637 + "$type": "app.bsky.feed.post", 2638 + "createdAt": "2025-10-18T21:50:02.126Z", 2639 + "embed": { 2640 + "$type": "app.bsky.embed.images", 2641 + "images": [ 2642 + { 2643 + "alt": "IMPURE THOUGHTS\nMUST BE EXPUNGED SISTER-\n\nMmmmerpgh-\n\nSHUT UP.\nONLY PENANCE THROUGH SERVITUDE WILL LOOSEN\nYOUR SHACKLES,\n\n...AND YOU. WILL. SERVE.\n\nMmmmmmmrghhh...", 2644 + "aspectRatio": { "height": 457, "width": 850 }, 2645 + "image": { 2646 + "$type": "blob", 2647 + "ref": { "$link": "bafkreibg6bqapsj6bghz7eykyh3lcnq22cs6njyc4gqqgtrrfcup3sj5lu" }, 2648 + "mimeType": "image/jpeg", 2649 + "size": 264389 2650 + } 2651 + } 2652 + ] 2653 + }, 2654 + "labels": { "$type": "com.atproto.label.defs#selfLabels", "values": [{ "val": "porn" }] }, 2655 + "langs": ["en"], 2656 + "text": "anyways i don’t wanna serious post today\n\npost your favorite adepta sororitas images" 2657 + }, 2658 + "embed": { 2659 + "$type": "app.bsky.embed.images#view", 2660 + "images": [ 2661 + { 2662 + "thumb": "https://cdn.bsky.app/img/feed_thumbnail/plain/did:plc:qruaxn2eewkli7hsvzxo5hwf/bafkreibg6bqapsj6bghz7eykyh3lcnq22cs6njyc4gqqgtrrfcup3sj5lu@jpeg", 2663 + "fullsize": "https://cdn.bsky.app/img/feed_fullsize/plain/did:plc:qruaxn2eewkli7hsvzxo5hwf/bafkreibg6bqapsj6bghz7eykyh3lcnq22cs6njyc4gqqgtrrfcup3sj5lu@jpeg", 2664 + "alt": "IMPURE THOUGHTS\nMUST BE EXPUNGED SISTER-\n\nMmmmerpgh-\n\nSHUT UP.\nONLY PENANCE THROUGH SERVITUDE WILL LOOSEN\nYOUR SHACKLES,\n\n...AND YOU. WILL. SERVE.\n\nMmmmmmmrghhh...", 2665 + "aspectRatio": { "height": 457, "width": 850 } 2666 + } 2667 + ] 2668 + }, 2669 + "bookmarkCount": 18, 2670 + "replyCount": 14, 2671 + "repostCount": 16, 2672 + "likeCount": 163, 2673 + "quoteCount": 0, 2674 + "indexedAt": "2025-10-18T21:50:05.665Z", 2675 + "viewer": { "bookmarked": false, "threadMuted": false, "embeddingDisabled": false }, 2676 + "labels": [ 2677 + { 2678 + "src": "did:plc:qruaxn2eewkli7hsvzxo5hwf", 2679 + "uri": "at://did:plc:qruaxn2eewkli7hsvzxo5hwf/app.bsky.feed.post/3m3ireldcdk2r", 2680 + "cid": "bafyreibaj7r76qu346kspkmndm2quie7f3kcpo5ox5k7nu5ncovhfhdk3y", 2681 + "val": "porn", 2682 + "cts": "2025-10-18T21:50:02.126Z" 2683 + } 2684 + ], 2685 + "$type": "app.bsky.feed.defs#postView" 2686 + }, 2687 + "parent": { 2688 + "uri": "at://did:plc:qruaxn2eewkli7hsvzxo5hwf/app.bsky.feed.post/3m3itktxmus2r", 2689 + "cid": "bafyreigrhbt4nehpovodn3pfyvf45hqyirnjiuv4sychlmmmbcndnhiilq", 2690 + "author": { 2691 + "did": "did:plc:qruaxn2eewkli7hsvzxo5hwf", 2692 + "handle": "eva.computer", 2693 + "displayName": "eva (^_^)/", 2694 + "avatar": "https://cdn.bsky.app/img/avatar/plain/did:plc:qruaxn2eewkli7hsvzxo5hwf/bafkreig74mmlupmlki2t6aafekjo4hdlqo6k27zfwdusxtnpvfo4mpurmy@jpeg", 2695 + "associated": { 2696 + "chat": { "allowIncoming": "all" }, 2697 + "activitySubscription": { "allowSubscriptions": "mutuals" } 2698 + }, 2699 + "viewer": { 2700 + "muted": false, 2701 + "blockedBy": false, 2702 + "following": "at://did:plc:yfvwmnlztr4dwkb7hwz55r2g/app.bsky.graph.follow/3k2lyheqnh225", 2703 + "followedBy": "at://did:plc:qruaxn2eewkli7hsvzxo5hwf/app.bsky.graph.follow/3k2lylkwduk2j" 2704 + }, 2705 + "labels": [ 2706 + { 2707 + "cts": "2024-06-28T14:17:21.282Z", 2708 + "src": "did:plc:hysbs7znfgxyb4tsvetzo4sk", 2709 + "uri": "did:plc:qruaxn2eewkli7hsvzxo5hwf", 2710 + "val": "oracle", 2711 + "ver": 1 2712 + }, 2713 + { 2714 + "cts": "2024-05-11T11:30:26.948Z", 2715 + "src": "did:plc:e4elbtctnfqocyfcml6h2lf7", 2716 + "uri": "did:plc:qruaxn2eewkli7hsvzxo5hwf", 2717 + "val": "bluesky-elder", 2718 + "ver": 1 2719 + }, 2720 + { 2721 + "cts": "2025-10-03T21:11:35.075Z", 2722 + "neg": false, 2723 + "src": "did:plc:bpcllqvnvx3dlyrcblqkusat", 2724 + "uri": "did:plc:qruaxn2eewkli7hsvzxo5hwf", 2725 + "val": "zzzzzwaffles", 2726 + "ver": 1 2727 + }, 2728 + { 2729 + "cts": "2024-06-24T04:16:51.276Z", 2730 + "src": "did:plc:aksxl7qy5azlzfm2jstcwqtz", 2731 + "uri": "did:plc:qruaxn2eewkli7hsvzxo5hwf", 2732 + "val": "kiki", 2733 + "ver": 1 2734 + }, 2735 + { 2736 + "src": "did:plc:qruaxn2eewkli7hsvzxo5hwf", 2737 + "uri": "at://did:plc:qruaxn2eewkli7hsvzxo5hwf/app.bsky.actor.profile/self", 2738 + "cid": "bafyreibcn37h6lsmb45q2v2kcefylpev6rqhertmnzrr33fiw6hoscdksm", 2739 + "val": "!no-unauthenticated", 2740 + "cts": "1970-01-01T00:00:00.000Z" 2741 + } 2742 + ], 2743 + "createdAt": "2023-04-26T22:03:28.085Z" 2744 + }, 2745 + "record": { 2746 + "$type": "app.bsky.feed.post", 2747 + "createdAt": "2025-10-18T22:29:19.987Z", 2748 + "embed": { 2749 + "$type": "app.bsky.embed.images", 2750 + "images": [ 2751 + { 2752 + "alt": "some kind of sister of battle submitting to punishment in a trial or something also everyone is naked", 2753 + "aspectRatio": { "height": 478, "width": 850 }, 2754 + "image": { 2755 + "$type": "blob", 2756 + "ref": { "$link": "bafkreic4urkmiie4b3alyxpxfsspvtm53m3rdircd53h5l3d3joklosv5a" }, 2757 + "mimeType": "image/jpeg", 2758 + "size": 298751 2759 + } 2760 + } 2761 + ] 2762 + }, 2763 + "langs": ["en"], 2764 + "reply": { 2765 + "parent": { 2766 + "cid": "bafyreieqppyhsatoy7pbhd65gvcbrsi6peqeagbxvl2z74tqxgfdia365i", 2767 + "uri": "at://did:plc:qruaxn2eewkli7hsvzxo5hwf/app.bsky.feed.post/3m3itd6pk7c2r" 2768 + }, 2769 + "root": { 2770 + "cid": "bafyreibaj7r76qu346kspkmndm2quie7f3kcpo5ox5k7nu5ncovhfhdk3y", 2771 + "uri": "at://did:plc:qruaxn2eewkli7hsvzxo5hwf/app.bsky.feed.post/3m3ireldcdk2r" 2772 + } 2773 + }, 2774 + "text": "you must make sure your sisters do not stray from the holy path" 2775 + }, 2776 + "embed": { 2777 + "$type": "app.bsky.embed.images#view", 2778 + "images": [ 2779 + { 2780 + "thumb": "https://cdn.bsky.app/img/feed_thumbnail/plain/did:plc:qruaxn2eewkli7hsvzxo5hwf/bafkreic4urkmiie4b3alyxpxfsspvtm53m3rdircd53h5l3d3joklosv5a@jpeg", 2781 + "fullsize": "https://cdn.bsky.app/img/feed_fullsize/plain/did:plc:qruaxn2eewkli7hsvzxo5hwf/bafkreic4urkmiie4b3alyxpxfsspvtm53m3rdircd53h5l3d3joklosv5a@jpeg", 2782 + "alt": "some kind of sister of battle submitting to punishment in a trial or something also everyone is naked", 2783 + "aspectRatio": { "height": 478, "width": 850 } 2784 + } 2785 + ] 2786 + }, 2787 + "bookmarkCount": 1, 2788 + "replyCount": 5, 2789 + "repostCount": 4, 2790 + "likeCount": 43, 2791 + "quoteCount": 0, 2792 + "indexedAt": "2025-10-18T22:29:24.163Z", 2793 + "viewer": { "bookmarked": false, "threadMuted": false, "embeddingDisabled": false }, 2794 + "labels": [ 2795 + { 2796 + "cid": "bafyreigrhbt4nehpovodn3pfyvf45hqyirnjiuv4sychlmmmbcndnhiilq", 2797 + "cts": "2025-10-18T22:29:25.751Z", 2798 + "src": "did:plc:ar7c4by46qjdydhdevvrndac", 2799 + "uri": "at://did:plc:qruaxn2eewkli7hsvzxo5hwf/app.bsky.feed.post/3m3itktxmus2r", 2800 + "val": "porn", 2801 + "ver": 1 2802 + } 2803 + ], 2804 + "$type": "app.bsky.feed.defs#postView" 2805 + }, 2806 + "grandparentAuthor": { 2807 + "did": "did:plc:qruaxn2eewkli7hsvzxo5hwf", 2808 + "handle": "eva.computer", 2809 + "displayName": "eva (^_^)/", 2810 + "avatar": "https://cdn.bsky.app/img/avatar/plain/did:plc:qruaxn2eewkli7hsvzxo5hwf/bafkreig74mmlupmlki2t6aafekjo4hdlqo6k27zfwdusxtnpvfo4mpurmy@jpeg", 2811 + "associated": { 2812 + "chat": { "allowIncoming": "all" }, 2813 + "activitySubscription": { "allowSubscriptions": "mutuals" } 2814 + }, 2815 + "viewer": { 2816 + "muted": false, 2817 + "blockedBy": false, 2818 + "following": "at://did:plc:yfvwmnlztr4dwkb7hwz55r2g/app.bsky.graph.follow/3k2lyheqnh225", 2819 + "followedBy": "at://did:plc:qruaxn2eewkli7hsvzxo5hwf/app.bsky.graph.follow/3k2lylkwduk2j" 2820 + }, 2821 + "labels": [ 2822 + { 2823 + "cts": "2024-06-28T14:17:21.282Z", 2824 + "src": "did:plc:hysbs7znfgxyb4tsvetzo4sk", 2825 + "uri": "did:plc:qruaxn2eewkli7hsvzxo5hwf", 2826 + "val": "oracle", 2827 + "ver": 1 2828 + }, 2829 + { 2830 + "cts": "2024-05-11T11:30:26.948Z", 2831 + "src": "did:plc:e4elbtctnfqocyfcml6h2lf7", 2832 + "uri": "did:plc:qruaxn2eewkli7hsvzxo5hwf", 2833 + "val": "bluesky-elder", 2834 + "ver": 1 2835 + }, 2836 + { 2837 + "cts": "2025-10-03T21:11:35.075Z", 2838 + "neg": false, 2839 + "src": "did:plc:bpcllqvnvx3dlyrcblqkusat", 2840 + "uri": "did:plc:qruaxn2eewkli7hsvzxo5hwf", 2841 + "val": "zzzzzwaffles", 2842 + "ver": 1 2843 + }, 2844 + { 2845 + "cts": "2024-06-24T04:16:51.276Z", 2846 + "src": "did:plc:aksxl7qy5azlzfm2jstcwqtz", 2847 + "uri": "did:plc:qruaxn2eewkli7hsvzxo5hwf", 2848 + "val": "kiki", 2849 + "ver": 1 2850 + }, 2851 + { 2852 + "src": "did:plc:qruaxn2eewkli7hsvzxo5hwf", 2853 + "uri": "at://did:plc:qruaxn2eewkli7hsvzxo5hwf/app.bsky.actor.profile/self", 2854 + "cid": "bafyreibcn37h6lsmb45q2v2kcefylpev6rqhertmnzrr33fiw6hoscdksm", 2855 + "val": "!no-unauthenticated", 2856 + "cts": "1970-01-01T00:00:00.000Z" 2857 + } 2858 + ], 2859 + "createdAt": "2023-04-26T22:03:28.085Z" 2860 + } 2861 + } 2862 + }, 2863 + { 2864 + "post": { 2865 + "uri": "at://did:plc:qruaxn2eewkli7hsvzxo5hwf/app.bsky.feed.post/3m3itd6pk7c2r", 2866 + "cid": "bafyreieqppyhsatoy7pbhd65gvcbrsi6peqeagbxvl2z74tqxgfdia365i", 2867 + "author": { 2868 + "did": "did:plc:qruaxn2eewkli7hsvzxo5hwf", 2869 + "handle": "eva.computer", 2870 + "displayName": "eva (^_^)/", 2871 + "avatar": "https://cdn.bsky.app/img/avatar/plain/did:plc:qruaxn2eewkli7hsvzxo5hwf/bafkreig74mmlupmlki2t6aafekjo4hdlqo6k27zfwdusxtnpvfo4mpurmy@jpeg", 2872 + "associated": { 2873 + "chat": { "allowIncoming": "all" }, 2874 + "activitySubscription": { "allowSubscriptions": "mutuals" } 2875 + }, 2876 + "viewer": { 2877 + "muted": false, 2878 + "blockedBy": false, 2879 + "following": "at://did:plc:yfvwmnlztr4dwkb7hwz55r2g/app.bsky.graph.follow/3k2lyheqnh225", 2880 + "followedBy": "at://did:plc:qruaxn2eewkli7hsvzxo5hwf/app.bsky.graph.follow/3k2lylkwduk2j" 2881 + }, 2882 + "labels": [ 2883 + { 2884 + "cts": "2024-06-28T14:17:21.282Z", 2885 + "src": "did:plc:hysbs7znfgxyb4tsvetzo4sk", 2886 + "uri": "did:plc:qruaxn2eewkli7hsvzxo5hwf", 2887 + "val": "oracle", 2888 + "ver": 1 2889 + }, 2890 + { 2891 + "cts": "2024-05-11T11:30:26.948Z", 2892 + "src": "did:plc:e4elbtctnfqocyfcml6h2lf7", 2893 + "uri": "did:plc:qruaxn2eewkli7hsvzxo5hwf", 2894 + "val": "bluesky-elder", 2895 + "ver": 1 2896 + }, 2897 + { 2898 + "cts": "2025-10-03T21:11:35.075Z", 2899 + "neg": false, 2900 + "src": "did:plc:bpcllqvnvx3dlyrcblqkusat", 2901 + "uri": "did:plc:qruaxn2eewkli7hsvzxo5hwf", 2902 + "val": "zzzzzwaffles", 2903 + "ver": 1 2904 + }, 2905 + { 2906 + "cts": "2024-06-24T04:16:51.276Z", 2907 + "src": "did:plc:aksxl7qy5azlzfm2jstcwqtz", 2908 + "uri": "did:plc:qruaxn2eewkli7hsvzxo5hwf", 2909 + "val": "kiki", 2910 + "ver": 1 2911 + }, 2912 + { 2913 + "src": "did:plc:qruaxn2eewkli7hsvzxo5hwf", 2914 + "uri": "at://did:plc:qruaxn2eewkli7hsvzxo5hwf/app.bsky.actor.profile/self", 2915 + "cid": "bafyreibcn37h6lsmb45q2v2kcefylpev6rqhertmnzrr33fiw6hoscdksm", 2916 + "val": "!no-unauthenticated", 2917 + "cts": "1970-01-01T00:00:00.000Z" 2918 + } 2919 + ], 2920 + "createdAt": "2023-04-26T22:03:28.085Z" 2921 + }, 2922 + "record": { 2923 + "$type": "app.bsky.feed.post", 2924 + "createdAt": "2025-10-18T22:25:02.837Z", 2925 + "embed": { 2926 + "$type": "app.bsky.embed.images", 2927 + "images": [ 2928 + { 2929 + "alt": "two drukhari women doing things to a captured sister of battle\ntext:\nIt is the Drukhari way to embrace every day as if it's your last.", 2930 + "aspectRatio": { "height": 968, "width": 645 }, 2931 + "image": { 2932 + "$type": "blob", 2933 + "ref": { "$link": "bafkreicmtokxhwl6wqjyivqu3q4yjwuustlsrgi2erlmp5567u2fi4jeae" }, 2934 + "mimeType": "image/jpeg", 2935 + "size": 312568 2936 + } 2937 + } 2938 + ] 2939 + }, 2940 + "labels": { "$type": "com.atproto.label.defs#selfLabels", "values": [{ "val": "porn" }] }, 2941 + "langs": ["en"], 2942 + "reply": { 2943 + "parent": { 2944 + "cid": "bafyreifuwkl3xwx3ddsciphb3ja7fixfm5d43dj5kq5vhm3jfzz7kib4im", 2945 + "uri": "at://did:plc:qruaxn2eewkli7hsvzxo5hwf/app.bsky.feed.post/3m3isgxl4q22r" 2946 + }, 2947 + "root": { 2948 + "cid": "bafyreibaj7r76qu346kspkmndm2quie7f3kcpo5ox5k7nu5ncovhfhdk3y", 2949 + "uri": "at://did:plc:qruaxn2eewkli7hsvzxo5hwf/app.bsky.feed.post/3m3ireldcdk2r" 2950 + } 2951 + }, 2952 + "text": "it’s very important to learn to live without fear" 2953 + }, 2954 + "embed": { 2955 + "$type": "app.bsky.embed.images#view", 2956 + "images": [ 2957 + { 2958 + "thumb": "https://cdn.bsky.app/img/feed_thumbnail/plain/did:plc:qruaxn2eewkli7hsvzxo5hwf/bafkreicmtokxhwl6wqjyivqu3q4yjwuustlsrgi2erlmp5567u2fi4jeae@jpeg", 2959 + "fullsize": "https://cdn.bsky.app/img/feed_fullsize/plain/did:plc:qruaxn2eewkli7hsvzxo5hwf/bafkreicmtokxhwl6wqjyivqu3q4yjwuustlsrgi2erlmp5567u2fi4jeae@jpeg", 2960 + "alt": "two drukhari women doing things to a captured sister of battle\ntext:\nIt is the Drukhari way to embrace every day as if it's your last.", 2961 + "aspectRatio": { "height": 968, "width": 645 } 2962 + } 2963 + ] 2964 + }, 2965 + "bookmarkCount": 0, 2966 + "replyCount": 2, 2967 + "repostCount": 3, 2968 + "likeCount": 41, 2969 + "quoteCount": 0, 2970 + "indexedAt": "2025-10-18T22:25:05.964Z", 2971 + "viewer": { "bookmarked": false, "threadMuted": false, "embeddingDisabled": false }, 2972 + "labels": [ 2973 + { 2974 + "src": "did:plc:qruaxn2eewkli7hsvzxo5hwf", 2975 + "uri": "at://did:plc:qruaxn2eewkli7hsvzxo5hwf/app.bsky.feed.post/3m3itd6pk7c2r", 2976 + "cid": "bafyreieqppyhsatoy7pbhd65gvcbrsi6peqeagbxvl2z74tqxgfdia365i", 2977 + "val": "porn", 2978 + "cts": "2025-10-18T22:25:02.837Z" 2979 + } 2980 + ] 2981 + }, 2982 + "reply": { 2983 + "root": { 2984 + "uri": "at://did:plc:qruaxn2eewkli7hsvzxo5hwf/app.bsky.feed.post/3m3ireldcdk2r", 2985 + "cid": "bafyreibaj7r76qu346kspkmndm2quie7f3kcpo5ox5k7nu5ncovhfhdk3y", 2986 + "author": { 2987 + "did": "did:plc:qruaxn2eewkli7hsvzxo5hwf", 2988 + "handle": "eva.computer", 2989 + "displayName": "eva (^_^)/", 2990 + "avatar": "https://cdn.bsky.app/img/avatar/plain/did:plc:qruaxn2eewkli7hsvzxo5hwf/bafkreig74mmlupmlki2t6aafekjo4hdlqo6k27zfwdusxtnpvfo4mpurmy@jpeg", 2991 + "associated": { 2992 + "chat": { "allowIncoming": "all" }, 2993 + "activitySubscription": { "allowSubscriptions": "mutuals" } 2994 + }, 2995 + "viewer": { 2996 + "muted": false, 2997 + "blockedBy": false, 2998 + "following": "at://did:plc:yfvwmnlztr4dwkb7hwz55r2g/app.bsky.graph.follow/3k2lyheqnh225", 2999 + "followedBy": "at://did:plc:qruaxn2eewkli7hsvzxo5hwf/app.bsky.graph.follow/3k2lylkwduk2j" 3000 + }, 3001 + "labels": [ 3002 + { 3003 + "cts": "2024-06-28T14:17:21.282Z", 3004 + "src": "did:plc:hysbs7znfgxyb4tsvetzo4sk", 3005 + "uri": "did:plc:qruaxn2eewkli7hsvzxo5hwf", 3006 + "val": "oracle", 3007 + "ver": 1 3008 + }, 3009 + { 3010 + "cts": "2024-05-11T11:30:26.948Z", 3011 + "src": "did:plc:e4elbtctnfqocyfcml6h2lf7", 3012 + "uri": "did:plc:qruaxn2eewkli7hsvzxo5hwf", 3013 + "val": "bluesky-elder", 3014 + "ver": 1 3015 + }, 3016 + { 3017 + "cts": "2025-10-03T21:11:35.075Z", 3018 + "neg": false, 3019 + "src": "did:plc:bpcllqvnvx3dlyrcblqkusat", 3020 + "uri": "did:plc:qruaxn2eewkli7hsvzxo5hwf", 3021 + "val": "zzzzzwaffles", 3022 + "ver": 1 3023 + }, 3024 + { 3025 + "cts": "2024-06-24T04:16:51.276Z", 3026 + "src": "did:plc:aksxl7qy5azlzfm2jstcwqtz", 3027 + "uri": "did:plc:qruaxn2eewkli7hsvzxo5hwf", 3028 + "val": "kiki", 3029 + "ver": 1 3030 + }, 3031 + { 3032 + "src": "did:plc:qruaxn2eewkli7hsvzxo5hwf", 3033 + "uri": "at://did:plc:qruaxn2eewkli7hsvzxo5hwf/app.bsky.actor.profile/self", 3034 + "cid": "bafyreibcn37h6lsmb45q2v2kcefylpev6rqhertmnzrr33fiw6hoscdksm", 3035 + "val": "!no-unauthenticated", 3036 + "cts": "1970-01-01T00:00:00.000Z" 3037 + } 3038 + ], 3039 + "createdAt": "2023-04-26T22:03:28.085Z" 3040 + }, 3041 + "record": { 3042 + "$type": "app.bsky.feed.post", 3043 + "createdAt": "2025-10-18T21:50:02.126Z", 3044 + "embed": { 3045 + "$type": "app.bsky.embed.images", 3046 + "images": [ 3047 + { 3048 + "alt": "IMPURE THOUGHTS\nMUST BE EXPUNGED SISTER-\n\nMmmmerpgh-\n\nSHUT UP.\nONLY PENANCE THROUGH SERVITUDE WILL LOOSEN\nYOUR SHACKLES,\n\n...AND YOU. WILL. SERVE.\n\nMmmmmmmrghhh...", 3049 + "aspectRatio": { "height": 457, "width": 850 }, 3050 + "image": { 3051 + "$type": "blob", 3052 + "ref": { "$link": "bafkreibg6bqapsj6bghz7eykyh3lcnq22cs6njyc4gqqgtrrfcup3sj5lu" }, 3053 + "mimeType": "image/jpeg", 3054 + "size": 264389 3055 + } 3056 + } 3057 + ] 3058 + }, 3059 + "labels": { "$type": "com.atproto.label.defs#selfLabels", "values": [{ "val": "porn" }] }, 3060 + "langs": ["en"], 3061 + "text": "anyways i don’t wanna serious post today\n\npost your favorite adepta sororitas images" 3062 + }, 3063 + "embed": { 3064 + "$type": "app.bsky.embed.images#view", 3065 + "images": [ 3066 + { 3067 + "thumb": "https://cdn.bsky.app/img/feed_thumbnail/plain/did:plc:qruaxn2eewkli7hsvzxo5hwf/bafkreibg6bqapsj6bghz7eykyh3lcnq22cs6njyc4gqqgtrrfcup3sj5lu@jpeg", 3068 + "fullsize": "https://cdn.bsky.app/img/feed_fullsize/plain/did:plc:qruaxn2eewkli7hsvzxo5hwf/bafkreibg6bqapsj6bghz7eykyh3lcnq22cs6njyc4gqqgtrrfcup3sj5lu@jpeg", 3069 + "alt": "IMPURE THOUGHTS\nMUST BE EXPUNGED SISTER-\n\nMmmmerpgh-\n\nSHUT UP.\nONLY PENANCE THROUGH SERVITUDE WILL LOOSEN\nYOUR SHACKLES,\n\n...AND YOU. WILL. SERVE.\n\nMmmmmmmrghhh...", 3070 + "aspectRatio": { "height": 457, "width": 850 } 3071 + } 3072 + ] 3073 + }, 3074 + "bookmarkCount": 18, 3075 + "replyCount": 14, 3076 + "repostCount": 16, 3077 + "likeCount": 163, 3078 + "quoteCount": 0, 3079 + "indexedAt": "2025-10-18T21:50:05.665Z", 3080 + "viewer": { "bookmarked": false, "threadMuted": false, "embeddingDisabled": false }, 3081 + "labels": [ 3082 + { 3083 + "src": "did:plc:qruaxn2eewkli7hsvzxo5hwf", 3084 + "uri": "at://did:plc:qruaxn2eewkli7hsvzxo5hwf/app.bsky.feed.post/3m3ireldcdk2r", 3085 + "cid": "bafyreibaj7r76qu346kspkmndm2quie7f3kcpo5ox5k7nu5ncovhfhdk3y", 3086 + "val": "porn", 3087 + "cts": "2025-10-18T21:50:02.126Z" 3088 + } 3089 + ], 3090 + "$type": "app.bsky.feed.defs#postView" 3091 + }, 3092 + "parent": { 3093 + "uri": "at://did:plc:qruaxn2eewkli7hsvzxo5hwf/app.bsky.feed.post/3m3isgxl4q22r", 3094 + "cid": "bafyreifuwkl3xwx3ddsciphb3ja7fixfm5d43dj5kq5vhm3jfzz7kib4im", 3095 + "author": { 3096 + "did": "did:plc:qruaxn2eewkli7hsvzxo5hwf", 3097 + "handle": "eva.computer", 3098 + "displayName": "eva (^_^)/", 3099 + "avatar": "https://cdn.bsky.app/img/avatar/plain/did:plc:qruaxn2eewkli7hsvzxo5hwf/bafkreig74mmlupmlki2t6aafekjo4hdlqo6k27zfwdusxtnpvfo4mpurmy@jpeg", 3100 + "associated": { 3101 + "chat": { "allowIncoming": "all" }, 3102 + "activitySubscription": { "allowSubscriptions": "mutuals" } 3103 + }, 3104 + "viewer": { 3105 + "muted": false, 3106 + "blockedBy": false, 3107 + "following": "at://did:plc:yfvwmnlztr4dwkb7hwz55r2g/app.bsky.graph.follow/3k2lyheqnh225", 3108 + "followedBy": "at://did:plc:qruaxn2eewkli7hsvzxo5hwf/app.bsky.graph.follow/3k2lylkwduk2j" 3109 + }, 3110 + "labels": [ 3111 + { 3112 + "cts": "2024-06-28T14:17:21.282Z", 3113 + "src": "did:plc:hysbs7znfgxyb4tsvetzo4sk", 3114 + "uri": "did:plc:qruaxn2eewkli7hsvzxo5hwf", 3115 + "val": "oracle", 3116 + "ver": 1 3117 + }, 3118 + { 3119 + "cts": "2024-05-11T11:30:26.948Z", 3120 + "src": "did:plc:e4elbtctnfqocyfcml6h2lf7", 3121 + "uri": "did:plc:qruaxn2eewkli7hsvzxo5hwf", 3122 + "val": "bluesky-elder", 3123 + "ver": 1 3124 + }, 3125 + { 3126 + "cts": "2025-10-03T21:11:35.075Z", 3127 + "neg": false, 3128 + "src": "did:plc:bpcllqvnvx3dlyrcblqkusat", 3129 + "uri": "did:plc:qruaxn2eewkli7hsvzxo5hwf", 3130 + "val": "zzzzzwaffles", 3131 + "ver": 1 3132 + }, 3133 + { 3134 + "cts": "2024-06-24T04:16:51.276Z", 3135 + "src": "did:plc:aksxl7qy5azlzfm2jstcwqtz", 3136 + "uri": "did:plc:qruaxn2eewkli7hsvzxo5hwf", 3137 + "val": "kiki", 3138 + "ver": 1 3139 + }, 3140 + { 3141 + "src": "did:plc:qruaxn2eewkli7hsvzxo5hwf", 3142 + "uri": "at://did:plc:qruaxn2eewkli7hsvzxo5hwf/app.bsky.actor.profile/self", 3143 + "cid": "bafyreibcn37h6lsmb45q2v2kcefylpev6rqhertmnzrr33fiw6hoscdksm", 3144 + "val": "!no-unauthenticated", 3145 + "cts": "1970-01-01T00:00:00.000Z" 3146 + } 3147 + ], 3148 + "createdAt": "2023-04-26T22:03:28.085Z" 3149 + }, 3150 + "record": { 3151 + "$type": "app.bsky.feed.post", 3152 + "createdAt": "2025-10-18T22:09:15.830Z", 3153 + "embed": { 3154 + "$type": "app.bsky.embed.images", 3155 + "images": [ 3156 + { 3157 + "alt": "sister of battle shackled in a kneeling position and forced to read some religious text while candles melt down on her back", 3158 + "aspectRatio": { "height": 1250, "width": 2000 }, 3159 + "image": { 3160 + "$type": "blob", 3161 + "ref": { "$link": "bafkreibgd2oe7ophltodda6pt4uqguzjwpuvdmo5f3xz3l3rz7m7v4zona" }, 3162 + "mimeType": "image/jpeg", 3163 + "size": 653500 3164 + } 3165 + } 3166 + ] 3167 + }, 3168 + "labels": { "$type": "com.atproto.label.defs#selfLabels", "values": [{ "val": "porn" }] }, 3169 + "langs": ["en"], 3170 + "reply": { 3171 + "parent": { 3172 + "cid": "bafyreibaj7r76qu346kspkmndm2quie7f3kcpo5ox5k7nu5ncovhfhdk3y", 3173 + "uri": "at://did:plc:qruaxn2eewkli7hsvzxo5hwf/app.bsky.feed.post/3m3ireldcdk2r" 3174 + }, 3175 + "root": { 3176 + "cid": "bafyreibaj7r76qu346kspkmndm2quie7f3kcpo5ox5k7nu5ncovhfhdk3y", 3177 + "uri": "at://did:plc:qruaxn2eewkli7hsvzxo5hwf/app.bsky.feed.post/3m3ireldcdk2r" 3178 + } 3179 + }, 3180 + "text": "i wonder what she’s reading tbqh" 3181 + }, 3182 + "embed": { 3183 + "$type": "app.bsky.embed.images#view", 3184 + "images": [ 3185 + { 3186 + "thumb": "https://cdn.bsky.app/img/feed_thumbnail/plain/did:plc:qruaxn2eewkli7hsvzxo5hwf/bafkreibgd2oe7ophltodda6pt4uqguzjwpuvdmo5f3xz3l3rz7m7v4zona@jpeg", 3187 + "fullsize": "https://cdn.bsky.app/img/feed_fullsize/plain/did:plc:qruaxn2eewkli7hsvzxo5hwf/bafkreibgd2oe7ophltodda6pt4uqguzjwpuvdmo5f3xz3l3rz7m7v4zona@jpeg", 3188 + "alt": "sister of battle shackled in a kneeling position and forced to read some religious text while candles melt down on her back", 3189 + "aspectRatio": { "height": 1250, "width": 2000 } 3190 + } 3191 + ] 3192 + }, 3193 + "bookmarkCount": 5, 3194 + "replyCount": 6, 3195 + "repostCount": 3, 3196 + "likeCount": 58, 3197 + "quoteCount": 0, 3198 + "indexedAt": "2025-10-18T22:09:19.856Z", 3199 + "viewer": { "bookmarked": false, "threadMuted": false, "embeddingDisabled": false }, 3200 + "labels": [ 3201 + { 3202 + "src": "did:plc:qruaxn2eewkli7hsvzxo5hwf", 3203 + "uri": "at://did:plc:qruaxn2eewkli7hsvzxo5hwf/app.bsky.feed.post/3m3isgxl4q22r", 3204 + "cid": "bafyreifuwkl3xwx3ddsciphb3ja7fixfm5d43dj5kq5vhm3jfzz7kib4im", 3205 + "val": "porn", 3206 + "cts": "2025-10-18T22:09:15.830Z" 3207 + } 3208 + ], 3209 + "$type": "app.bsky.feed.defs#postView" 3210 + }, 3211 + "grandparentAuthor": { 3212 + "did": "did:plc:qruaxn2eewkli7hsvzxo5hwf", 3213 + "handle": "eva.computer", 3214 + "displayName": "eva (^_^)/", 3215 + "avatar": "https://cdn.bsky.app/img/avatar/plain/did:plc:qruaxn2eewkli7hsvzxo5hwf/bafkreig74mmlupmlki2t6aafekjo4hdlqo6k27zfwdusxtnpvfo4mpurmy@jpeg", 3216 + "associated": { 3217 + "chat": { "allowIncoming": "all" }, 3218 + "activitySubscription": { "allowSubscriptions": "mutuals" } 3219 + }, 3220 + "viewer": { 3221 + "muted": false, 3222 + "blockedBy": false, 3223 + "following": "at://did:plc:yfvwmnlztr4dwkb7hwz55r2g/app.bsky.graph.follow/3k2lyheqnh225", 3224 + "followedBy": "at://did:plc:qruaxn2eewkli7hsvzxo5hwf/app.bsky.graph.follow/3k2lylkwduk2j" 3225 + }, 3226 + "labels": [ 3227 + { 3228 + "cts": "2024-06-28T14:17:21.282Z", 3229 + "src": "did:plc:hysbs7znfgxyb4tsvetzo4sk", 3230 + "uri": "did:plc:qruaxn2eewkli7hsvzxo5hwf", 3231 + "val": "oracle", 3232 + "ver": 1 3233 + }, 3234 + { 3235 + "cts": "2024-05-11T11:30:26.948Z", 3236 + "src": "did:plc:e4elbtctnfqocyfcml6h2lf7", 3237 + "uri": "did:plc:qruaxn2eewkli7hsvzxo5hwf", 3238 + "val": "bluesky-elder", 3239 + "ver": 1 3240 + }, 3241 + { 3242 + "cts": "2025-10-03T21:11:35.075Z", 3243 + "neg": false, 3244 + "src": "did:plc:bpcllqvnvx3dlyrcblqkusat", 3245 + "uri": "did:plc:qruaxn2eewkli7hsvzxo5hwf", 3246 + "val": "zzzzzwaffles", 3247 + "ver": 1 3248 + }, 3249 + { 3250 + "cts": "2024-06-24T04:16:51.276Z", 3251 + "src": "did:plc:aksxl7qy5azlzfm2jstcwqtz", 3252 + "uri": "did:plc:qruaxn2eewkli7hsvzxo5hwf", 3253 + "val": "kiki", 3254 + "ver": 1 3255 + }, 3256 + { 3257 + "src": "did:plc:qruaxn2eewkli7hsvzxo5hwf", 3258 + "uri": "at://did:plc:qruaxn2eewkli7hsvzxo5hwf/app.bsky.actor.profile/self", 3259 + "cid": "bafyreibcn37h6lsmb45q2v2kcefylpev6rqhertmnzrr33fiw6hoscdksm", 3260 + "val": "!no-unauthenticated", 3261 + "cts": "1970-01-01T00:00:00.000Z" 3262 + } 3263 + ], 3264 + "createdAt": "2023-04-26T22:03:28.085Z" 3265 + } 3266 + } 3267 + }, 3268 + { 3269 + "post": { 3270 + "uri": "at://did:plc:qruaxn2eewkli7hsvzxo5hwf/app.bsky.feed.post/3m3isgxl4q22r", 3271 + "cid": "bafyreifuwkl3xwx3ddsciphb3ja7fixfm5d43dj5kq5vhm3jfzz7kib4im", 3272 + "author": { 3273 + "did": "did:plc:qruaxn2eewkli7hsvzxo5hwf", 3274 + "handle": "eva.computer", 3275 + "displayName": "eva (^_^)/", 3276 + "avatar": "https://cdn.bsky.app/img/avatar/plain/did:plc:qruaxn2eewkli7hsvzxo5hwf/bafkreig74mmlupmlki2t6aafekjo4hdlqo6k27zfwdusxtnpvfo4mpurmy@jpeg", 3277 + "associated": { 3278 + "chat": { "allowIncoming": "all" }, 3279 + "activitySubscription": { "allowSubscriptions": "mutuals" } 3280 + }, 3281 + "viewer": { 3282 + "muted": false, 3283 + "blockedBy": false, 3284 + "following": "at://did:plc:yfvwmnlztr4dwkb7hwz55r2g/app.bsky.graph.follow/3k2lyheqnh225", 3285 + "followedBy": "at://did:plc:qruaxn2eewkli7hsvzxo5hwf/app.bsky.graph.follow/3k2lylkwduk2j" 3286 + }, 3287 + "labels": [ 3288 + { 3289 + "cts": "2024-06-28T14:17:21.282Z", 3290 + "src": "did:plc:hysbs7znfgxyb4tsvetzo4sk", 3291 + "uri": "did:plc:qruaxn2eewkli7hsvzxo5hwf", 3292 + "val": "oracle", 3293 + "ver": 1 3294 + }, 3295 + { 3296 + "cts": "2024-05-11T11:30:26.948Z", 3297 + "src": "did:plc:e4elbtctnfqocyfcml6h2lf7", 3298 + "uri": "did:plc:qruaxn2eewkli7hsvzxo5hwf", 3299 + "val": "bluesky-elder", 3300 + "ver": 1 3301 + }, 3302 + { 3303 + "cts": "2025-10-03T21:11:35.075Z", 3304 + "neg": false, 3305 + "src": "did:plc:bpcllqvnvx3dlyrcblqkusat", 3306 + "uri": "did:plc:qruaxn2eewkli7hsvzxo5hwf", 3307 + "val": "zzzzzwaffles", 3308 + "ver": 1 3309 + }, 3310 + { 3311 + "cts": "2024-06-24T04:16:51.276Z", 3312 + "src": "did:plc:aksxl7qy5azlzfm2jstcwqtz", 3313 + "uri": "did:plc:qruaxn2eewkli7hsvzxo5hwf", 3314 + "val": "kiki", 3315 + "ver": 1 3316 + }, 3317 + { 3318 + "src": "did:plc:qruaxn2eewkli7hsvzxo5hwf", 3319 + "uri": "at://did:plc:qruaxn2eewkli7hsvzxo5hwf/app.bsky.actor.profile/self", 3320 + "cid": "bafyreibcn37h6lsmb45q2v2kcefylpev6rqhertmnzrr33fiw6hoscdksm", 3321 + "val": "!no-unauthenticated", 3322 + "cts": "1970-01-01T00:00:00.000Z" 3323 + } 3324 + ], 3325 + "createdAt": "2023-04-26T22:03:28.085Z" 3326 + }, 3327 + "record": { 3328 + "$type": "app.bsky.feed.post", 3329 + "createdAt": "2025-10-18T22:09:15.830Z", 3330 + "embed": { 3331 + "$type": "app.bsky.embed.images", 3332 + "images": [ 3333 + { 3334 + "alt": "sister of battle shackled in a kneeling position and forced to read some religious text while candles melt down on her back", 3335 + "aspectRatio": { "height": 1250, "width": 2000 }, 3336 + "image": { 3337 + "$type": "blob", 3338 + "ref": { "$link": "bafkreibgd2oe7ophltodda6pt4uqguzjwpuvdmo5f3xz3l3rz7m7v4zona" }, 3339 + "mimeType": "image/jpeg", 3340 + "size": 653500 3341 + } 3342 + } 3343 + ] 3344 + }, 3345 + "labels": { "$type": "com.atproto.label.defs#selfLabels", "values": [{ "val": "porn" }] }, 3346 + "langs": ["en"], 3347 + "reply": { 3348 + "parent": { 3349 + "cid": "bafyreibaj7r76qu346kspkmndm2quie7f3kcpo5ox5k7nu5ncovhfhdk3y", 3350 + "uri": "at://did:plc:qruaxn2eewkli7hsvzxo5hwf/app.bsky.feed.post/3m3ireldcdk2r" 3351 + }, 3352 + "root": { 3353 + "cid": "bafyreibaj7r76qu346kspkmndm2quie7f3kcpo5ox5k7nu5ncovhfhdk3y", 3354 + "uri": "at://did:plc:qruaxn2eewkli7hsvzxo5hwf/app.bsky.feed.post/3m3ireldcdk2r" 3355 + } 3356 + }, 3357 + "text": "i wonder what she’s reading tbqh" 3358 + }, 3359 + "embed": { 3360 + "$type": "app.bsky.embed.images#view", 3361 + "images": [ 3362 + { 3363 + "thumb": "https://cdn.bsky.app/img/feed_thumbnail/plain/did:plc:qruaxn2eewkli7hsvzxo5hwf/bafkreibgd2oe7ophltodda6pt4uqguzjwpuvdmo5f3xz3l3rz7m7v4zona@jpeg", 3364 + "fullsize": "https://cdn.bsky.app/img/feed_fullsize/plain/did:plc:qruaxn2eewkli7hsvzxo5hwf/bafkreibgd2oe7ophltodda6pt4uqguzjwpuvdmo5f3xz3l3rz7m7v4zona@jpeg", 3365 + "alt": "sister of battle shackled in a kneeling position and forced to read some religious text while candles melt down on her back", 3366 + "aspectRatio": { "height": 1250, "width": 2000 } 3367 + } 3368 + ] 3369 + }, 3370 + "bookmarkCount": 5, 3371 + "replyCount": 6, 3372 + "repostCount": 3, 3373 + "likeCount": 58, 3374 + "quoteCount": 0, 3375 + "indexedAt": "2025-10-18T22:09:19.856Z", 3376 + "viewer": { "bookmarked": false, "threadMuted": false, "embeddingDisabled": false }, 3377 + "labels": [ 3378 + { 3379 + "src": "did:plc:qruaxn2eewkli7hsvzxo5hwf", 3380 + "uri": "at://did:plc:qruaxn2eewkli7hsvzxo5hwf/app.bsky.feed.post/3m3isgxl4q22r", 3381 + "cid": "bafyreifuwkl3xwx3ddsciphb3ja7fixfm5d43dj5kq5vhm3jfzz7kib4im", 3382 + "val": "porn", 3383 + "cts": "2025-10-18T22:09:15.830Z" 3384 + } 3385 + ] 3386 + }, 3387 + "reply": { 3388 + "root": { 3389 + "uri": "at://did:plc:qruaxn2eewkli7hsvzxo5hwf/app.bsky.feed.post/3m3ireldcdk2r", 3390 + "cid": "bafyreibaj7r76qu346kspkmndm2quie7f3kcpo5ox5k7nu5ncovhfhdk3y", 3391 + "author": { 3392 + "did": "did:plc:qruaxn2eewkli7hsvzxo5hwf", 3393 + "handle": "eva.computer", 3394 + "displayName": "eva (^_^)/", 3395 + "avatar": "https://cdn.bsky.app/img/avatar/plain/did:plc:qruaxn2eewkli7hsvzxo5hwf/bafkreig74mmlupmlki2t6aafekjo4hdlqo6k27zfwdusxtnpvfo4mpurmy@jpeg", 3396 + "associated": { 3397 + "chat": { "allowIncoming": "all" }, 3398 + "activitySubscription": { "allowSubscriptions": "mutuals" } 3399 + }, 3400 + "viewer": { 3401 + "muted": false, 3402 + "blockedBy": false, 3403 + "following": "at://did:plc:yfvwmnlztr4dwkb7hwz55r2g/app.bsky.graph.follow/3k2lyheqnh225", 3404 + "followedBy": "at://did:plc:qruaxn2eewkli7hsvzxo5hwf/app.bsky.graph.follow/3k2lylkwduk2j" 3405 + }, 3406 + "labels": [ 3407 + { 3408 + "cts": "2024-06-28T14:17:21.282Z", 3409 + "src": "did:plc:hysbs7znfgxyb4tsvetzo4sk", 3410 + "uri": "did:plc:qruaxn2eewkli7hsvzxo5hwf", 3411 + "val": "oracle", 3412 + "ver": 1 3413 + }, 3414 + { 3415 + "cts": "2024-05-11T11:30:26.948Z", 3416 + "src": "did:plc:e4elbtctnfqocyfcml6h2lf7", 3417 + "uri": "did:plc:qruaxn2eewkli7hsvzxo5hwf", 3418 + "val": "bluesky-elder", 3419 + "ver": 1 3420 + }, 3421 + { 3422 + "cts": "2025-10-03T21:11:35.075Z", 3423 + "neg": false, 3424 + "src": "did:plc:bpcllqvnvx3dlyrcblqkusat", 3425 + "uri": "did:plc:qruaxn2eewkli7hsvzxo5hwf", 3426 + "val": "zzzzzwaffles", 3427 + "ver": 1 3428 + }, 3429 + { 3430 + "cts": "2024-06-24T04:16:51.276Z", 3431 + "src": "did:plc:aksxl7qy5azlzfm2jstcwqtz", 3432 + "uri": "did:plc:qruaxn2eewkli7hsvzxo5hwf", 3433 + "val": "kiki", 3434 + "ver": 1 3435 + }, 3436 + { 3437 + "src": "did:plc:qruaxn2eewkli7hsvzxo5hwf", 3438 + "uri": "at://did:plc:qruaxn2eewkli7hsvzxo5hwf/app.bsky.actor.profile/self", 3439 + "cid": "bafyreibcn37h6lsmb45q2v2kcefylpev6rqhertmnzrr33fiw6hoscdksm", 3440 + "val": "!no-unauthenticated", 3441 + "cts": "1970-01-01T00:00:00.000Z" 3442 + } 3443 + ], 3444 + "createdAt": "2023-04-26T22:03:28.085Z" 3445 + }, 3446 + "record": { 3447 + "$type": "app.bsky.feed.post", 3448 + "createdAt": "2025-10-18T21:50:02.126Z", 3449 + "embed": { 3450 + "$type": "app.bsky.embed.images", 3451 + "images": [ 3452 + { 3453 + "alt": "IMPURE THOUGHTS\nMUST BE EXPUNGED SISTER-\n\nMmmmerpgh-\n\nSHUT UP.\nONLY PENANCE THROUGH SERVITUDE WILL LOOSEN\nYOUR SHACKLES,\n\n...AND YOU. WILL. SERVE.\n\nMmmmmmmrghhh...", 3454 + "aspectRatio": { "height": 457, "width": 850 }, 3455 + "image": { 3456 + "$type": "blob", 3457 + "ref": { "$link": "bafkreibg6bqapsj6bghz7eykyh3lcnq22cs6njyc4gqqgtrrfcup3sj5lu" }, 3458 + "mimeType": "image/jpeg", 3459 + "size": 264389 3460 + } 3461 + } 3462 + ] 3463 + }, 3464 + "labels": { "$type": "com.atproto.label.defs#selfLabels", "values": [{ "val": "porn" }] }, 3465 + "langs": ["en"], 3466 + "text": "anyways i don’t wanna serious post today\n\npost your favorite adepta sororitas images" 3467 + }, 3468 + "embed": { 3469 + "$type": "app.bsky.embed.images#view", 3470 + "images": [ 3471 + { 3472 + "thumb": "https://cdn.bsky.app/img/feed_thumbnail/plain/did:plc:qruaxn2eewkli7hsvzxo5hwf/bafkreibg6bqapsj6bghz7eykyh3lcnq22cs6njyc4gqqgtrrfcup3sj5lu@jpeg", 3473 + "fullsize": "https://cdn.bsky.app/img/feed_fullsize/plain/did:plc:qruaxn2eewkli7hsvzxo5hwf/bafkreibg6bqapsj6bghz7eykyh3lcnq22cs6njyc4gqqgtrrfcup3sj5lu@jpeg", 3474 + "alt": "IMPURE THOUGHTS\nMUST BE EXPUNGED SISTER-\n\nMmmmerpgh-\n\nSHUT UP.\nONLY PENANCE THROUGH SERVITUDE WILL LOOSEN\nYOUR SHACKLES,\n\n...AND YOU. WILL. SERVE.\n\nMmmmmmmrghhh...", 3475 + "aspectRatio": { "height": 457, "width": 850 } 3476 + } 3477 + ] 3478 + }, 3479 + "bookmarkCount": 18, 3480 + "replyCount": 14, 3481 + "repostCount": 16, 3482 + "likeCount": 163, 3483 + "quoteCount": 0, 3484 + "indexedAt": "2025-10-18T21:50:05.665Z", 3485 + "viewer": { "bookmarked": false, "threadMuted": false, "embeddingDisabled": false }, 3486 + "labels": [ 3487 + { 3488 + "src": "did:plc:qruaxn2eewkli7hsvzxo5hwf", 3489 + "uri": "at://did:plc:qruaxn2eewkli7hsvzxo5hwf/app.bsky.feed.post/3m3ireldcdk2r", 3490 + "cid": "bafyreibaj7r76qu346kspkmndm2quie7f3kcpo5ox5k7nu5ncovhfhdk3y", 3491 + "val": "porn", 3492 + "cts": "2025-10-18T21:50:02.126Z" 3493 + } 3494 + ], 3495 + "$type": "app.bsky.feed.defs#postView" 3496 + }, 3497 + "parent": { 3498 + "uri": "at://did:plc:qruaxn2eewkli7hsvzxo5hwf/app.bsky.feed.post/3m3ireldcdk2r", 3499 + "cid": "bafyreibaj7r76qu346kspkmndm2quie7f3kcpo5ox5k7nu5ncovhfhdk3y", 3500 + "author": { 3501 + "did": "did:plc:qruaxn2eewkli7hsvzxo5hwf", 3502 + "handle": "eva.computer", 3503 + "displayName": "eva (^_^)/", 3504 + "avatar": "https://cdn.bsky.app/img/avatar/plain/did:plc:qruaxn2eewkli7hsvzxo5hwf/bafkreig74mmlupmlki2t6aafekjo4hdlqo6k27zfwdusxtnpvfo4mpurmy@jpeg", 3505 + "associated": { 3506 + "chat": { "allowIncoming": "all" }, 3507 + "activitySubscription": { "allowSubscriptions": "mutuals" } 3508 + }, 3509 + "viewer": { 3510 + "muted": false, 3511 + "blockedBy": false, 3512 + "following": "at://did:plc:yfvwmnlztr4dwkb7hwz55r2g/app.bsky.graph.follow/3k2lyheqnh225", 3513 + "followedBy": "at://did:plc:qruaxn2eewkli7hsvzxo5hwf/app.bsky.graph.follow/3k2lylkwduk2j" 3514 + }, 3515 + "labels": [ 3516 + { 3517 + "cts": "2024-06-28T14:17:21.282Z", 3518 + "src": "did:plc:hysbs7znfgxyb4tsvetzo4sk", 3519 + "uri": "did:plc:qruaxn2eewkli7hsvzxo5hwf", 3520 + "val": "oracle", 3521 + "ver": 1 3522 + }, 3523 + { 3524 + "cts": "2024-05-11T11:30:26.948Z", 3525 + "src": "did:plc:e4elbtctnfqocyfcml6h2lf7", 3526 + "uri": "did:plc:qruaxn2eewkli7hsvzxo5hwf", 3527 + "val": "bluesky-elder", 3528 + "ver": 1 3529 + }, 3530 + { 3531 + "cts": "2025-10-03T21:11:35.075Z", 3532 + "neg": false, 3533 + "src": "did:plc:bpcllqvnvx3dlyrcblqkusat", 3534 + "uri": "did:plc:qruaxn2eewkli7hsvzxo5hwf", 3535 + "val": "zzzzzwaffles", 3536 + "ver": 1 3537 + }, 3538 + { 3539 + "cts": "2024-06-24T04:16:51.276Z", 3540 + "src": "did:plc:aksxl7qy5azlzfm2jstcwqtz", 3541 + "uri": "did:plc:qruaxn2eewkli7hsvzxo5hwf", 3542 + "val": "kiki", 3543 + "ver": 1 3544 + }, 3545 + { 3546 + "src": "did:plc:qruaxn2eewkli7hsvzxo5hwf", 3547 + "uri": "at://did:plc:qruaxn2eewkli7hsvzxo5hwf/app.bsky.actor.profile/self", 3548 + "cid": "bafyreibcn37h6lsmb45q2v2kcefylpev6rqhertmnzrr33fiw6hoscdksm", 3549 + "val": "!no-unauthenticated", 3550 + "cts": "1970-01-01T00:00:00.000Z" 3551 + } 3552 + ], 3553 + "createdAt": "2023-04-26T22:03:28.085Z" 3554 + }, 3555 + "record": { 3556 + "$type": "app.bsky.feed.post", 3557 + "createdAt": "2025-10-18T21:50:02.126Z", 3558 + "embed": { 3559 + "$type": "app.bsky.embed.images", 3560 + "images": [ 3561 + { 3562 + "alt": "IMPURE THOUGHTS\nMUST BE EXPUNGED SISTER-\n\nMmmmerpgh-\n\nSHUT UP.\nONLY PENANCE THROUGH SERVITUDE WILL LOOSEN\nYOUR SHACKLES,\n\n...AND YOU. WILL. SERVE.\n\nMmmmmmmrghhh...", 3563 + "aspectRatio": { "height": 457, "width": 850 }, 3564 + "image": { 3565 + "$type": "blob", 3566 + "ref": { "$link": "bafkreibg6bqapsj6bghz7eykyh3lcnq22cs6njyc4gqqgtrrfcup3sj5lu" }, 3567 + "mimeType": "image/jpeg", 3568 + "size": 264389 3569 + } 3570 + } 3571 + ] 3572 + }, 3573 + "labels": { "$type": "com.atproto.label.defs#selfLabels", "values": [{ "val": "porn" }] }, 3574 + "langs": ["en"], 3575 + "text": "anyways i don’t wanna serious post today\n\npost your favorite adepta sororitas images" 3576 + }, 3577 + "embed": { 3578 + "$type": "app.bsky.embed.images#view", 3579 + "images": [ 3580 + { 3581 + "thumb": "https://cdn.bsky.app/img/feed_thumbnail/plain/did:plc:qruaxn2eewkli7hsvzxo5hwf/bafkreibg6bqapsj6bghz7eykyh3lcnq22cs6njyc4gqqgtrrfcup3sj5lu@jpeg", 3582 + "fullsize": "https://cdn.bsky.app/img/feed_fullsize/plain/did:plc:qruaxn2eewkli7hsvzxo5hwf/bafkreibg6bqapsj6bghz7eykyh3lcnq22cs6njyc4gqqgtrrfcup3sj5lu@jpeg", 3583 + "alt": "IMPURE THOUGHTS\nMUST BE EXPUNGED SISTER-\n\nMmmmerpgh-\n\nSHUT UP.\nONLY PENANCE THROUGH SERVITUDE WILL LOOSEN\nYOUR SHACKLES,\n\n...AND YOU. WILL. SERVE.\n\nMmmmmmmrghhh...", 3584 + "aspectRatio": { "height": 457, "width": 850 } 3585 + } 3586 + ] 3587 + }, 3588 + "bookmarkCount": 18, 3589 + "replyCount": 14, 3590 + "repostCount": 16, 3591 + "likeCount": 163, 3592 + "quoteCount": 0, 3593 + "indexedAt": "2025-10-18T21:50:05.665Z", 3594 + "viewer": { "bookmarked": false, "threadMuted": false, "embeddingDisabled": false }, 3595 + "labels": [ 3596 + { 3597 + "src": "did:plc:qruaxn2eewkli7hsvzxo5hwf", 3598 + "uri": "at://did:plc:qruaxn2eewkli7hsvzxo5hwf/app.bsky.feed.post/3m3ireldcdk2r", 3599 + "cid": "bafyreibaj7r76qu346kspkmndm2quie7f3kcpo5ox5k7nu5ncovhfhdk3y", 3600 + "val": "porn", 3601 + "cts": "2025-10-18T21:50:02.126Z" 3602 + } 3603 + ], 3604 + "$type": "app.bsky.feed.defs#postView" 3605 + } 3606 + } 3607 + }, 3608 + { 3609 + "post": { 3610 + "uri": "at://did:plc:qruaxn2eewkli7hsvzxo5hwf/app.bsky.feed.post/3m3ireldcdk2r", 3611 + "cid": "bafyreibaj7r76qu346kspkmndm2quie7f3kcpo5ox5k7nu5ncovhfhdk3y", 3612 + "author": { 3613 + "did": "did:plc:qruaxn2eewkli7hsvzxo5hwf", 3614 + "handle": "eva.computer", 3615 + "displayName": "eva (^_^)/", 3616 + "avatar": "https://cdn.bsky.app/img/avatar/plain/did:plc:qruaxn2eewkli7hsvzxo5hwf/bafkreig74mmlupmlki2t6aafekjo4hdlqo6k27zfwdusxtnpvfo4mpurmy@jpeg", 3617 + "associated": { 3618 + "chat": { "allowIncoming": "all" }, 3619 + "activitySubscription": { "allowSubscriptions": "mutuals" } 3620 + }, 3621 + "viewer": { 3622 + "muted": false, 3623 + "blockedBy": false, 3624 + "following": "at://did:plc:yfvwmnlztr4dwkb7hwz55r2g/app.bsky.graph.follow/3k2lyheqnh225", 3625 + "followedBy": "at://did:plc:qruaxn2eewkli7hsvzxo5hwf/app.bsky.graph.follow/3k2lylkwduk2j" 3626 + }, 3627 + "labels": [ 3628 + { 3629 + "cts": "2024-06-28T14:17:21.282Z", 3630 + "src": "did:plc:hysbs7znfgxyb4tsvetzo4sk", 3631 + "uri": "did:plc:qruaxn2eewkli7hsvzxo5hwf", 3632 + "val": "oracle", 3633 + "ver": 1 3634 + }, 3635 + { 3636 + "cts": "2024-05-11T11:30:26.948Z", 3637 + "src": "did:plc:e4elbtctnfqocyfcml6h2lf7", 3638 + "uri": "did:plc:qruaxn2eewkli7hsvzxo5hwf", 3639 + "val": "bluesky-elder", 3640 + "ver": 1 3641 + }, 3642 + { 3643 + "cts": "2025-10-03T21:11:35.075Z", 3644 + "neg": false, 3645 + "src": "did:plc:bpcllqvnvx3dlyrcblqkusat", 3646 + "uri": "did:plc:qruaxn2eewkli7hsvzxo5hwf", 3647 + "val": "zzzzzwaffles", 3648 + "ver": 1 3649 + }, 3650 + { 3651 + "cts": "2024-06-24T04:16:51.276Z", 3652 + "src": "did:plc:aksxl7qy5azlzfm2jstcwqtz", 3653 + "uri": "did:plc:qruaxn2eewkli7hsvzxo5hwf", 3654 + "val": "kiki", 3655 + "ver": 1 3656 + }, 3657 + { 3658 + "src": "did:plc:qruaxn2eewkli7hsvzxo5hwf", 3659 + "uri": "at://did:plc:qruaxn2eewkli7hsvzxo5hwf/app.bsky.actor.profile/self", 3660 + "cid": "bafyreibcn37h6lsmb45q2v2kcefylpev6rqhertmnzrr33fiw6hoscdksm", 3661 + "val": "!no-unauthenticated", 3662 + "cts": "1970-01-01T00:00:00.000Z" 3663 + } 3664 + ], 3665 + "createdAt": "2023-04-26T22:03:28.085Z" 3666 + }, 3667 + "record": { 3668 + "$type": "app.bsky.feed.post", 3669 + "createdAt": "2025-10-18T21:50:02.126Z", 3670 + "embed": { 3671 + "$type": "app.bsky.embed.images", 3672 + "images": [ 3673 + { 3674 + "alt": "IMPURE THOUGHTS\nMUST BE EXPUNGED SISTER-\n\nMmmmerpgh-\n\nSHUT UP.\nONLY PENANCE THROUGH SERVITUDE WILL LOOSEN\nYOUR SHACKLES,\n\n...AND YOU. WILL. SERVE.\n\nMmmmmmmrghhh...", 3675 + "aspectRatio": { "height": 457, "width": 850 }, 3676 + "image": { 3677 + "$type": "blob", 3678 + "ref": { "$link": "bafkreibg6bqapsj6bghz7eykyh3lcnq22cs6njyc4gqqgtrrfcup3sj5lu" }, 3679 + "mimeType": "image/jpeg", 3680 + "size": 264389 3681 + } 3682 + } 3683 + ] 3684 + }, 3685 + "labels": { "$type": "com.atproto.label.defs#selfLabels", "values": [{ "val": "porn" }] }, 3686 + "langs": ["en"], 3687 + "text": "anyways i don’t wanna serious post today\n\npost your favorite adepta sororitas images" 3688 + }, 3689 + "embed": { 3690 + "$type": "app.bsky.embed.images#view", 3691 + "images": [ 3692 + { 3693 + "thumb": "https://cdn.bsky.app/img/feed_thumbnail/plain/did:plc:qruaxn2eewkli7hsvzxo5hwf/bafkreibg6bqapsj6bghz7eykyh3lcnq22cs6njyc4gqqgtrrfcup3sj5lu@jpeg", 3694 + "fullsize": "https://cdn.bsky.app/img/feed_fullsize/plain/did:plc:qruaxn2eewkli7hsvzxo5hwf/bafkreibg6bqapsj6bghz7eykyh3lcnq22cs6njyc4gqqgtrrfcup3sj5lu@jpeg", 3695 + "alt": "IMPURE THOUGHTS\nMUST BE EXPUNGED SISTER-\n\nMmmmerpgh-\n\nSHUT UP.\nONLY PENANCE THROUGH SERVITUDE WILL LOOSEN\nYOUR SHACKLES,\n\n...AND YOU. WILL. SERVE.\n\nMmmmmmmrghhh...", 3696 + "aspectRatio": { "height": 457, "width": 850 } 3697 + } 3698 + ] 3699 + }, 3700 + "bookmarkCount": 18, 3701 + "replyCount": 14, 3702 + "repostCount": 16, 3703 + "likeCount": 163, 3704 + "quoteCount": 0, 3705 + "indexedAt": "2025-10-18T21:50:05.665Z", 3706 + "viewer": { "bookmarked": false, "threadMuted": false, "embeddingDisabled": false }, 3707 + "labels": [ 3708 + { 3709 + "src": "did:plc:qruaxn2eewkli7hsvzxo5hwf", 3710 + "uri": "at://did:plc:qruaxn2eewkli7hsvzxo5hwf/app.bsky.feed.post/3m3ireldcdk2r", 3711 + "cid": "bafyreibaj7r76qu346kspkmndm2quie7f3kcpo5ox5k7nu5ncovhfhdk3y", 3712 + "val": "porn", 3713 + "cts": "2025-10-18T21:50:02.126Z" 3714 + } 3715 + ] 3716 + } 3717 + }, 3718 + { 3719 + "post": { 3720 + "uri": "at://did:plc:ybcqvkcib4ysg6na6vyi43e5/app.bsky.feed.post/3m3hwegddgs2s", 3721 + "cid": "bafyreieu5ltek5njwgyqfyamhvizidbnzs4paykv5e7wjowyya56ifrlzq", 3722 + "author": { 3723 + "did": "did:plc:ybcqvkcib4ysg6na6vyi43e5", 3724 + "handle": "dollblood.garden", 3725 + "displayName": "𒀭Charlotte♛✦", 3726 + "avatar": "https://cdn.bsky.app/img/avatar/plain/did:plc:ybcqvkcib4ysg6na6vyi43e5/bafkreiflxfrwtlbfzsf6wmirb3qotsbp7cnr5fbi65hhxtp7cu6un62hsm@jpeg", 3727 + "associated": { 3728 + "chat": { "allowIncoming": "following" }, 3729 + "activitySubscription": { "allowSubscriptions": "followers" } 3730 + }, 3731 + "viewer": { 3732 + "muted": false, 3733 + "blockedBy": false, 3734 + "following": "at://did:plc:yfvwmnlztr4dwkb7hwz55r2g/app.bsky.graph.follow/3laffyi2n2e25" 3735 + }, 3736 + "labels": [ 3737 + { 3738 + "cts": "2024-07-24T01:01:42.161Z", 3739 + "src": "did:plc:hysbs7znfgxyb4tsvetzo4sk", 3740 + "uri": "did:plc:ybcqvkcib4ysg6na6vyi43e5", 3741 + "val": "alchemist", 3742 + "ver": 1 3743 + }, 3744 + { 3745 + "cts": "2024-07-24T06:00:56.209Z", 3746 + "src": "did:plc:hysbs7znfgxyb4tsvetzo4sk", 3747 + "uri": "did:plc:ybcqvkcib4ysg6na6vyi43e5", 3748 + "val": "catfolk", 3749 + "ver": 1 3750 + }, 3751 + { 3752 + "cts": "2024-07-24T06:02:45.247Z", 3753 + "src": "did:plc:hysbs7znfgxyb4tsvetzo4sk", 3754 + "uri": "did:plc:ybcqvkcib4ysg6na6vyi43e5", 3755 + "val": "witch", 3756 + "ver": 1 3757 + }, 3758 + { 3759 + "src": "did:plc:ybcqvkcib4ysg6na6vyi43e5", 3760 + "uri": "at://did:plc:ybcqvkcib4ysg6na6vyi43e5/app.bsky.actor.profile/self", 3761 + "cid": "bafyreifraeaynz5dhw2py2t7e7suazu3nfak2fy4yajqjjutwjlb2lacta", 3762 + "val": "!no-unauthenticated", 3763 + "cts": "2024-07-23T20:54:22.082Z" 3764 + } 3765 + ], 3766 + "createdAt": "2024-07-23T20:54:22.474Z" 3767 + }, 3768 + "record": { 3769 + "$type": "app.bsky.feed.post", 3770 + "createdAt": "2025-10-18T13:46:45.860Z", 3771 + "embed": { 3772 + "$type": "app.bsky.embed.images", 3773 + "images": [ 3774 + { 3775 + "alt": "wip", 3776 + "aspectRatio": { "height": 870, "width": 1236 }, 3777 + "image": { 3778 + "$type": "blob", 3779 + "ref": { "$link": "bafkreigcpbzudiypssq3rqbihsm5xxklpynwdenfq44wss5rgbb4exmevm" }, 3780 + "mimeType": "image/jpeg", 3781 + "size": 823514 3782 + } 3783 + } 3784 + ] 3785 + }, 3786 + "labels": { "$type": "com.atproto.label.defs#selfLabels", "values": [{ "val": "sexual" }] }, 3787 + "langs": ["en"], 3788 + "reply": { 3789 + "parent": { 3790 + "cid": "bafyreifswpqp7l2gjdxjzrbcnmlpchyq3ominfurnrptkeprhkmtofolqm", 3791 + "uri": "at://did:plc:ybcqvkcib4ysg6na6vyi43e5/app.bsky.feed.post/3m3hvzcgjzs2s" 3792 + }, 3793 + "root": { 3794 + "cid": "bafyreifswpqp7l2gjdxjzrbcnmlpchyq3ominfurnrptkeprhkmtofolqm", 3795 + "uri": "at://did:plc:ybcqvkcib4ysg6na6vyi43e5/app.bsky.feed.post/3m3hvzcgjzs2s" 3796 + } 3797 + }, 3798 + "text": "No one will see it if it’s not the top of the thread" 3799 + }, 3800 + "embed": { 3801 + "$type": "app.bsky.embed.images#view", 3802 + "images": [ 3803 + { 3804 + "thumb": "https://cdn.bsky.app/img/feed_thumbnail/plain/did:plc:ybcqvkcib4ysg6na6vyi43e5/bafkreigcpbzudiypssq3rqbihsm5xxklpynwdenfq44wss5rgbb4exmevm@jpeg", 3805 + "fullsize": "https://cdn.bsky.app/img/feed_fullsize/plain/did:plc:ybcqvkcib4ysg6na6vyi43e5/bafkreigcpbzudiypssq3rqbihsm5xxklpynwdenfq44wss5rgbb4exmevm@jpeg", 3806 + "alt": "wip", 3807 + "aspectRatio": { "height": 870, "width": 1236 } 3808 + } 3809 + ] 3810 + }, 3811 + "bookmarkCount": 0, 3812 + "replyCount": 3, 3813 + "repostCount": 0, 3814 + "likeCount": 15, 3815 + "quoteCount": 0, 3816 + "indexedAt": "2025-10-18T13:46:48.458Z", 3817 + "viewer": { "bookmarked": false, "threadMuted": false, "embeddingDisabled": false }, 3818 + "labels": [ 3819 + { 3820 + "src": "did:plc:ybcqvkcib4ysg6na6vyi43e5", 3821 + "uri": "at://did:plc:ybcqvkcib4ysg6na6vyi43e5/app.bsky.feed.post/3m3hwegddgs2s", 3822 + "cid": "bafyreieu5ltek5njwgyqfyamhvizidbnzs4paykv5e7wjowyya56ifrlzq", 3823 + "val": "sexual", 3824 + "cts": "2025-10-18T13:46:45.860Z" 3825 + } 3826 + ] 3827 + }, 3828 + "reply": { 3829 + "root": { 3830 + "uri": "at://did:plc:ybcqvkcib4ysg6na6vyi43e5/app.bsky.feed.post/3m3hvzcgjzs2s", 3831 + "cid": "bafyreifswpqp7l2gjdxjzrbcnmlpchyq3ominfurnrptkeprhkmtofolqm", 3832 + "author": { 3833 + "did": "did:plc:ybcqvkcib4ysg6na6vyi43e5", 3834 + "handle": "dollblood.garden", 3835 + "displayName": "𒀭Charlotte♛✦", 3836 + "avatar": "https://cdn.bsky.app/img/avatar/plain/did:plc:ybcqvkcib4ysg6na6vyi43e5/bafkreiflxfrwtlbfzsf6wmirb3qotsbp7cnr5fbi65hhxtp7cu6un62hsm@jpeg", 3837 + "associated": { 3838 + "chat": { "allowIncoming": "following" }, 3839 + "activitySubscription": { "allowSubscriptions": "followers" } 3840 + }, 3841 + "viewer": { 3842 + "muted": false, 3843 + "blockedBy": false, 3844 + "following": "at://did:plc:yfvwmnlztr4dwkb7hwz55r2g/app.bsky.graph.follow/3laffyi2n2e25" 3845 + }, 3846 + "labels": [ 3847 + { 3848 + "cts": "2024-07-24T01:01:42.161Z", 3849 + "src": "did:plc:hysbs7znfgxyb4tsvetzo4sk", 3850 + "uri": "did:plc:ybcqvkcib4ysg6na6vyi43e5", 3851 + "val": "alchemist", 3852 + "ver": 1 3853 + }, 3854 + { 3855 + "cts": "2024-07-24T06:00:56.209Z", 3856 + "src": "did:plc:hysbs7znfgxyb4tsvetzo4sk", 3857 + "uri": "did:plc:ybcqvkcib4ysg6na6vyi43e5", 3858 + "val": "catfolk", 3859 + "ver": 1 3860 + }, 3861 + { 3862 + "cts": "2024-07-24T06:02:45.247Z", 3863 + "src": "did:plc:hysbs7znfgxyb4tsvetzo4sk", 3864 + "uri": "did:plc:ybcqvkcib4ysg6na6vyi43e5", 3865 + "val": "witch", 3866 + "ver": 1 3867 + }, 3868 + { 3869 + "src": "did:plc:ybcqvkcib4ysg6na6vyi43e5", 3870 + "uri": "at://did:plc:ybcqvkcib4ysg6na6vyi43e5/app.bsky.actor.profile/self", 3871 + "cid": "bafyreifraeaynz5dhw2py2t7e7suazu3nfak2fy4yajqjjutwjlb2lacta", 3872 + "val": "!no-unauthenticated", 3873 + "cts": "2024-07-23T20:54:22.082Z" 3874 + } 3875 + ], 3876 + "createdAt": "2024-07-23T20:54:22.474Z" 3877 + }, 3878 + "record": { 3879 + "$type": "app.bsky.feed.post", 3880 + "createdAt": "2025-10-18T13:40:32.683Z", 3881 + "langs": ["en"], 3882 + "text": "Took a picture of my stomach I didn’t hate" 3883 + }, 3884 + "bookmarkCount": 0, 3885 + "replyCount": 2, 3886 + "repostCount": 0, 3887 + "likeCount": 10, 3888 + "quoteCount": 0, 3889 + "indexedAt": "2025-10-18T13:40:33.154Z", 3890 + "viewer": { "bookmarked": false, "threadMuted": false, "embeddingDisabled": false }, 3891 + "labels": [], 3892 + "$type": "app.bsky.feed.defs#postView" 3893 + }, 3894 + "parent": { 3895 + "uri": "at://did:plc:ybcqvkcib4ysg6na6vyi43e5/app.bsky.feed.post/3m3hvzcgjzs2s", 3896 + "cid": "bafyreifswpqp7l2gjdxjzrbcnmlpchyq3ominfurnrptkeprhkmtofolqm", 3897 + "author": { 3898 + "did": "did:plc:ybcqvkcib4ysg6na6vyi43e5", 3899 + "handle": "dollblood.garden", 3900 + "displayName": "𒀭Charlotte♛✦", 3901 + "avatar": "https://cdn.bsky.app/img/avatar/plain/did:plc:ybcqvkcib4ysg6na6vyi43e5/bafkreiflxfrwtlbfzsf6wmirb3qotsbp7cnr5fbi65hhxtp7cu6un62hsm@jpeg", 3902 + "associated": { 3903 + "chat": { "allowIncoming": "following" }, 3904 + "activitySubscription": { "allowSubscriptions": "followers" } 3905 + }, 3906 + "viewer": { 3907 + "muted": false, 3908 + "blockedBy": false, 3909 + "following": "at://did:plc:yfvwmnlztr4dwkb7hwz55r2g/app.bsky.graph.follow/3laffyi2n2e25" 3910 + }, 3911 + "labels": [ 3912 + { 3913 + "cts": "2024-07-24T01:01:42.161Z", 3914 + "src": "did:plc:hysbs7znfgxyb4tsvetzo4sk", 3915 + "uri": "did:plc:ybcqvkcib4ysg6na6vyi43e5", 3916 + "val": "alchemist", 3917 + "ver": 1 3918 + }, 3919 + { 3920 + "cts": "2024-07-24T06:00:56.209Z", 3921 + "src": "did:plc:hysbs7znfgxyb4tsvetzo4sk", 3922 + "uri": "did:plc:ybcqvkcib4ysg6na6vyi43e5", 3923 + "val": "catfolk", 3924 + "ver": 1 3925 + }, 3926 + { 3927 + "cts": "2024-07-24T06:02:45.247Z", 3928 + "src": "did:plc:hysbs7znfgxyb4tsvetzo4sk", 3929 + "uri": "did:plc:ybcqvkcib4ysg6na6vyi43e5", 3930 + "val": "witch", 3931 + "ver": 1 3932 + }, 3933 + { 3934 + "src": "did:plc:ybcqvkcib4ysg6na6vyi43e5", 3935 + "uri": "at://did:plc:ybcqvkcib4ysg6na6vyi43e5/app.bsky.actor.profile/self", 3936 + "cid": "bafyreifraeaynz5dhw2py2t7e7suazu3nfak2fy4yajqjjutwjlb2lacta", 3937 + "val": "!no-unauthenticated", 3938 + "cts": "2024-07-23T20:54:22.082Z" 3939 + } 3940 + ], 3941 + "createdAt": "2024-07-23T20:54:22.474Z" 3942 + }, 3943 + "record": { 3944 + "$type": "app.bsky.feed.post", 3945 + "createdAt": "2025-10-18T13:40:32.683Z", 3946 + "langs": ["en"], 3947 + "text": "Took a picture of my stomach I didn’t hate" 3948 + }, 3949 + "bookmarkCount": 0, 3950 + "replyCount": 2, 3951 + "repostCount": 0, 3952 + "likeCount": 10, 3953 + "quoteCount": 0, 3954 + "indexedAt": "2025-10-18T13:40:33.154Z", 3955 + "viewer": { "bookmarked": false, "threadMuted": false, "embeddingDisabled": false }, 3956 + "labels": [], 3957 + "$type": "app.bsky.feed.defs#postView" 3958 + } 3959 + } 3960 + }, 3961 + { 3962 + "post": { 3963 + "uri": "at://did:plc:ai5s7zsohtvwsmhfo6ssf76y/app.bsky.feed.post/3m3e7clu7jc2r", 3964 + "cid": "bafyreihn5u5aag2spm66ad6ggbdnouusqwgoj6cgu25rfglwzygtlwhq2a", 3965 + "author": { 3966 + "did": "did:plc:ai5s7zsohtvwsmhfo6ssf76y", 3967 + "handle": "calamaricakes.bsky.social", 3968 + "displayName": "Calamari Cakes", 3969 + "avatar": "https://cdn.bsky.app/img/avatar/plain/did:plc:ai5s7zsohtvwsmhfo6ssf76y/bafkreigd5x5faqbnmaoisbztj4boboguakez6nmpnmhu64kfiurf4paeby@jpeg", 3970 + "associated": { 3971 + "chat": { "allowIncoming": "all" }, 3972 + "activitySubscription": { "allowSubscriptions": "followers" } 3973 + }, 3974 + "viewer": { 3975 + "muted": false, 3976 + "blockedBy": false, 3977 + "following": "at://did:plc:yfvwmnlztr4dwkb7hwz55r2g/app.bsky.graph.follow/3lbu7cinm7n2u" 3978 + }, 3979 + "labels": [], 3980 + "createdAt": "2024-01-24T02:59:41.281Z" 3981 + }, 3982 + "record": { 3983 + "$type": "app.bsky.feed.post", 3984 + "createdAt": "2025-10-17T02:16:09.282Z", 3985 + "embed": { 3986 + "$type": "app.bsky.embed.video", 3987 + "aspectRatio": { "height": 764, "width": 1350 }, 3988 + "video": { 3989 + "$type": "blob", 3990 + "ref": { "$link": "bafkreie6rm3kmveu7elcwx33irebd6wdaqcg542g6afu3eryjfcx4sxrdq" }, 3991 + "mimeType": "video/mp4", 3992 + "size": 667361 3993 + } 3994 + }, 3995 + "facets": [ 3996 + { 3997 + "features": [ 3998 + { "$type": "app.bsky.richtext.facet#link", "uri": "https://subscribestar.adult/CalamariCakes" } 3999 + ], 4000 + "index": { "byteEnd": 243, "byteStart": 210 } 4001 + }, 4002 + { 4003 + "features": [{ "$type": "app.bsky.richtext.facet#link", "uri": "https://patreon.com/CalamariCakes" }], 4004 + "index": { "byteEnd": 277, "byteStart": 252 } 4005 + } 4006 + ], 4007 + "labels": { "$type": "com.atproto.label.defs#selfLabels", "values": [{ "val": "porn" }] }, 4008 + "langs": ["en"], 4009 + "reply": { 4010 + "parent": { 4011 + "cid": "bafyreihszbu6vkcxxfeigeovzow4sdrq75fyxdqdwp5dbtb3vpfozexnui", 4012 + "uri": "at://did:plc:ai5s7zsohtvwsmhfo6ssf76y/app.bsky.feed.post/3m3dzmexfps2b" 4013 + }, 4014 + "root": { 4015 + "cid": "bafyreihszbu6vkcxxfeigeovzow4sdrq75fyxdqdwp5dbtb3vpfozexnui", 4016 + "uri": "at://did:plc:ai5s7zsohtvwsmhfo6ssf76y/app.bsky.feed.post/3m3dzmexfps2b" 4017 + } 4018 + }, 4019 + "text": "This was the first of my Kinktober animations, decided upon via patron-only poll! Alts (if you want to see Lighter get in on the shibari too) + another 1 or 2 kink-themed polls this month at the usual places:\n\nsubscribestar.adult/CalamariCakes 💚\nor patreon.com/CalamariCakes 🧡" 4020 + }, 4021 + "embed": { 4022 + "$type": "app.bsky.embed.video#view", 4023 + "cid": "bafkreie6rm3kmveu7elcwx33irebd6wdaqcg542g6afu3eryjfcx4sxrdq", 4024 + "playlist": "https://video.bsky.app/watch/did%3Aplc%3Aai5s7zsohtvwsmhfo6ssf76y/bafkreie6rm3kmveu7elcwx33irebd6wdaqcg542g6afu3eryjfcx4sxrdq/playlist.m3u8", 4025 + "thumbnail": "https://video.bsky.app/watch/did%3Aplc%3Aai5s7zsohtvwsmhfo6ssf76y/bafkreie6rm3kmveu7elcwx33irebd6wdaqcg542g6afu3eryjfcx4sxrdq/thumbnail.jpg", 4026 + "aspectRatio": { "height": 764, "width": 1350 } 4027 + }, 4028 + "bookmarkCount": 0, 4029 + "replyCount": 0, 4030 + "repostCount": 3, 4031 + "likeCount": 64, 4032 + "quoteCount": 0, 4033 + "indexedAt": "2025-10-17T02:16:10.260Z", 4034 + "viewer": { "bookmarked": false, "threadMuted": false, "embeddingDisabled": false }, 4035 + "labels": [ 4036 + { 4037 + "src": "did:plc:ai5s7zsohtvwsmhfo6ssf76y", 4038 + "uri": "at://did:plc:ai5s7zsohtvwsmhfo6ssf76y/app.bsky.feed.post/3m3e7clu7jc2r", 4039 + "cid": "bafyreihn5u5aag2spm66ad6ggbdnouusqwgoj6cgu25rfglwzygtlwhq2a", 4040 + "val": "porn", 4041 + "cts": "2025-10-17T02:16:09.282Z" 4042 + } 4043 + ] 4044 + }, 4045 + "reply": { 4046 + "root": { 4047 + "uri": "at://did:plc:ai5s7zsohtvwsmhfo6ssf76y/app.bsky.feed.post/3m3dzmexfps2b", 4048 + "cid": "bafyreihszbu6vkcxxfeigeovzow4sdrq75fyxdqdwp5dbtb3vpfozexnui", 4049 + "author": { 4050 + "did": "did:plc:ai5s7zsohtvwsmhfo6ssf76y", 4051 + "handle": "calamaricakes.bsky.social", 4052 + "displayName": "Calamari Cakes", 4053 + "avatar": "https://cdn.bsky.app/img/avatar/plain/did:plc:ai5s7zsohtvwsmhfo6ssf76y/bafkreigd5x5faqbnmaoisbztj4boboguakez6nmpnmhu64kfiurf4paeby@jpeg", 4054 + "associated": { 4055 + "chat": { "allowIncoming": "all" }, 4056 + "activitySubscription": { "allowSubscriptions": "followers" } 4057 + }, 4058 + "viewer": { 4059 + "muted": false, 4060 + "blockedBy": false, 4061 + "following": "at://did:plc:yfvwmnlztr4dwkb7hwz55r2g/app.bsky.graph.follow/3lbu7cinm7n2u" 4062 + }, 4063 + "labels": [], 4064 + "createdAt": "2024-01-24T02:59:41.281Z" 4065 + }, 4066 + "record": { 4067 + "$type": "app.bsky.feed.post", 4068 + "createdAt": "2025-10-17T00:34:15.140Z", 4069 + "embed": { 4070 + "$type": "app.bsky.embed.video", 4071 + "aspectRatio": { "height": 1080, "width": 1350 }, 4072 + "video": { 4073 + "$type": "blob", 4074 + "ref": { "$link": "bafkreiexmkaqmungbfakzw3pkw43edt7hdtcby4bcsdum44xltnrxgufce" }, 4075 + "mimeType": "video/mp4", 4076 + "size": 1209390 4077 + } 4078 + }, 4079 + "labels": { "$type": "com.atproto.label.defs#selfLabels", "values": [{ "val": "porn" }] }, 4080 + "langs": ["en"], 4081 + "text": "Burnice enjoying some cardio~ 😇" 4082 + }, 4083 + "embed": { 4084 + "$type": "app.bsky.embed.video#view", 4085 + "cid": "bafkreiexmkaqmungbfakzw3pkw43edt7hdtcby4bcsdum44xltnrxgufce", 4086 + "playlist": "https://video.bsky.app/watch/did%3Aplc%3Aai5s7zsohtvwsmhfo6ssf76y/bafkreiexmkaqmungbfakzw3pkw43edt7hdtcby4bcsdum44xltnrxgufce/playlist.m3u8", 4087 + "thumbnail": "https://video.bsky.app/watch/did%3Aplc%3Aai5s7zsohtvwsmhfo6ssf76y/bafkreiexmkaqmungbfakzw3pkw43edt7hdtcby4bcsdum44xltnrxgufce/thumbnail.jpg", 4088 + "aspectRatio": { "height": 1080, "width": 1350 } 4089 + }, 4090 + "bookmarkCount": 497, 4091 + "replyCount": 33, 4092 + "repostCount": 746, 4093 + "likeCount": 4293, 4094 + "quoteCount": 11, 4095 + "indexedAt": "2025-10-17T00:34:16.158Z", 4096 + "viewer": { "bookmarked": false, "threadMuted": false, "embeddingDisabled": false }, 4097 + "labels": [ 4098 + { 4099 + "cid": "bafkreiexmkaqmungbfakzw3pkw43edt7hdtcby4bcsdum44xltnrxgufce", 4100 + "cts": "2025-10-17T00:34:16.407Z", 4101 + "src": "did:plc:ar7c4by46qjdydhdevvrndac", 4102 + "uri": "at://did:plc:ai5s7zsohtvwsmhfo6ssf76y/app.bsky.feed.post/3m3dzmexfps2b", 4103 + "val": "porn", 4104 + "ver": 1 4105 + }, 4106 + { 4107 + "src": "did:plc:ai5s7zsohtvwsmhfo6ssf76y", 4108 + "uri": "at://did:plc:ai5s7zsohtvwsmhfo6ssf76y/app.bsky.feed.post/3m3dzmexfps2b", 4109 + "cid": "bafyreihszbu6vkcxxfeigeovzow4sdrq75fyxdqdwp5dbtb3vpfozexnui", 4110 + "val": "porn", 4111 + "cts": "2025-10-17T00:34:15.140Z" 4112 + } 4113 + ], 4114 + "$type": "app.bsky.feed.defs#postView" 4115 + }, 4116 + "parent": { 4117 + "uri": "at://did:plc:ai5s7zsohtvwsmhfo6ssf76y/app.bsky.feed.post/3m3dzmexfps2b", 4118 + "cid": "bafyreihszbu6vkcxxfeigeovzow4sdrq75fyxdqdwp5dbtb3vpfozexnui", 4119 + "author": { 4120 + "did": "did:plc:ai5s7zsohtvwsmhfo6ssf76y", 4121 + "handle": "calamaricakes.bsky.social", 4122 + "displayName": "Calamari Cakes", 4123 + "avatar": "https://cdn.bsky.app/img/avatar/plain/did:plc:ai5s7zsohtvwsmhfo6ssf76y/bafkreigd5x5faqbnmaoisbztj4boboguakez6nmpnmhu64kfiurf4paeby@jpeg", 4124 + "associated": { 4125 + "chat": { "allowIncoming": "all" }, 4126 + "activitySubscription": { "allowSubscriptions": "followers" } 4127 + }, 4128 + "viewer": { 4129 + "muted": false, 4130 + "blockedBy": false, 4131 + "following": "at://did:plc:yfvwmnlztr4dwkb7hwz55r2g/app.bsky.graph.follow/3lbu7cinm7n2u" 4132 + }, 4133 + "labels": [], 4134 + "createdAt": "2024-01-24T02:59:41.281Z" 4135 + }, 4136 + "record": { 4137 + "$type": "app.bsky.feed.post", 4138 + "createdAt": "2025-10-17T00:34:15.140Z", 4139 + "embed": { 4140 + "$type": "app.bsky.embed.video", 4141 + "aspectRatio": { "height": 1080, "width": 1350 }, 4142 + "video": { 4143 + "$type": "blob", 4144 + "ref": { "$link": "bafkreiexmkaqmungbfakzw3pkw43edt7hdtcby4bcsdum44xltnrxgufce" }, 4145 + "mimeType": "video/mp4", 4146 + "size": 1209390 4147 + } 4148 + }, 4149 + "labels": { "$type": "com.atproto.label.defs#selfLabels", "values": [{ "val": "porn" }] }, 4150 + "langs": ["en"], 4151 + "text": "Burnice enjoying some cardio~ 😇" 4152 + }, 4153 + "embed": { 4154 + "$type": "app.bsky.embed.video#view", 4155 + "cid": "bafkreiexmkaqmungbfakzw3pkw43edt7hdtcby4bcsdum44xltnrxgufce", 4156 + "playlist": "https://video.bsky.app/watch/did%3Aplc%3Aai5s7zsohtvwsmhfo6ssf76y/bafkreiexmkaqmungbfakzw3pkw43edt7hdtcby4bcsdum44xltnrxgufce/playlist.m3u8", 4157 + "thumbnail": "https://video.bsky.app/watch/did%3Aplc%3Aai5s7zsohtvwsmhfo6ssf76y/bafkreiexmkaqmungbfakzw3pkw43edt7hdtcby4bcsdum44xltnrxgufce/thumbnail.jpg", 4158 + "aspectRatio": { "height": 1080, "width": 1350 } 4159 + }, 4160 + "bookmarkCount": 497, 4161 + "replyCount": 33, 4162 + "repostCount": 746, 4163 + "likeCount": 4293, 4164 + "quoteCount": 11, 4165 + "indexedAt": "2025-10-17T00:34:16.158Z", 4166 + "viewer": { "bookmarked": false, "threadMuted": false, "embeddingDisabled": false }, 4167 + "labels": [ 4168 + { 4169 + "cid": "bafkreiexmkaqmungbfakzw3pkw43edt7hdtcby4bcsdum44xltnrxgufce", 4170 + "cts": "2025-10-17T00:34:16.407Z", 4171 + "src": "did:plc:ar7c4by46qjdydhdevvrndac", 4172 + "uri": "at://did:plc:ai5s7zsohtvwsmhfo6ssf76y/app.bsky.feed.post/3m3dzmexfps2b", 4173 + "val": "porn", 4174 + "ver": 1 4175 + }, 4176 + { 4177 + "src": "did:plc:ai5s7zsohtvwsmhfo6ssf76y", 4178 + "uri": "at://did:plc:ai5s7zsohtvwsmhfo6ssf76y/app.bsky.feed.post/3m3dzmexfps2b", 4179 + "cid": "bafyreihszbu6vkcxxfeigeovzow4sdrq75fyxdqdwp5dbtb3vpfozexnui", 4180 + "val": "porn", 4181 + "cts": "2025-10-17T00:34:15.140Z" 4182 + } 4183 + ], 4184 + "$type": "app.bsky.feed.defs#postView" 4185 + } 4186 + } 4187 + }, 4188 + { 4189 + "post": { 4190 + "uri": "at://did:plc:ai5s7zsohtvwsmhfo6ssf76y/app.bsky.feed.post/3m3dzmexfps2b", 4191 + "cid": "bafyreihszbu6vkcxxfeigeovzow4sdrq75fyxdqdwp5dbtb3vpfozexnui", 4192 + "author": { 4193 + "did": "did:plc:ai5s7zsohtvwsmhfo6ssf76y", 4194 + "handle": "calamaricakes.bsky.social", 4195 + "displayName": "Calamari Cakes", 4196 + "avatar": "https://cdn.bsky.app/img/avatar/plain/did:plc:ai5s7zsohtvwsmhfo6ssf76y/bafkreigd5x5faqbnmaoisbztj4boboguakez6nmpnmhu64kfiurf4paeby@jpeg", 4197 + "associated": { 4198 + "chat": { "allowIncoming": "all" }, 4199 + "activitySubscription": { "allowSubscriptions": "followers" } 4200 + }, 4201 + "viewer": { 4202 + "muted": false, 4203 + "blockedBy": false, 4204 + "following": "at://did:plc:yfvwmnlztr4dwkb7hwz55r2g/app.bsky.graph.follow/3lbu7cinm7n2u" 4205 + }, 4206 + "labels": [], 4207 + "createdAt": "2024-01-24T02:59:41.281Z" 4208 + }, 4209 + "record": { 4210 + "$type": "app.bsky.feed.post", 4211 + "createdAt": "2025-10-17T00:34:15.140Z", 4212 + "embed": { 4213 + "$type": "app.bsky.embed.video", 4214 + "aspectRatio": { "height": 1080, "width": 1350 }, 4215 + "video": { 4216 + "$type": "blob", 4217 + "ref": { "$link": "bafkreiexmkaqmungbfakzw3pkw43edt7hdtcby4bcsdum44xltnrxgufce" }, 4218 + "mimeType": "video/mp4", 4219 + "size": 1209390 4220 + } 4221 + }, 4222 + "labels": { "$type": "com.atproto.label.defs#selfLabels", "values": [{ "val": "porn" }] }, 4223 + "langs": ["en"], 4224 + "text": "Burnice enjoying some cardio~ 😇" 4225 + }, 4226 + "embed": { 4227 + "$type": "app.bsky.embed.video#view", 4228 + "cid": "bafkreiexmkaqmungbfakzw3pkw43edt7hdtcby4bcsdum44xltnrxgufce", 4229 + "playlist": "https://video.bsky.app/watch/did%3Aplc%3Aai5s7zsohtvwsmhfo6ssf76y/bafkreiexmkaqmungbfakzw3pkw43edt7hdtcby4bcsdum44xltnrxgufce/playlist.m3u8", 4230 + "thumbnail": "https://video.bsky.app/watch/did%3Aplc%3Aai5s7zsohtvwsmhfo6ssf76y/bafkreiexmkaqmungbfakzw3pkw43edt7hdtcby4bcsdum44xltnrxgufce/thumbnail.jpg", 4231 + "aspectRatio": { "height": 1080, "width": 1350 } 4232 + }, 4233 + "bookmarkCount": 497, 4234 + "replyCount": 33, 4235 + "repostCount": 746, 4236 + "likeCount": 4293, 4237 + "quoteCount": 11, 4238 + "indexedAt": "2025-10-17T00:34:16.158Z", 4239 + "viewer": { "bookmarked": false, "threadMuted": false, "embeddingDisabled": false }, 4240 + "labels": [ 4241 + { 4242 + "cid": "bafkreiexmkaqmungbfakzw3pkw43edt7hdtcby4bcsdum44xltnrxgufce", 4243 + "cts": "2025-10-17T00:34:16.407Z", 4244 + "src": "did:plc:ar7c4by46qjdydhdevvrndac", 4245 + "uri": "at://did:plc:ai5s7zsohtvwsmhfo6ssf76y/app.bsky.feed.post/3m3dzmexfps2b", 4246 + "val": "porn", 4247 + "ver": 1 4248 + }, 4249 + { 4250 + "src": "did:plc:ai5s7zsohtvwsmhfo6ssf76y", 4251 + "uri": "at://did:plc:ai5s7zsohtvwsmhfo6ssf76y/app.bsky.feed.post/3m3dzmexfps2b", 4252 + "cid": "bafyreihszbu6vkcxxfeigeovzow4sdrq75fyxdqdwp5dbtb3vpfozexnui", 4253 + "val": "porn", 4254 + "cts": "2025-10-17T00:34:15.140Z" 4255 + } 4256 + ] 4257 + } 4258 + }, 4259 + { 4260 + "post": { 4261 + "uri": "at://did:plc:j2kmiyhld5btzozgzwy3lc2m/app.bsky.feed.post/3m376qck3422z", 4262 + "cid": "bafyreiea4in3ozhktsb52zshoxln7xs4mnkzawrruvj5qtz4g25nnkp5uu", 4263 + "author": { 4264 + "did": "did:plc:j2kmiyhld5btzozgzwy3lc2m", 4265 + "handle": "sky.skymarchini.net", 4266 + "displayName": "Sky Marchini", 4267 + "avatar": "https://cdn.bsky.app/img/avatar/plain/did:plc:j2kmiyhld5btzozgzwy3lc2m/bafkreigjq5v3ov5ivl2izsux7lin4j3x23xbyevzp3tc3blh42rrucdjgi@jpeg", 4268 + "associated": { 4269 + "chat": { "allowIncoming": "none" }, 4270 + "activitySubscription": { "allowSubscriptions": "followers" } 4271 + }, 4272 + "viewer": { 4273 + "muted": false, 4274 + "blockedBy": false, 4275 + "following": "at://did:plc:yfvwmnlztr4dwkb7hwz55r2g/app.bsky.graph.follow/3lzqdizgdec2e", 4276 + "followedBy": "at://did:plc:j2kmiyhld5btzozgzwy3lc2m/app.bsky.graph.follow/3lxxyqygba32p" 4277 + }, 4278 + "labels": [], 4279 + "createdAt": "2025-01-01T02:57:20.242Z" 4280 + }, 4281 + "record": { 4282 + "$type": "app.bsky.feed.post", 4283 + "createdAt": "2025-10-15T02:22:36.832Z", 4284 + "embed": { 4285 + "$type": "app.bsky.embed.images", 4286 + "images": [ 4287 + { 4288 + "alt": "screenshot showing spotify on my computer is playing \"my own summer (shove it)\" by deftones on a playlist called \"mentally a divorced dad (gym rock)\". I am doing very okay.", 4289 + "aspectRatio": { "height": 775, "width": 626 }, 4290 + "image": { 4291 + "$type": "blob", 4292 + "ref": { "$link": "bafkreigcz3ji5bpkfkgdtzmo2x5ygo3rtkn56vf5snoo47arxanis4xxuy" }, 4293 + "mimeType": "image/jpeg", 4294 + "size": 432244 4295 + } 4296 + } 4297 + ] 4298 + }, 4299 + "langs": ["en"], 4300 + "text": "how things are going rn" 4301 + }, 4302 + "embed": { 4303 + "$type": "app.bsky.embed.images#view", 4304 + "images": [ 4305 + { 4306 + "thumb": "https://cdn.bsky.app/img/feed_thumbnail/plain/did:plc:j2kmiyhld5btzozgzwy3lc2m/bafkreigcz3ji5bpkfkgdtzmo2x5ygo3rtkn56vf5snoo47arxanis4xxuy@jpeg", 4307 + "fullsize": "https://cdn.bsky.app/img/feed_fullsize/plain/did:plc:j2kmiyhld5btzozgzwy3lc2m/bafkreigcz3ji5bpkfkgdtzmo2x5ygo3rtkn56vf5snoo47arxanis4xxuy@jpeg", 4308 + "alt": "screenshot showing spotify on my computer is playing \"my own summer (shove it)\" by deftones on a playlist called \"mentally a divorced dad (gym rock)\". I am doing very okay.", 4309 + "aspectRatio": { "height": 775, "width": 626 } 4310 + } 4311 + ] 4312 + }, 4313 + "bookmarkCount": 0, 4314 + "replyCount": 4, 4315 + "repostCount": 0, 4316 + "likeCount": 40, 4317 + "quoteCount": 0, 4318 + "indexedAt": "2025-10-15T02:22:39.024Z", 4319 + "viewer": { "bookmarked": false, "threadMuted": false, "embeddingDisabled": false }, 4320 + "labels": [ 4321 + { 4322 + "cid": "bafyreiea4in3ozhktsb52zshoxln7xs4mnkzawrruvj5qtz4g25nnkp5uu", 4323 + "cts": "2025-10-15T02:22:40.228Z", 4324 + "src": "did:plc:ar7c4by46qjdydhdevvrndac", 4325 + "uri": "at://did:plc:j2kmiyhld5btzozgzwy3lc2m/app.bsky.feed.post/3m376qck3422z", 4326 + "val": "sexual", 4327 + "ver": 1 4328 + } 4329 + ] 4330 + } 4331 + }, 4332 + { 4333 + "post": { 4334 + "uri": "at://did:plc:ai5s7zsohtvwsmhfo6ssf76y/app.bsky.feed.post/3m36neza3pk2p", 4335 + "cid": "bafyreia6ndjov3m7wjf2ggst2hwpelwo6ajj3foqmnmrludskdv2fu4koy", 4336 + "author": { 4337 + "did": "did:plc:ai5s7zsohtvwsmhfo6ssf76y", 4338 + "handle": "calamaricakes.bsky.social", 4339 + "displayName": "Calamari Cakes", 4340 + "avatar": "https://cdn.bsky.app/img/avatar/plain/did:plc:ai5s7zsohtvwsmhfo6ssf76y/bafkreigd5x5faqbnmaoisbztj4boboguakez6nmpnmhu64kfiurf4paeby@jpeg", 4341 + "associated": { 4342 + "chat": { "allowIncoming": "all" }, 4343 + "activitySubscription": { "allowSubscriptions": "followers" } 4344 + }, 4345 + "viewer": { 4346 + "muted": false, 4347 + "blockedBy": false, 4348 + "following": "at://did:plc:yfvwmnlztr4dwkb7hwz55r2g/app.bsky.graph.follow/3lbu7cinm7n2u" 4349 + }, 4350 + "labels": [], 4351 + "createdAt": "2024-01-24T02:59:41.281Z" 4352 + }, 4353 + "record": { 4354 + "$type": "app.bsky.feed.post", 4355 + "createdAt": "2025-10-14T21:12:04.367Z", 4356 + "embed": { 4357 + "$type": "app.bsky.embed.video", 4358 + "aspectRatio": { "height": 683, "width": 900 }, 4359 + "video": { 4360 + "$type": "blob", 4361 + "ref": { "$link": "bafkreid3a33ecgppzhea63hqtrvl7ev54ifwuxs6smriiono363svdwtca" }, 4362 + "mimeType": "video/mp4", 4363 + "size": 411044 4364 + } 4365 + }, 4366 + "labels": { "$type": "com.atproto.label.defs#selfLabels", "values": [{ "val": "porn" }] }, 4367 + "langs": ["en"], 4368 + "text": "teaser for my first kinktober animation 😤💖" 4369 + }, 4370 + "embed": { 4371 + "$type": "app.bsky.embed.video#view", 4372 + "cid": "bafkreid3a33ecgppzhea63hqtrvl7ev54ifwuxs6smriiono363svdwtca", 4373 + "playlist": "https://video.bsky.app/watch/did%3Aplc%3Aai5s7zsohtvwsmhfo6ssf76y/bafkreid3a33ecgppzhea63hqtrvl7ev54ifwuxs6smriiono363svdwtca/playlist.m3u8", 4374 + "thumbnail": "https://video.bsky.app/watch/did%3Aplc%3Aai5s7zsohtvwsmhfo6ssf76y/bafkreid3a33ecgppzhea63hqtrvl7ev54ifwuxs6smriiono363svdwtca/thumbnail.jpg", 4375 + "aspectRatio": { "height": 683, "width": 900 } 4376 + }, 4377 + "bookmarkCount": 124, 4378 + "replyCount": 11, 4379 + "repostCount": 213, 4380 + "likeCount": 1918, 4381 + "quoteCount": 0, 4382 + "indexedAt": "2025-10-14T21:12:05.934Z", 4383 + "viewer": { "bookmarked": false, "threadMuted": false, "embeddingDisabled": false }, 4384 + "labels": [ 4385 + { 4386 + "src": "did:plc:ai5s7zsohtvwsmhfo6ssf76y", 4387 + "uri": "at://did:plc:ai5s7zsohtvwsmhfo6ssf76y/app.bsky.feed.post/3m36neza3pk2p", 4388 + "cid": "bafyreia6ndjov3m7wjf2ggst2hwpelwo6ajj3foqmnmrludskdv2fu4koy", 4389 + "val": "porn", 4390 + "cts": "2025-10-14T21:12:04.367Z" 4391 + } 4392 + ] 4393 + } 4394 + }, 4395 + { 4396 + "post": { 4397 + "uri": "at://did:plc:ct4gni5q32fu4z7hfns435kr/app.bsky.feed.post/3m364p3cobc2n", 4398 + "cid": "bafyreiau3qoipdcmh74plb77ipjlsey7cygdniikpsja6nom5vlfjbn6n4", 4399 + "author": { 4400 + "did": "did:plc:ct4gni5q32fu4z7hfns435kr", 4401 + "handle": "incase.bsky.social", 4402 + "displayName": "InCase", 4403 + "avatar": "https://cdn.bsky.app/img/avatar/plain/did:plc:ct4gni5q32fu4z7hfns435kr/bafkreih5l5mhbbshvigi3vwjf73ya2oxapzf4v7ex6jsiktlv2ieiodpji@jpeg", 4404 + "associated": { "activitySubscription": { "allowSubscriptions": "followers" } }, 4405 + "viewer": { 4406 + "muted": false, 4407 + "blockedBy": false, 4408 + "following": "at://did:plc:yfvwmnlztr4dwkb7hwz55r2g/app.bsky.graph.follow/3lgf2gtkyzp2f" 4409 + }, 4410 + "labels": [ 4411 + { 4412 + "cts": "2024-05-15T03:43:44.793Z", 4413 + "src": "did:plc:e4elbtctnfqocyfcml6h2lf7", 4414 + "uri": "did:plc:ct4gni5q32fu4z7hfns435kr", 4415 + "val": "bluesky-elder", 4416 + "ver": 1 4417 + } 4418 + ], 4419 + "createdAt": "2023-07-23T15:15:56.265Z" 4420 + }, 4421 + "record": { 4422 + "$type": "app.bsky.feed.post", 4423 + "createdAt": "2025-10-14T16:13:28.475Z", 4424 + "embed": { 4425 + "$type": "app.bsky.embed.images", 4426 + "images": [ 4427 + { 4428 + "alt": "", 4429 + "aspectRatio": { "height": 1402, "width": 1900 }, 4430 + "image": { 4431 + "$type": "blob", 4432 + "ref": { "$link": "bafkreifrrd46zz5zwcu2spurcofwoztud53gdtwjkcm6j4v2k6exbdfkqe" }, 4433 + "mimeType": "image/jpeg", 4434 + "size": 945614 4435 + } 4436 + } 4437 + ] 4438 + }, 4439 + "facets": [ 4440 + { 4441 + "features": [{ "$type": "app.bsky.richtext.facet#link", "uri": "https://patreon.com/InCaseArt" }], 4442 + "index": { "byteEnd": 122, "byteStart": 101 } 4443 + } 4444 + ], 4445 + "labels": { "$type": "com.atproto.label.defs#selfLabels", "values": [{ "val": "sexual" }] }, 4446 + "langs": ["en"], 4447 + "text": "Best way to retain your wealth is to never spend a dime on something unless you absolutely have to.\n\npatreon.com/InCaseArt" 4448 + }, 4449 + "embed": { 4450 + "$type": "app.bsky.embed.images#view", 4451 + "images": [ 4452 + { 4453 + "thumb": "https://cdn.bsky.app/img/feed_thumbnail/plain/did:plc:ct4gni5q32fu4z7hfns435kr/bafkreifrrd46zz5zwcu2spurcofwoztud53gdtwjkcm6j4v2k6exbdfkqe@jpeg", 4454 + "fullsize": "https://cdn.bsky.app/img/feed_fullsize/plain/did:plc:ct4gni5q32fu4z7hfns435kr/bafkreifrrd46zz5zwcu2spurcofwoztud53gdtwjkcm6j4v2k6exbdfkqe@jpeg", 4455 + "alt": "", 4456 + "aspectRatio": { "height": 1402, "width": 1900 } 4457 + } 4458 + ] 4459 + }, 4460 + "bookmarkCount": 145, 4461 + "replyCount": 19, 4462 + "repostCount": 408, 4463 + "likeCount": 2339, 4464 + "quoteCount": 0, 4465 + "indexedAt": "2025-10-14T16:13:34.624Z", 4466 + "viewer": { "bookmarked": false, "threadMuted": false, "embeddingDisabled": false }, 4467 + "labels": [ 4468 + { 4469 + "src": "did:plc:ct4gni5q32fu4z7hfns435kr", 4470 + "uri": "at://did:plc:ct4gni5q32fu4z7hfns435kr/app.bsky.feed.post/3m364p3cobc2n", 4471 + "cid": "bafyreiau3qoipdcmh74plb77ipjlsey7cygdniikpsja6nom5vlfjbn6n4", 4472 + "val": "sexual", 4473 + "cts": "2025-10-14T16:13:28.475Z" 4474 + } 4475 + ] 4476 + } 4477 + }, 4478 + { 4479 + "post": { 4480 + "uri": "at://did:plc:55a3jjlxnshlwoyyeieucn6d/app.bsky.feed.post/3m2zhm7ls2m2c", 4481 + "cid": "bafyreibu3vmhnqkkq455fbcdwjhusom7gtlgjtnt4hnylxvbbfhu3f2p24", 4482 + "author": { 4483 + "did": "did:plc:55a3jjlxnshlwoyyeieucn6d", 4484 + "handle": "slop.lastnpcalex.agency", 4485 + "displayName": "⟪⌜NPC's slop house⌟⟫", 4486 + "avatar": "https://cdn.bsky.app/img/avatar/plain/did:plc:55a3jjlxnshlwoyyeieucn6d/bafkreihem3izgsjpb565nympwqca65ur6wyacqoifsubsvrkivo4gotsee@jpeg", 4487 + "associated": { 4488 + "chat": { "allowIncoming": "following" }, 4489 + "activitySubscription": { "allowSubscriptions": "followers" } 4490 + }, 4491 + "viewer": { 4492 + "muted": false, 4493 + "blockedBy": false, 4494 + "following": "at://did:plc:yfvwmnlztr4dwkb7hwz55r2g/app.bsky.graph.follow/3lp6cjb6zl427", 4495 + "followedBy": "at://did:plc:55a3jjlxnshlwoyyeieucn6d/app.bsky.graph.follow/3lpptlgjlhd27" 4496 + }, 4497 + "labels": [ 4498 + { 4499 + "cts": "2024-05-11T11:55:32.742Z", 4500 + "src": "did:plc:e4elbtctnfqocyfcml6h2lf7", 4501 + "uri": "did:plc:55a3jjlxnshlwoyyeieucn6d", 4502 + "val": "bluesky-elder", 4503 + "ver": 1 4504 + } 4505 + ], 4506 + "createdAt": "2023-04-18T02:35:11.818Z" 4507 + }, 4508 + "record": { 4509 + "$type": "app.bsky.feed.post", 4510 + "createdAt": "2025-10-12T19:45:24.780Z", 4511 + "embed": { 4512 + "$type": "app.bsky.embed.video", 4513 + "aspectRatio": { "height": 1920, "width": 1080 }, 4514 + "video": { 4515 + "$type": "blob", 4516 + "ref": { "$link": "bafkreibua4r7vo37jpqx3t6etosila4sxb6vudurzcgclbdasw4wffbriy" }, 4517 + "mimeType": "video/mp4", 4518 + "size": 3322253 4519 + } 4520 + }, 4521 + "labels": { "$type": "com.atproto.label.defs#selfLabels", "values": [{ "val": "sexual" }] }, 4522 + "langs": ["en"], 4523 + "text": "u've hardly touched your slop :(" 4524 + }, 4525 + "embed": { 4526 + "$type": "app.bsky.embed.video#view", 4527 + "cid": "bafkreibua4r7vo37jpqx3t6etosila4sxb6vudurzcgclbdasw4wffbriy", 4528 + "playlist": "https://video.bsky.app/watch/did%3Aplc%3A55a3jjlxnshlwoyyeieucn6d/bafkreibua4r7vo37jpqx3t6etosila4sxb6vudurzcgclbdasw4wffbriy/playlist.m3u8", 4529 + "thumbnail": "https://video.bsky.app/watch/did%3Aplc%3A55a3jjlxnshlwoyyeieucn6d/bafkreibua4r7vo37jpqx3t6etosila4sxb6vudurzcgclbdasw4wffbriy/thumbnail.jpg", 4530 + "aspectRatio": { "height": 1920, "width": 1080 } 4531 + }, 4532 + "bookmarkCount": 0, 4533 + "replyCount": 0, 4534 + "repostCount": 0, 4535 + "likeCount": 0, 4536 + "quoteCount": 0, 4537 + "indexedAt": "2025-10-12T19:45:24.382Z", 4538 + "viewer": { "bookmarked": false, "threadMuted": false, "embeddingDisabled": false }, 4539 + "labels": [ 4540 + { 4541 + "src": "did:plc:55a3jjlxnshlwoyyeieucn6d", 4542 + "uri": "at://did:plc:55a3jjlxnshlwoyyeieucn6d/app.bsky.feed.post/3m2zhm7ls2m2c", 4543 + "cid": "bafyreibu3vmhnqkkq455fbcdwjhusom7gtlgjtnt4hnylxvbbfhu3f2p24", 4544 + "val": "sexual", 4545 + "cts": "2025-10-12T19:45:24.780Z" 4546 + } 4547 + ] 4548 + } 4549 + }, 4550 + { 4551 + "post": { 4552 + "uri": "at://did:plc:55a3jjlxnshlwoyyeieucn6d/app.bsky.feed.post/3m2zhjonhgm2c", 4553 + "cid": "bafyreiha5xv2yqhckydaesk5lgs32awrhppuzqhixqx7papwfsvwvuhoiy", 4554 + "author": { 4555 + "did": "did:plc:55a3jjlxnshlwoyyeieucn6d", 4556 + "handle": "slop.lastnpcalex.agency", 4557 + "displayName": "⟪⌜NPC's slop house⌟⟫", 4558 + "avatar": "https://cdn.bsky.app/img/avatar/plain/did:plc:55a3jjlxnshlwoyyeieucn6d/bafkreihem3izgsjpb565nympwqca65ur6wyacqoifsubsvrkivo4gotsee@jpeg", 4559 + "associated": { 4560 + "chat": { "allowIncoming": "following" }, 4561 + "activitySubscription": { "allowSubscriptions": "followers" } 4562 + }, 4563 + "viewer": { 4564 + "muted": false, 4565 + "blockedBy": false, 4566 + "following": "at://did:plc:yfvwmnlztr4dwkb7hwz55r2g/app.bsky.graph.follow/3lp6cjb6zl427", 4567 + "followedBy": "at://did:plc:55a3jjlxnshlwoyyeieucn6d/app.bsky.graph.follow/3lpptlgjlhd27" 4568 + }, 4569 + "labels": [ 4570 + { 4571 + "cts": "2024-05-11T11:55:32.742Z", 4572 + "src": "did:plc:e4elbtctnfqocyfcml6h2lf7", 4573 + "uri": "did:plc:55a3jjlxnshlwoyyeieucn6d", 4574 + "val": "bluesky-elder", 4575 + "ver": 1 4576 + } 4577 + ], 4578 + "createdAt": "2023-04-18T02:35:11.818Z" 4579 + }, 4580 + "record": { 4581 + "$type": "app.bsky.feed.post", 4582 + "createdAt": "2025-10-12T19:43:59.900Z", 4583 + "embed": { 4584 + "$type": "app.bsky.embed.video", 4585 + "aspectRatio": { "height": 1920, "width": 1080 }, 4586 + "video": { 4587 + "$type": "blob", 4588 + "ref": { "$link": "bafkreif6notik5dxirrn5ngykbzceyl6f3g57ptzxqo3k7ftkbirigug7q" }, 4589 + "mimeType": "video/mp4", 4590 + "size": 3188281 4591 + } 4592 + }, 4593 + "labels": { "$type": "com.atproto.label.defs#selfLabels", "values": [{ "val": "sexual" }] }, 4594 + "langs": ["en"], 4595 + "text": "do you or anyone you know have slop addiction?" 4596 + }, 4597 + "embed": { 4598 + "$type": "app.bsky.embed.video#view", 4599 + "cid": "bafkreif6notik5dxirrn5ngykbzceyl6f3g57ptzxqo3k7ftkbirigug7q", 4600 + "playlist": "https://video.bsky.app/watch/did%3Aplc%3A55a3jjlxnshlwoyyeieucn6d/bafkreif6notik5dxirrn5ngykbzceyl6f3g57ptzxqo3k7ftkbirigug7q/playlist.m3u8", 4601 + "thumbnail": "https://video.bsky.app/watch/did%3Aplc%3A55a3jjlxnshlwoyyeieucn6d/bafkreif6notik5dxirrn5ngykbzceyl6f3g57ptzxqo3k7ftkbirigug7q/thumbnail.jpg", 4602 + "aspectRatio": { "height": 1920, "width": 1080 } 4603 + }, 4604 + "bookmarkCount": 0, 4605 + "replyCount": 0, 4606 + "repostCount": 0, 4607 + "likeCount": 1, 4608 + "quoteCount": 0, 4609 + "indexedAt": "2025-10-12T19:43:59.676Z", 4610 + "viewer": { "bookmarked": false, "threadMuted": false, "embeddingDisabled": false }, 4611 + "labels": [ 4612 + { 4613 + "src": "did:plc:55a3jjlxnshlwoyyeieucn6d", 4614 + "uri": "at://did:plc:55a3jjlxnshlwoyyeieucn6d/app.bsky.feed.post/3m2zhjonhgm2c", 4615 + "cid": "bafyreiha5xv2yqhckydaesk5lgs32awrhppuzqhixqx7papwfsvwvuhoiy", 4616 + "val": "sexual", 4617 + "cts": "2025-10-12T19:43:59.900Z" 4618 + } 4619 + ] 4620 + } 4621 + } 4622 + ] 4623 + } 4624 + ]
+738
crates/jacquard/src/moderation/tests.rs
··· 1 + use std::collections::BTreeMap; 2 + 3 + use crate::moderation::{ 4 + Blur, LabelPref, LabelTarget, Labeled, LabelerDefs, Moderateable, ModerationPrefs, moderate, 5 + moderate_all, 6 + }; 7 + use jacquard_api::app_bsky::feed::FeedViewPost; 8 + use jacquard_api::app_bsky::labeler::get_services::GetServicesOutput; 9 + use jacquard_api::com_atproto::label::{Label, LabelValueDefinition}; 10 + use jacquard_common::CowStr; 11 + use jacquard_common::types::string::{Datetime, Did, Uri}; 12 + use serde::Deserialize; 13 + 14 + const LABELER_SERVICES_JSON: &str = include_str!("labeler_services.json"); 15 + const POSTS_JSON: &str = include_str!("posts.json"); 16 + 17 + #[test] 18 + fn test_parse_labeler_services() { 19 + let services: GetServicesOutput = 20 + serde_json::from_str(LABELER_SERVICES_JSON).expect("failed to parse labeler services"); 21 + 22 + assert!(!services.views.is_empty(), "should have labeler views"); 23 + } 24 + 25 + #[test] 26 + fn test_build_labeler_defs_from_services() { 27 + let services: GetServicesOutput<'static> = 28 + serde_json::from_str(LABELER_SERVICES_JSON).expect("failed to parse"); 29 + 30 + let mut defs = LabelerDefs::new(); 31 + 32 + use jacquard_api::app_bsky::labeler::get_services::GetServicesOutputViewsItem; 33 + 34 + for view in services.views { 35 + if let GetServicesOutputViewsItem::LabelerViewDetailed(detailed) = view { 36 + if let Some(label_defs) = &detailed.policies.label_value_definitions { 37 + defs.insert(detailed.creator.did.clone(), label_defs.clone()); 38 + } 39 + } 40 + } 41 + 42 + // Should have definitions from multiple labelers 43 + assert!(!defs.defs.is_empty(), "should have labeler definitions"); 44 + } 45 + 46 + #[test] 47 + fn test_moderate_with_default_hide() { 48 + // Test that a label with defaultSetting: "hide" actually filters content 49 + let mut defs = LabelerDefs::new(); 50 + let labeler_did = Did::new_static("did:plc:ar7c4by46qjdydhdevvrndac").unwrap(); 51 + 52 + // Create a label definition with defaultSetting: "hide" 53 + let spam_def = LabelValueDefinition { 54 + identifier: CowStr::from("spam"), 55 + blurs: CowStr::from("content"), 56 + severity: CowStr::from("inform"), 57 + default_setting: Some(CowStr::from("hide")), 58 + adult_only: Some(false), 59 + locales: vec![], 60 + extra_data: BTreeMap::new(), 61 + }; 62 + 63 + defs.insert(labeler_did.clone(), vec![spam_def]); 64 + 65 + // Create a mock labeled item 66 + struct MockLabeled { 67 + labels: Vec<Label<'static>>, 68 + } 69 + 70 + impl<'a> Labeled<'a> for MockLabeled { 71 + fn labels(&self) -> &[Label<'a>] { 72 + &self.labels 73 + } 74 + } 75 + 76 + let item = MockLabeled { 77 + labels: vec![Label { 78 + src: labeler_did.clone(), 79 + uri: Uri::new_owned("at://did:plc:test/app.bsky.feed.post/abc123").unwrap(), 80 + cid: None, 81 + val: CowStr::from("spam"), 82 + neg: None, 83 + cts: Datetime::now(), 84 + exp: None, 85 + sig: None, 86 + ver: None, 87 + extra_data: Default::default(), 88 + }], 89 + }; 90 + 91 + let prefs = ModerationPrefs::default(); 92 + let decision = moderate(&item, &prefs, &defs, &[labeler_did]); 93 + 94 + assert!(decision.filter, "spam label should filter by default"); 95 + assert_eq!(decision.causes.len(), 1); 96 + assert_eq!(decision.causes[0].label.as_str(), "spam"); 97 + } 98 + 99 + #[test] 100 + fn test_moderate_with_user_preference() { 101 + // Test that user preferences override default settings 102 + let mut defs = LabelerDefs::new(); 103 + let labeler_did = Did::new_static("did:plc:test").unwrap(); 104 + 105 + let def = LabelValueDefinition { 106 + identifier: CowStr::from("test-label"), 107 + blurs: CowStr::from("content"), 108 + severity: CowStr::from("alert"), 109 + default_setting: Some(CowStr::from("hide")), 110 + adult_only: Some(false), 111 + locales: vec![], 112 + extra_data: BTreeMap::new(), 113 + }; 114 + 115 + defs.insert(labeler_did.clone(), vec![def]); 116 + 117 + struct MockLabeled { 118 + labels: Vec<Label<'static>>, 119 + } 120 + 121 + impl<'a> Labeled<'a> for MockLabeled { 122 + fn labels(&self) -> &[Label<'a>] { 123 + &self.labels 124 + } 125 + } 126 + 127 + let item = MockLabeled { 128 + labels: vec![Label { 129 + src: labeler_did.clone(), 130 + uri: Uri::new_owned("at://did:plc:test/app.bsky.feed.post/abc").unwrap(), 131 + val: CowStr::from("test-label"), 132 + neg: None, 133 + cts: Datetime::now(), 134 + exp: None, 135 + sig: None, 136 + cid: None, 137 + ver: None, 138 + extra_data: Default::default(), 139 + }], 140 + }; 141 + 142 + // User explicitly ignores this label 143 + let mut prefs = ModerationPrefs::default(); 144 + prefs 145 + .labels 146 + .insert(CowStr::from("test-label"), LabelPref::Ignore); 147 + 148 + let decision = moderate(&item, &prefs, &defs, &[labeler_did]); 149 + 150 + assert!( 151 + !decision.filter, 152 + "user preference should override default hide" 153 + ); 154 + assert!(decision.causes.is_empty()); 155 + } 156 + 157 + #[test] 158 + fn test_label_target_detection() { 159 + let labeler_did = Did::new_static("did:plc:test").unwrap(); 160 + 161 + struct MockLabeled { 162 + labels: Vec<Label<'static>>, 163 + } 164 + 165 + impl<'a> Labeled<'a> for MockLabeled { 166 + fn labels(&self) -> &[Label<'a>] { 167 + &self.labels 168 + } 169 + } 170 + 171 + // Account-level label (just DID) 172 + let account_item = MockLabeled { 173 + labels: vec![Label { 174 + src: labeler_did.clone(), 175 + uri: Uri::new_owned("did:plc:someuser").unwrap(), 176 + val: CowStr::from("test"), 177 + neg: None, 178 + cts: Datetime::now(), 179 + exp: None, 180 + sig: None, 181 + cid: None, 182 + ver: None, 183 + extra_data: Default::default(), 184 + }], 185 + }; 186 + 187 + let defs = LabelerDefs::new(); 188 + let prefs = ModerationPrefs::default(); 189 + let decision = moderate(&account_item, &prefs, &defs, &[labeler_did.clone()]); 190 + 191 + if let Some(cause) = decision.causes.first() { 192 + assert_eq!(cause.target, LabelTarget::Account); 193 + } 194 + 195 + // Content-level label (at:// URI with collection/rkey) 196 + let content_item = MockLabeled { 197 + labels: vec![Label { 198 + src: labeler_did.clone(), 199 + uri: Uri::new_owned("at://did:plc:someuser/app.bsky.feed.post/abc123").unwrap(), 200 + val: CowStr::from("test"), 201 + neg: None, 202 + cts: Datetime::now(), 203 + exp: None, 204 + sig: None, 205 + cid: None, 206 + ver: None, 207 + extra_data: Default::default(), 208 + }], 209 + }; 210 + 211 + let decision = moderate(&content_item, &prefs, &defs, &[labeler_did]); 212 + 213 + if let Some(cause) = decision.causes.first() { 214 + assert_eq!(cause.target, LabelTarget::Content); 215 + } 216 + } 217 + 218 + #[test] 219 + fn test_blur_media_vs_content() { 220 + let mut defs = LabelerDefs::new(); 221 + let labeler_did = Did::new_static("did:plc:test").unwrap(); 222 + 223 + // Media blur 224 + let media_def = LabelValueDefinition { 225 + identifier: CowStr::from("media-label"), 226 + blurs: CowStr::from("media"), 227 + severity: CowStr::from("alert"), 228 + default_setting: Some(CowStr::from("warn")), 229 + adult_only: Some(false), 230 + locales: vec![], 231 + extra_data: BTreeMap::new(), 232 + }; 233 + 234 + // Content blur 235 + let content_def = LabelValueDefinition { 236 + identifier: CowStr::from("content-label"), 237 + blurs: CowStr::from("content"), 238 + severity: CowStr::from("alert"), 239 + default_setting: Some(CowStr::from("warn")), 240 + adult_only: Some(false), 241 + locales: vec![], 242 + extra_data: BTreeMap::new(), 243 + }; 244 + 245 + defs.insert(labeler_did.clone(), vec![media_def, content_def]); 246 + 247 + struct MockLabeled { 248 + labels: Vec<Label<'static>>, 249 + } 250 + 251 + impl<'a> Labeled<'a> for MockLabeled { 252 + fn labels(&self) -> &[Label<'a>] { 253 + &self.labels 254 + } 255 + } 256 + 257 + // Test media blur 258 + let media_item = MockLabeled { 259 + labels: vec![Label { 260 + src: labeler_did.clone(), 261 + uri: Uri::new_owned("at://did:plc:test/app.bsky.feed.post/abc").unwrap(), 262 + val: CowStr::from("media-label"), 263 + neg: None, 264 + cts: Datetime::now(), 265 + exp: None, 266 + sig: None, 267 + cid: None, 268 + ver: None, 269 + extra_data: Default::default(), 270 + }], 271 + }; 272 + 273 + let prefs = ModerationPrefs::default(); 274 + let decision = moderate(&media_item, &prefs, &defs, &[labeler_did.clone()]); 275 + 276 + assert_eq!(decision.blur, Blur::Media); 277 + 278 + // Test content blur 279 + let content_item = MockLabeled { 280 + labels: vec![Label { 281 + src: labeler_did.clone(), 282 + uri: Uri::new_owned("at://did:plc:test/app.bsky.feed.post/xyz").unwrap(), 283 + val: CowStr::from("content-label"), 284 + neg: None, 285 + cts: Datetime::now(), 286 + exp: None, 287 + sig: None, 288 + cid: None, 289 + ver: None, 290 + extra_data: Default::default(), 291 + }], 292 + }; 293 + 294 + let decision = moderate(&content_item, &prefs, &defs, &[labeler_did]); 295 + 296 + assert_eq!(decision.blur, Blur::Content); 297 + } 298 + 299 + #[test] 300 + fn test_adult_only_labels_require_adult_content_enabled() { 301 + let mut defs = LabelerDefs::new(); 302 + let labeler_did = Did::new_static("did:plc:test").unwrap(); 303 + 304 + let adult_def = LabelValueDefinition { 305 + identifier: CowStr::from("adult-label"), 306 + blurs: CowStr::from("content"), 307 + severity: CowStr::from("alert"), 308 + default_setting: Some(CowStr::from("warn")), 309 + adult_only: Some(true), 310 + locales: vec![], 311 + extra_data: BTreeMap::new(), 312 + }; 313 + 314 + defs.insert(labeler_did.clone(), vec![adult_def]); 315 + 316 + struct MockLabeled { 317 + labels: Vec<Label<'static>>, 318 + } 319 + 320 + impl<'a> Labeled<'a> for MockLabeled { 321 + fn labels(&self) -> &[Label<'a>] { 322 + &self.labels 323 + } 324 + } 325 + 326 + let item = MockLabeled { 327 + labels: vec![Label { 328 + src: labeler_did.clone(), 329 + uri: Uri::new_owned("at://did:plc:test/app.bsky.feed.post/abc").unwrap(), 330 + val: CowStr::from("adult-label"), 331 + neg: None, 332 + cts: Datetime::now(), 333 + exp: None, 334 + sig: None, 335 + cid: None, 336 + ver: None, 337 + extra_data: Default::default(), 338 + }], 339 + }; 340 + 341 + // With adult content disabled (default) 342 + let prefs = ModerationPrefs::default(); 343 + let decision = moderate(&item, &prefs, &defs, &[labeler_did.clone()]); 344 + 345 + assert!( 346 + decision.filter, 347 + "adult-only label should filter when adult content disabled" 348 + ); 349 + assert!(decision.no_override, "should not allow override"); 350 + 351 + // With adult content enabled 352 + let mut prefs_enabled = ModerationPrefs::default(); 353 + prefs_enabled.adult_content_enabled = true; 354 + 355 + let decision = moderate(&item, &prefs_enabled, &defs, &[labeler_did]); 356 + 357 + // Should still warn but not filter completely 358 + assert!(!decision.filter || decision.blur != Blur::None); 359 + } 360 + 361 + #[test] 362 + fn test_negation_labels() { 363 + let labeler_did = Did::new_static("did:plc:test").unwrap(); 364 + 365 + struct MockLabeled { 366 + labels: Vec<Label<'static>>, 367 + } 368 + 369 + impl<'a> Labeled<'a> for MockLabeled { 370 + fn labels(&self) -> &[Label<'a>] { 371 + &self.labels 372 + } 373 + } 374 + 375 + // Item with a label and its negation 376 + let item = MockLabeled { 377 + labels: vec![ 378 + Label { 379 + src: labeler_did.clone(), 380 + uri: Uri::new_owned("at://did:plc:test/app.bsky.feed.post/abc").unwrap(), 381 + val: CowStr::from("test-label"), 382 + neg: None, 383 + cts: Datetime::now(), 384 + exp: None, 385 + sig: None, 386 + cid: None, 387 + ver: None, 388 + extra_data: Default::default(), 389 + }, 390 + Label { 391 + src: labeler_did.clone(), 392 + uri: Uri::new_owned("at://did:plc:test/app.bsky.feed.post/abc").unwrap(), 393 + val: CowStr::from("test-label"), 394 + neg: Some(true), // negation 395 + cts: Datetime::now(), 396 + exp: None, 397 + sig: None, 398 + cid: None, 399 + ver: None, 400 + extra_data: Default::default(), 401 + }, 402 + ], 403 + }; 404 + 405 + let defs = LabelerDefs::new(); 406 + let prefs = ModerationPrefs::default(); 407 + let decision = moderate(&item, &prefs, &defs, &[labeler_did]); 408 + 409 + // Negation should cancel out the original label 410 + assert!( 411 + decision 412 + .causes 413 + .iter() 414 + .all(|c| c.label.as_str() != "test-label"), 415 + "negation should remove the label from causes" 416 + ); 417 + } 418 + 419 + #[test] 420 + fn test_moderate_all() { 421 + let labeler_did = Did::new_static("did:plc:test").unwrap(); 422 + 423 + struct MockLabeled { 424 + labels: Vec<Label<'static>>, 425 + } 426 + 427 + impl<'a> Labeled<'a> for MockLabeled { 428 + fn labels(&self) -> &[Label<'a>] { 429 + &self.labels 430 + } 431 + } 432 + 433 + let items = vec![ 434 + MockLabeled { labels: vec![] }, 435 + MockLabeled { 436 + labels: vec![Label { 437 + src: labeler_did.clone(), 438 + uri: Uri::new_owned("at://did:plc:test/app.bsky.feed.post/abc").unwrap(), 439 + val: CowStr::from("porn"), 440 + neg: None, 441 + cts: Datetime::now(), 442 + exp: None, 443 + sig: None, 444 + cid: None, 445 + ver: None, 446 + extra_data: Default::default(), 447 + }], 448 + }, 449 + MockLabeled { labels: vec![] }, 450 + ]; 451 + 452 + let prefs = ModerationPrefs::default(); 453 + let defs = LabelerDefs::new(); 454 + let results = moderate_all(&items, &prefs, &defs, &[labeler_did]); 455 + 456 + assert_eq!(results.len(), 3); 457 + assert!(!results[0].1.filter, "first item should not be filtered"); 458 + assert!( 459 + results[1].1.filter, 460 + "second item with porn should be filtered" 461 + ); 462 + assert!(!results[2].1.filter, "third item should not be filtered"); 463 + } 464 + 465 + #[test] 466 + fn test_end_to_end_feed_moderation() { 467 + // Parse labeler services and build definitions 468 + let services: GetServicesOutput<'static> = 469 + serde_json::from_str(LABELER_SERVICES_JSON).expect("failed to parse labeler services"); 470 + 471 + let mut defs = LabelerDefs::new(); 472 + let mut accepted_labelers = Vec::new(); 473 + use jacquard_api::app_bsky::labeler::get_services::GetServicesOutputViewsItem; 474 + 475 + for view in services.views { 476 + if let GetServicesOutputViewsItem::LabelerViewDetailed(detailed) = view { 477 + accepted_labelers.push(detailed.creator.did.clone()); 478 + if let Some(label_value_definitions) = &detailed.policies.label_value_definitions { 479 + defs.insert( 480 + detailed.creator.did.clone(), 481 + label_value_definitions.clone(), 482 + ); 483 + } 484 + } 485 + } 486 + 487 + // Parse posts 488 + #[derive(Deserialize)] 489 + struct FeedResponse<'a> { 490 + #[serde(borrow)] 491 + feed: Vec<FeedViewPost<'a>>, 492 + } 493 + 494 + let feed_responses: Vec<FeedResponse<'static>> = 495 + serde_json::from_str(POSTS_JSON).expect("failed to parse posts"); 496 + 497 + // Combine all feeds to test 498 + let all_posts: Vec<_> = feed_responses 499 + .iter() 500 + .flat_map(|response| &response.feed) 501 + .collect(); 502 + 503 + let prefs = ModerationPrefs::default(); 504 + 505 + // Apply moderation to all posts in the feed (post, author, and reply chain) 506 + let moderated: Vec<_> = all_posts 507 + .iter() 508 + .map(|feed_post| { 509 + use jacquard_api::app_bsky::feed::{ReplyRefParent, ReplyRefRoot}; 510 + 511 + let mut all_decisions = vec![]; 512 + 513 + // Moderate main post and author 514 + all_decisions.push(moderate(&feed_post.post, &prefs, &defs, &accepted_labelers)); 515 + all_decisions.push(moderate( 516 + &feed_post.post.author, 517 + &prefs, 518 + &defs, 519 + &accepted_labelers, 520 + )); 521 + 522 + // Check reply parent/root if present 523 + if let Some(reply) = &feed_post.reply { 524 + if let ReplyRefParent::PostView(parent) = &reply.parent { 525 + all_decisions.push(moderate(&**parent, &prefs, &defs, &accepted_labelers)); 526 + all_decisions.push(moderate(&parent.author, &prefs, &defs, &accepted_labelers)); 527 + } 528 + if let ReplyRefRoot::PostView(root) = &reply.root { 529 + all_decisions.push(moderate(&**root, &prefs, &defs, &accepted_labelers)); 530 + all_decisions.push(moderate(&root.author, &prefs, &defs, &accepted_labelers)); 531 + } 532 + if let Some(grandparent_author) = &reply.grandparent_author { 533 + all_decisions.push(moderate( 534 + grandparent_author, 535 + &prefs, 536 + &defs, 537 + &accepted_labelers, 538 + )); 539 + } 540 + } 541 + 542 + (feed_post, all_decisions) 543 + }) 544 + .collect(); 545 + 546 + // Debug: check what labels exist 547 + let total_posts = all_posts.len(); 548 + 549 + println!("Total feeds in response: {}", feed_responses.len()); 550 + 551 + // Show which posts have labels 552 + for (i, feed_post) in all_posts.iter().enumerate() { 553 + if let Some(labels) = &feed_post.post.labels { 554 + if !labels.is_empty() { 555 + println!( 556 + "Post {} has {} labels: {:?}", 557 + i, 558 + labels.len(), 559 + labels.iter().map(|l| l.val.as_ref()).collect::<Vec<_>>() 560 + ); 561 + } 562 + } 563 + } 564 + 565 + let posts_with_any_labels = all_posts 566 + .iter() 567 + .filter(|post| !post.post.labels().is_empty()) 568 + .count(); 569 + let authors_with_any_labels = all_posts 570 + .iter() 571 + .filter(|post| !post.post.author.labels().is_empty()) 572 + .count(); 573 + 574 + // Count how many posts have moderation decisions with causes 575 + let posts_with_causes = moderated 576 + .iter() 577 + .filter(|(_, decisions)| decisions.iter().any(|d| !d.causes.is_empty())) 578 + .count(); 579 + 580 + // Summary output 581 + println!("Total posts: {}", total_posts); 582 + println!("Posts with labels: {}", posts_with_any_labels); 583 + println!("Authors with labels: {}", authors_with_any_labels); 584 + println!("Feed posts with moderation causes: {}", posts_with_causes); 585 + println!("Accepted labelers: {}", accepted_labelers.len()); 586 + println!("Labeler definitions: {}", defs.defs.len()); 587 + 588 + // Print all unique labels found and their default settings 589 + let mut all_labels_found = std::collections::HashSet::new(); 590 + for feed_post in &all_posts { 591 + for label in feed_post.post.labels() { 592 + all_labels_found.insert((label.val.as_ref(), label.src.as_ref())); 593 + } 594 + for label in feed_post.post.author.labels() { 595 + all_labels_found.insert((label.val.as_ref(), label.src.as_ref())); 596 + } 597 + if let Some(reply) = &feed_post.reply { 598 + use jacquard_api::app_bsky::feed::{ReplyRefParent, ReplyRefRoot}; 599 + if let ReplyRefParent::PostView(parent) = &reply.parent { 600 + for label in parent.labels() { 601 + all_labels_found.insert((label.val.as_ref(), label.src.as_ref())); 602 + } 603 + for label in parent.author.labels() { 604 + all_labels_found.insert((label.val.as_ref(), label.src.as_ref())); 605 + } 606 + } 607 + if let ReplyRefRoot::PostView(root) = &reply.root { 608 + for label in root.labels() { 609 + all_labels_found.insert((label.val.as_ref(), label.src.as_ref())); 610 + } 611 + for label in root.author.labels() { 612 + all_labels_found.insert((label.val.as_ref(), label.src.as_ref())); 613 + } 614 + } 615 + if let Some(grandparent) = &reply.grandparent_author { 616 + for label in grandparent.labels() { 617 + all_labels_found.insert((label.val.as_ref(), label.src.as_ref())); 618 + } 619 + } 620 + } 621 + } 622 + 623 + println!("Unique labels found: {}", all_labels_found.len()); 624 + 625 + // Count total moderation causes found 626 + let total_causes: usize = moderated 627 + .iter() 628 + .map(|(_, decisions)| decisions.iter().map(|d| d.causes.len()).sum::<usize>()) 629 + .sum(); 630 + 631 + println!("Total moderation causes: {}", total_causes); 632 + 633 + // Verify specific facts about the test data 634 + assert_eq!( 635 + posts_with_any_labels, 13, 636 + "should have 13 posts with labels" 637 + ); 638 + assert!( 639 + all_labels_found.iter().any(|(val, _)| val == &"porn"), 640 + "should have porn labels" 641 + ); 642 + assert!( 643 + all_labels_found.iter().any(|(val, _)| val == &"sexual"), 644 + "should have sexual labels" 645 + ); 646 + assert!( 647 + all_labels_found.iter().any(|(val, _)| val == &"nudity"), 648 + "should have nudity labels" 649 + ); 650 + 651 + // Verify end-to-end moderation worked 652 + assert!( 653 + posts_with_causes > 0, 654 + "should have posts with moderation causes" 655 + ); 656 + assert!(total_causes > 0, "should have found moderation causes"); 657 + } 658 + 659 + #[test] 660 + fn test_moderatable_trait() { 661 + // Test the Moderatable trait on FeedViewPost 662 + let services: GetServicesOutput<'static> = 663 + serde_json::from_str(LABELER_SERVICES_JSON).expect("failed to parse labeler services"); 664 + 665 + let mut defs = LabelerDefs::new(); 666 + use jacquard_api::app_bsky::labeler::get_services::GetServicesOutputViewsItem; 667 + 668 + for view in services.views { 669 + if let GetServicesOutputViewsItem::LabelerViewDetailed(detailed) = view { 670 + if let Some(label_value_definitions) = &detailed.policies.label_value_definitions { 671 + defs.insert( 672 + detailed.creator.did.clone(), 673 + label_value_definitions.clone(), 674 + ); 675 + } 676 + } 677 + } 678 + 679 + #[derive(Deserialize)] 680 + struct FeedResponse<'a> { 681 + #[serde(borrow)] 682 + feed: Vec<FeedViewPost<'a>>, 683 + } 684 + 685 + let feed_responses: Vec<FeedResponse<'static>> = 686 + serde_json::from_str(POSTS_JSON).expect("failed to parse posts"); 687 + 688 + let prefs = ModerationPrefs::default(); 689 + 690 + // Find a post with porn/sexual/nudity labels (we know these exist from earlier test) 691 + let labeled_post = feed_responses 692 + .iter() 693 + .flat_map(|r| &r.feed) 694 + .find(|p| { 695 + p.post.labels().iter().any(|l| { 696 + l.val.as_ref() == "porn" || l.val.as_ref() == "sexual" || l.val.as_ref() == "nudity" 697 + }) 698 + }) 699 + .expect("should find at least one porn/sexual/nudity labeled post"); 700 + 701 + let post_labels = labeled_post.post.labels(); 702 + println!("Testing post with {} labels:", post_labels.len()); 703 + for label in post_labels { 704 + println!(" {} from {}", label.val.as_ref(), label.src.as_ref()); 705 + } 706 + 707 + // Use the Moderateable trait with empty accepted_labelers to trust all labels 708 + let decisions = labeled_post.moderate_all(&prefs, &defs, &[]); 709 + 710 + println!("Moderateable decisions for labeled post:"); 711 + for (tag, decision) in &decisions { 712 + if !decision.causes.is_empty() { 713 + println!( 714 + " {}: filter={}, blur={:?}, causes={}", 715 + tag, 716 + decision.filter, 717 + decision.blur, 718 + decision.causes.len() 719 + ); 720 + } 721 + } 722 + 723 + // Should have decisions for at least post and author 724 + assert!( 725 + decisions.iter().any(|(tag, _)| *tag == "post"), 726 + "should have post decision" 727 + ); 728 + assert!( 729 + decisions.iter().any(|(tag, _)| *tag == "author"), 730 + "should have author decision" 731 + ); 732 + 733 + // At least one decision should have causes (from the labeled post) 734 + assert!( 735 + decisions.iter().any(|(_, d)| !d.causes.is_empty()), 736 + "should have at least one decision with causes" 737 + ); 738 + }
+145
crates/jacquard/src/moderation/types.rs
··· 1 + use jacquard_api::com_atproto::label::{LabelValue, LabelValueDefinition}; 2 + use jacquard_common::CowStr; 3 + use jacquard_common::types::string::Did; 4 + use std::collections::HashMap; 5 + 6 + /// User's moderation preferences 7 + /// 8 + /// Specifies how the user wants to respond to different label values, 9 + /// both globally and per-labeler. 10 + #[derive(Debug, Clone)] 11 + pub struct ModerationPrefs<'a> { 12 + /// Whether adult content is enabled for this user 13 + pub adult_content_enabled: bool, 14 + /// Global label preferences (label value -> preference) 15 + pub labels: HashMap<CowStr<'a>, LabelPref>, 16 + /// Per-labeler overrides (labeler DID -> label value -> preference) 17 + pub labelers: HashMap<Did<'a>, HashMap<CowStr<'a>, LabelPref>>, 18 + } 19 + 20 + impl Default for ModerationPrefs<'_> { 21 + fn default() -> Self { 22 + Self { 23 + adult_content_enabled: false, 24 + labels: HashMap::new(), 25 + labelers: HashMap::new(), 26 + } 27 + } 28 + } 29 + 30 + /// User's preference for how to handle a specific label value 31 + #[derive(Debug, Clone, Copy, PartialEq, Eq)] 32 + pub enum LabelPref { 33 + /// Hide the content completely 34 + Hide, 35 + /// Show with warning/blur 36 + Warn, 37 + /// Show normally (no filtering) 38 + Ignore, 39 + } 40 + 41 + /// Collection of labeler definitions 42 + /// 43 + /// Maps labeler DIDs to their published label value definitions. 44 + /// These definitions describe what labels mean, their severity, and default settings. 45 + #[derive(Debug, Clone, Default)] 46 + pub struct LabelerDefs<'a> { 47 + /// Labeler DID -> label value definitions 48 + pub defs: HashMap<Did<'a>, Vec<LabelValueDefinition<'a>>>, 49 + } 50 + 51 + impl<'a> LabelerDefs<'a> { 52 + /// Create an empty set of labeler definitions 53 + pub fn new() -> Self { 54 + Self::default() 55 + } 56 + 57 + /// Add definitions for a labeler 58 + pub fn insert(&mut self, did: Did<'a>, definitions: Vec<LabelValueDefinition<'a>>) { 59 + self.defs.insert(did, definitions); 60 + } 61 + 62 + /// Get definitions for a specific labeler 63 + pub fn get(&self, did: &Did<'_>) -> Option<&[LabelValueDefinition<'a>]> { 64 + self.defs 65 + .iter() 66 + .find(|(k, _)| k.as_ref() == did.as_ref()) 67 + .map(|(_, v)| v.as_slice()) 68 + } 69 + 70 + /// Find a label definition by labeler and identifier 71 + pub fn find_def( 72 + &self, 73 + labeler: &Did<'_>, 74 + identifier: &str, 75 + ) -> Option<&LabelValueDefinition<'a>> { 76 + self.defs 77 + .iter() 78 + .find(|(k, _)| k.as_ref() == labeler.as_ref()) 79 + .and_then(|(_, v)| v.iter().find(|def| def.identifier.as_ref() == identifier)) 80 + } 81 + } 82 + 83 + /// Moderation decision for a piece of content 84 + /// 85 + /// Describes what actions should be taken based on the labels applied to content 86 + /// and the user's preferences. 87 + #[derive(Debug, Clone, Default)] 88 + pub struct ModerationDecision { 89 + /// Whether to hide the content completely 90 + pub filter: bool, 91 + /// What parts of the content to blur 92 + pub blur: Blur, 93 + /// Whether to show an alert-level warning 94 + pub alert: bool, 95 + /// Whether to show an informational badge 96 + pub inform: bool, 97 + /// Whether user override is allowed (false for legal takedowns) 98 + pub no_override: bool, 99 + /// Which labels caused this decision 100 + pub causes: Vec<LabelCause<'static>>, 101 + } 102 + 103 + impl ModerationDecision { 104 + /// Create a decision with no moderation applied 105 + pub fn none() -> Self { 106 + Self::default() 107 + } 108 + 109 + /// Whether any moderation action is being taken 110 + pub fn is_moderated(&self) -> bool { 111 + self.filter || self.blur != Blur::None || self.alert || self.inform 112 + } 113 + } 114 + 115 + /// What parts of content should be blurred 116 + #[derive(Debug, Clone, Copy, PartialEq, Eq, Default)] 117 + pub enum Blur { 118 + /// No blurring 119 + #[default] 120 + None, 121 + /// Blur the entire content (text and media) 122 + Content, 123 + /// Blur media only (images, video, audio) 124 + Media, 125 + } 126 + 127 + /// Information about a label that contributed to a moderation decision 128 + #[derive(Debug, Clone)] 129 + pub struct LabelCause<'a> { 130 + /// The label value that triggered this 131 + pub label: LabelValue<'a>, 132 + /// Which labeler applied this label 133 + pub source: Did<'a>, 134 + /// What the label is targeting 135 + pub target: LabelTarget, 136 + } 137 + 138 + /// What a label is targeting 139 + #[derive(Debug, Clone, Copy, PartialEq, Eq)] 140 + pub enum LabelTarget { 141 + /// The label applies to an account/profile 142 + Account, 143 + /// The label applies to a specific piece of content 144 + Content, 145 + }