social media crossposting tool. 3rd time's the charm
mastodon misskey crossposting bluesky

feat: set bsky_appview proxy header

zenfyr.dev 36f316bf 1313124e

verified
Changed files
+5
bluesky
+1
README.md
···
"app_password": "env:BLUESKY_APP_PASSWORD", // https://bsky.app/settings/app-passwords
"did": "env:BLUESKY_DID", // use a DID instead of handle (avoids handle resolution)
"pds": "env:BLUESKY_PDS", // specify Your PDS directly (avoids DID doc lookup)
"options": {
"encode_videos": true, // bluesky only accepts mp4 videos, try to convert if the video is not mp4
"quote_gate": false, // block users from quoting the post
···
"app_password": "env:BLUESKY_APP_PASSWORD", // https://bsky.app/settings/app-passwords
"did": "env:BLUESKY_DID", // use a DID instead of handle (avoids handle resolution)
"pds": "env:BLUESKY_PDS", // specify Your PDS directly (avoids DID doc lookup)
+
"bsky_appview": "env:BLUESKY_APPVIEW", // bypass suspensions by specifying a different appview (e.g. did:web:bsky.zeppelin.social)
"options": {
"encode_videos": true, // bluesky only accepts mp4 videos, try to convert if the video is not mp4
"quote_gate": false, // block users from quoting the post
+4
bluesky/output.py
···
reqs = Request(timeout=Timeout(None, connect=30.0))
self.bsky = Client2(pds, request=reqs)
self.bsky.login(did, as_envvar(settings.get('app-password')))
def _find_parent(self, parent_id: str):
···
reqs = Request(timeout=Timeout(None, connect=30.0))
self.bsky = Client2(pds, request=reqs)
+
self.bsky.configure_proxy_header(
+
service_type='bsky_appview',
+
did=as_envvar(settings.get('bsky_appview')) or 'did:web:api.bsky.app'
+
)
self.bsky.login(did, as_envvar(settings.get('app-password')))
def _find_parent(self, parent_id: str):