context
the bot currently quote-posts anyone whose post matches bufo phrases. this is technically opt-out (via blocking), not opt-in, which may violate bluesky's terms of service around unsolicited interactions.
see: https://bsky.app/profile/christian.bsky.social — "respect for opt-in. too many opt-out bots circulating rn"
proposal
only quote-post users who follow the bot (@find-bufo.com). currently ~17 followers, so the set is small.
implementation notes
getRelationships (already called for block check) returns a followedBy field — zero additional API calls needed
- refactor
isBlockedBy to return both block + follower status from the single response
- gate
onPost: if not a follower, skip
- fail-closed on API errors (the whole point is consent)
- add
non_followers_skipped counter to stats dashboard
references
context
the bot currently quote-posts anyone whose post matches bufo phrases. this is technically opt-out (via blocking), not opt-in, which may violate bluesky's terms of service around unsolicited interactions.
see: https://bsky.app/profile/christian.bsky.social — "respect for opt-in. too many opt-out bots circulating rn"
proposal
only quote-post users who follow the bot (
@find-bufo.com). currently ~17 followers, so the set is small.implementation notes
getRelationships(already called for block check) returns afollowedByfield — zero additional API calls neededisBlockedByto return both block + follower status from the single responseonPost: if not a follower, skipnon_followers_skippedcounter to stats dashboardreferences
followedByfield