Toot toooooooot (Bluesky-Mastodon cross-poster)
1require 'didkit'
2require_relative 'bluesky_client'
3
4class BlueskyAccount
5 def initialize
6 @sky = BlueskyClient.new
7 end
8
9 def did
10 @sky.user.did
11 end
12
13 def login_with_password(handle, password)
14 did = DID.resolve_handle(handle)
15 if did.nil?
16 puts "Error: couldn't resolve handle #{handle.inspect}"
17 exit 1
18 end
19
20 @sky.host = did.document.pds_host
21 @sky.user.id = handle
22 @sky.user.pass = password
23
24 @sky.log_in
25 end
26
27 def log_in
28 @sky.log_in
29 end
30
31 def fetch_likes
32 json = @sky.get_request('com.atproto.repo.listRecords', {
33 repo: @sky.user.did,
34 collection: 'app.bsky.feed.like',
35 limit: 100
36 })
37
38 json['records']
39 end
40
41 def fetch_record(repo, collection, rkey)
42 @sky.get_request('com.atproto.repo.getRecord', { repo: repo, collection: collection, rkey: rkey })
43 end
44
45 def fetch_blob(cid)
46 @sky.get_request('com.atproto.sync.getBlob', { did: @sky.user.did, cid: cid })
47 end
48
49 def delete_record_at(uri)
50 repo, collection, rkey = uri.split('/')[2..4]
51 @sky.post_request('com.atproto.repo.deleteRecord', { repo: repo, collection: collection, rkey: rkey })
52 end
53end