diff --git a/app/models/domain/bluesky/monitored_object.rb b/app/models/domain/bluesky/monitored_object.rb index 8ce80c58..210b106f 100644 --- a/app/models/domain/bluesky/monitored_object.rb +++ b/app/models/domain/bluesky/monitored_object.rb @@ -11,6 +11,20 @@ class Domain::Bluesky::MonitoredObject < ReduxApplicationRecord after_create_commit :notify_monitor_added after_destroy_commit :notify_monitor_removed + sig do + params(user: Domain::User::BlueskyUser).returns( + Domain::Bluesky::MonitoredObject, + ) + end + def self.build_for_user(user) + build(value: user.did!, kind: :user_did) + end + + sig { params(hashtag: String).returns(Domain::Bluesky::MonitoredObject) } + def self.build_for_hashtag(hashtag) + build(value: hashtag, kind: :hashtag) + end + sig { void } def notify_monitor_added self.class.connection.execute( diff --git a/dids.txt b/dids.txt deleted file mode 100644 index 9a146be1..00000000 --- a/dids.txt +++ /dev/null @@ -1,1084 +0,0 @@ -did:plc:t7hdkeh2yhbnyo73kvzptvkn -did:plc:h23tbbwpziy6hgtv3kfh5m4b -did:plc:3l3oree4klvi2rnlfht6zqp2 -did:plc:goheexvtrog2qvnzvzu2epxe -did:plc:tjlfylebtjspt6qw65nuxxem -did:plc:nw23v6lrepwy4mbk2uputz47 -did:plc:xpvnnafe4q6f4yet2ts6miuv -did:plc:5ukgqznekwrunnto5vdohqpe -did:plc:cfrjwfksgilcuoinojux6bzz -did:plc:4tnunc56jpmenycorkuql2gb -did:plc:trs4datafk66oxhajow7vccb -did:plc:aeaaxq4axm6oofszcuq2aji3 -did:plc:swbtf3kacl3os5xggdldz73m -did:plc:pmf2qjdosth6rnea5rfa5wdw -did:plc:ng4ykelrtjfji5zccwuninig -did:plc:n7d3t6ucu22pta7iwyrginh7 -did:plc:gcbrytiqfcf4rqcpqshzswme -did:plc:xszetkpqzdanveolw665lotq -did:plc:62vzl5wnus57bgh7zlyx47lr -did:plc:h3totdauae6vquhd6xmv5f3l -did:plc:x7rd2sb5tci5mlp4lnalauvb -did:plc:zsmrsrvnunepmndmvq3bucit -did:plc:hjkiccvhixc5arqshpm44il5 -did:plc:xi2xy4aa5fviudty3xtgar3w -did:plc:lw3ts2njpjljd7nbkspsevcv -did:plc:7z4fevsgk472cv7vmawwxbyf -did:plc:ynthbt3llyci7hpd5u4la4tt -did:plc:r7tqd3fr575a5rocivmpjxsz -did:plc:qgtgjfiddgxiwjv6bg5qn3be -did:plc:xi25cnz5ubdxif6lo6mfmk7j -did:plc:27erzehqyirqeoe4ua3drbb3 -did:plc:4nler7p3ld4wtt35b6k4auz7 -did:plc:hwf4n4pwbfwlruem3yu47mk3 -did:plc:yo5mj4yuqaogjziisx3yzpcg -did:plc:pjvyboeionswifefqde5b5nk -did:plc:crjapbxf6trsny5pn6cvw4ac -did:plc:sk4wsiymlvulwaxxl7tucqup -did:plc:flz2khvetg3xq56jecjqjjjm -did:plc:lgwkaykfkji4lm62bwtnrk3w -did:plc:2w5tk4huhet4vnm4gzdsushj -did:plc:vylbsqvcezsttxstl5bslqyx -did:plc:ftr2jxdgl3gcbqpz2guzgdrq -did:plc:y7ckhsm4zdtkrov2hs3xqp7n -did:plc:7hawbd4xqa5xlwegiaky4uwk -did:plc:p2gwp6izfzihakpkq7w7ybmj -did:plc:cacov7xqwa2eu4pdzdvvuaar -did:plc:6hxvfze7rqqqovxte2ll6gg3 -did:plc:4w5u3ig3v5ywavvraqaibkqj -did:plc:hn6r63mwquracf2kweofwce3 -did:plc:nita7pprgo6qm3lcp7avw5pa -did:plc:vsufu4ehvogv4zigl2w4yzvv -did:plc:sbrmtzk5azonx5bei7rlrjcg -did:plc:m4tjletijepckqcmfikb77nc -did:plc:dmufk3pssk72eyat6c3wznzt -did:plc:kqouad5nxhojqc3e4lqetrt2 -did:plc:xp7p3ouyofmv64hps2wtchg7 -did:plc:ew35xxc6wwigtt7f7q2oa4mh -did:plc:a5wbywaytyyyfm5nucpbogg5 -did:plc:m47y2oulg2owxfgdodr3wpnu -did:plc:d4aw3fhcpw56olgifomkige5 -did:plc:4ik4y4atmjkst3mecxg7m23s -did:plc:z6qngg37jyyympbaihmcyaho -did:plc:nxq5nmxageb3vvb5rxyergvv -did:plc:qklsh265oj7t6u5wqv2o3d3e -did:plc:cebhbnmi6mggsr3oso2qdnut -did:plc:326hze652m7z5scpuey2nqge -did:plc:hak7rhjmhmuvpaiyfocomacv -did:plc:nmfm5de3r5bfqg6pesp2aq5i -did:plc:ucvic2vbd2zab4aup4dim3ou -did:plc:sdy5fty7j3jahssej5kz6bwq -did:plc:7s5echp3dzm2y5kxfe3mwzon -did:plc:n3437mh646jl44jbulp6652y -did:plc:iqzzppg3znjbzqckh2xhqyxe -did:plc:n4ttfv7igl7damspldvet2df -did:plc:4ogvj5zhbkpujeor73lqijvi -did:plc:zthszt2jqikn3dyoa5fokzhm -did:plc:lh66e2lxle54ktwabudvmkm6 -did:plc:tbjm46ucgokpc3i4r2yuqkd7 -did:plc:g7dqnw5ze2pm4t55qwwzk5m6 -did:plc:lolmxugilgmvi4y23nq6qrry -did:plc:zpd3ygs26yp6rypa5az6mjcf -did:plc:ivfyyp5u5cpm4wsm3s7m2k6f -did:plc:so4k55sm6b2brempcgzfzf6x -did:plc:f32braljmetxbhyxuqkl63sa -did:plc:y2vz4ugfifg2ptl7gszjna65 -did:plc:h5ccxwjbyn4i63ijv6uoiuuz -did:plc:mrsiaflzpgdd3rfnwcls65qs -did:plc:5kvbkfwxkpineniieyvfbu2u -did:plc:xvgmfxs6o6ypuew3akw4wj3e -did:plc:526pszvmbgthm2mgqeuw6hww -did:plc:of4bhblwzoyaawrnjhjjjqcw -did:plc:o4qgc43yxn37vkdvs7rjxgu4 -did:plc:24otxdgx2fwuvqfx2spgl3c3 -did:plc:a4wub3w4l2hm2f535m4hboik -did:plc:a2vep2t6b7dciz3kdtcgazzx -did:plc:3nkwx4hh7rz3pegjhmqwtudy -did:plc:dwbtr4psdwzaphf3bwnhfxo7 -did:plc:4ocyjbqp7cmmdeozs62eqcfj -did:plc:ulqqchmbqgr3qcegdyqlr3i4 -did:plc:zovk6e7oqayatkizpmmkzkgw -did:plc:5wlaz2vn27dq62tvypx6lzq5 -did:plc:u7nuja3dcjvqcwglu2uxoxq4 -did:plc:p5pwak3ywzkvnkrxlo2lpehh -did:plc:6642cyeoopbn4etutqoalbor -did:plc:wvhteullphmw3nmxveuxugc2 -did:plc:2crmmfz7g3kmdil44e5ytqbn -did:plc:pmkgst2evlfj6tucmiu2pinu -did:plc:7dhd3ojssyxzq7s2uhp5qe4n -did:plc:ii6qgyghsg7rbwizvlsikm5r -did:plc:alfibxyzkzfsnm2fporfgksg -did:plc:t7usc35nhagchlw5quied6r6 -did:plc:7jpfkslefowzoeavflpscynn -did:plc:f5ke3jekqnbltida7cnmzteq -did:plc:7clbywj3lmesv6utxqocmzdy -did:plc:bzdtu4vjo2quk2ef3ykhqtv6 -did:plc:5hw5mqb7kiuhg2yhh3mmhuaa -did:plc:ru5zioxqfv6fctxyl45qqcj7 -did:plc:7c3fpr7sint7lm6ro5vc25jt -did:plc:cpvp2s2iaswndcdsaeum5to2 -did:plc:xsbbtiasdmu6bmie2lhfcgpp -did:plc:l7fnjpnudmw3nmwgf6slnsgl -did:plc:flmyi2jbjdib6aor62dlhyok -did:plc:ziqwrsbxro45b32rxfjz4hee -did:plc:mdbcftu5ixznxsp2zbine52n -did:plc:ha3jgukfu3dfkslgcjx5yew6 -did:plc:l26kxfvhydwheph7sqhj55ve -did:plc:wszpe7fvqaby6qcyqj64ld33 -did:plc:v3xhbwbiuxsugxnylkzybryh -did:plc:vzcmnayota5qq5somwxfvty2 -did:plc:hoju6jbbggbma4iiewtalm7d -did:plc:b2ij4ofsto4ldayu2zbjksvw -did:plc:bnjg3h4bhxtdh5tvjmhtgpil -did:plc:5jnslbz4fvxmc2ivsapb6td7 -did:plc:4pfn4boudbaazywn6dldj7ti -did:plc:vcgfrvl677p26lqqdpghssav -did:plc:j4xzmmc6n5fuawe5hqym7x4x -did:plc:qabfysqep742hcllod6bk3s3 -did:plc:xfhbgvplqxifav4jbkfoknlx -did:plc:36vboo3ks5erquu5cvhuep4y -did:plc:fcrwlrqzqv2dwv4kgyslhtwd -did:plc:jmkry2ld4qzplhrwo3jvtu6s -did:plc:5eqyeaowwca64uiemjtlftju -did:plc:7gcfz7v6ha4u2wavjdtrlaaz -did:plc:duqq32iqfgnmskfpz2nq2nwn -did:plc:uymrcnczlup6xjfxk3jn33lv -did:plc:gm4ua3jgbwotszngt66yvphl -did:plc:v423xc47lm66taeqsmwad3wc -did:plc:mzlz6exm4jjnohrsmbmroqqo -did:plc:a2r66vvjf6sbi2d6amjj37hp -did:plc:pxltr4jwcpow5elcu3kwzeb3 -did:plc:5eitvb2zebny4s72wiekrevd -did:plc:j64vyp6lhtcabnsmws7d3l6a -did:plc:ervtdzpqt7zveb6omw7iii4v -did:plc:mhx4v3y4fi5x62wpm45ph5nu -did:plc:vu26ljcc2fzyvbxactxkx2wt -did:plc:hj47kgijaujf7r33y3sxdjjl -did:plc:cf6pzxy7ar33vf45d2mrd5fa -did:plc:d7llqfntmd36wrfiw3s3qlfv -did:plc:jca2zz2bbs5t2jex7htvui37 -did:plc:7nndethzr5yfoxgowahuagkj -did:plc:ugsysuqv27yudm6kfmhrvjug -did:plc:rweybvxjwzctw5gynxewa7f6 -did:plc:ykge2rsz57k4hvmlfpih3w3b -did:plc:nfwuwugs3crkxp7xibxhkql5 -did:plc:egwdqimjfgy6vklldityhnfm -did:plc:y6agwxkjcmbcfagzthllqtxi -did:plc:hvqe3jyd6jyooci25p2iaq2w -did:plc:vai4npwkbfowyz2eaukzgbew -did:plc:bhpmdrtyhsrh4yntd2czmmso -did:plc:bgeigx3ckrswfxj6oncqt7n5 -did:plc:chmkpuneb5tem3w53kq2zker -did:plc:4lc5cwxr35xwkzncwxfbnbef -did:plc:5734v6upc6gjahu6jyzysn2j -did:plc:txqs2yygniqb5casdpxuvbbh -did:plc:leri6vqxfqiixevvy36fo5kz -did:plc:6h4thauk6cahxbuhqrm74ywc -did:plc:xaf4naoe2p4kpjp7eg7gu5zz -did:plc:rmlefcxainndkuun362etwb5 -did:plc:ecvj2cwovpjpdm3ohf2zq7qu -did:plc:3ibtrpueg37ppyxl3u7bo6ze -did:plc:4bievns3fn6ms5d3krhs4oay -did:plc:kq6v54fjdr5j26cixmabls4v -did:plc:pscnrgpw2pzlt7qeqjq5y5tj -did:plc:hifgllmewd5l4d7royxhaxmx -did:plc:s7avqdwv6k4lxpjh6lmwoanu -did:plc:n2n5zdyszjqiyl2gvdmz7cd6 -did:plc:5hodmu3g4uogv7rdn7fkveu2 -did:plc:25rxxg4gwmika6j3m677fpsc -did:plc:oj2f5wwq5lrk3oau66cxkfex -did:plc:ilk3o45j7cxn64uzrqieezee -did:plc:ik5xm4u4dwh5opjltlc3vr6q -did:plc:5hioja4lpcgd5xxjztqnsvqw -did:plc:z2vzzt4yudqhxojvoyfigk2b -did:plc:dptg4j7m5pfcbuex5ic667jb -did:plc:cpqzoyisw4a5abn55b55b5oe -did:plc:6kcs23okfjxlpsrm6yz2dneh -did:plc:2viqkubec3cm6kmpvvovdcpi -did:plc:j5yrfqdtdfrtt3akalsgm7gd -did:plc:zrkzsaqqa33namszrfxy525u -did:plc:ksic2h3f7f75ike6mzerslfu -did:plc:m2e53w273qms2llzicunxhft -did:plc:ga3zbf5uzzijfk4d66j3hm6g -did:plc:ap6cfu7qygg473fl7hq5cnke -did:plc:xgwfm6hlotwjnuckhn2vofcr -did:plc:u2vhc5st5o4vo5labakxra2h -did:plc:wh5mqlkyzpflhage7crpr32k -did:plc:e72cwu7fen37hzzzhwy6mkxp -did:plc:kxdz4wswtafk3af2a5mn4zhm -did:plc:pq4twwggrfardh5zxjlxx2mj -did:plc:mf5gtdhjxuyde45zzzwd63i4 -did:plc:s75t3ett3jfomuzc53nuu6sk -did:plc:4n427bp3huz43kzbcpgkf63n -did:plc:z3nr7pncgcttao7fd5m7c62w -did:plc:7rz6nnbvpdpkev7wcuie22n2 -did:plc:azkrc44vf4nk3g3pacrbmvdp -did:plc:udmwqw3hzhxc4nh22tzycoa4 -did:plc:xk6u6vk5rljwrws72kulgjai -did:plc:6ohagfdk7mm7tctn4zw5n5xk -did:plc:qyfhev4guoaanb4sx7fnhmxi -did:plc:i63andemyk4z7xv6x7yi4a6l -did:plc:did6aapdpzyfgn3ymerlrqet -did:plc:cirt3gv3to6pxtvydwfxoizs -did:plc:r2p7a6wurjfwnyzdgyssdnof -did:plc:cjbu2mu3gk7k274gkwr5crsu -did:plc:veeo6njz32g2676kfojgqklu -did:plc:37hze6r22fvlgyuw2q64xfnu -did:plc:tjoxz2ljuilrrcwdor3em6gn -did:plc:b7ec6fhoyuzgxidraghlbuwm -did:plc:ir2xpbnbsnwquiqbqxdgxmqa -did:plc:xaeivvs2jqymgyvqyjh2ouod -did:plc:hsklbtt6sbfhjr6oih4yo6jj -did:plc:nw4eshdbobkunb3zdhttfq4y -did:plc:f2wg65xpb7yw424zudxuppqq -did:plc:djw522kdpznhycgm24n6fnuz -did:plc:3j5ncgls55tpxefn6mwkfb72 -did:plc:trsh73t7fzaropwxsm757suh -did:plc:xhqm7wh44svl5cpzacmli476 -did:plc:vsmopx3to3hmw2ek7qwgi23o -did:plc:6ezhefe2bk3djzqa5wb4tgjo -did:plc:nxt4zgqagykgv2ncaoirp32k -did:plc:wzfkthl2lsvgo5kqmk75bh5l -did:plc:nuwshvsr57wyjhjfayk6ytzu -did:plc:qxktccewyagn6yixnf5pix57 -did:plc:lkmh3ypex3ilyxespx4nqknc -did:plc:fp3vq5nxypffcilobbegauuv -did:plc:evni63xzzdbxwdwzzgu62csw -did:plc:2jjabyadebuys5dx5c5esy6g -did:plc:33yakndvju6lfgr3gh3qmgi7 -did:plc:7yhhybwefvqy33opazrlh2vz -did:plc:32yh75eos2lgpuyxo7nllatp -did:plc:zojuqmhei5uxptp6qq5qqg2y -did:plc:ingsnx7izvby3wmwmexmvp53 -did:plc:hn3uybm5p7tnx373ajjtanrd -did:plc:p3bl2eb3rkfpa6hdsvnuifww -did:plc:emzk4gfkuc2q7p57fizgz3yj -did:plc:zkhucrzm5zjrxetqbgdf2ict -did:plc:32ktc6yldbk3gv64pcmsgdr7 -did:plc:s5cprkcmyjcptlguzjp7lohh -did:plc:qvyee5ee4fx4jlx3vwd3pi72 -did:plc:lnxaew4i6xr5r54trfgao22l -did:plc:3oeyg26p3jgflptuwypwxea6 -did:plc:po4473cyovu5ugixvjzg2xjd -did:plc:yhv5dfrcjjozjbvpzei5qgfn -did:plc:jl4u772vp775uhtedmqemgus -did:plc:fjj772vsauabl6ilekhkx62l -did:plc:y5nnsw3vzen7fe67dbc5g5cg -did:plc:vqslicbwgsso3iemdx7wuy3m -did:plc:awnimmwei246flewkw74v3o2 -did:plc:oga3jnt4qpkmtyakk6cjq7ki -did:plc:dc3t2h33zwomfdeiybzb5y7r -did:plc:uxfbzyn7yjzmtasgo5qjkh4d -did:plc:632lcamkft2fgtpohr54x32n -did:plc:gulguaxmzcogzfpj42jjjcfq -did:plc:d7cw4pzritkoew2a2jyhkeqe -did:plc:nly36ivrslktazgvxhxuhvq2 -did:plc:hk2pbojaj223ooqjqcctd72c -did:plc:lutwqz5oomzxpe4wcffu6e74 -did:plc:27wl2uadjxag5hmkz7tyxy7k -did:plc:fvqkoipye3vfanqkg6n3ffxw -did:plc:kzouooczrvvqgjsogwiytg3p -did:plc:gbebak5dnffn4es5t64j4hcd -did:plc:rbvafi4mbyghhlpniv4vwmzh -did:plc:5fxek4pmdjlnuzia2ym7oj7q -did:plc:hnojcsru6pu27tzsp353hyay -did:plc:sgfcn67lig47erujylwtx62j -did:plc:3wledz65sapbfn2bnck74m4a -did:plc:dzk2zn3zdqhbfnn2oxthzaxg -did:plc:coerrdcuckfbbgae42fpd7wr -did:plc:e6g6bsigu4zsm2nppyfgbph4 -did:plc:hefwxolyvtjccih6wy25wv36 -did:plc:eq3gp6j2lkzu7mcbldo2jyjf -did:plc:pv7mg6js5ekw42dbpo4tcceg -did:plc:x34fh4lvbnxie3zog7lhe5su -did:plc:66xgjxqkzlvjuafm4tzwuymo -did:plc:yazori4zququhckzkdqpxkff -did:plc:qjqn6bjuazwistuujybesfbn -did:plc:4lt6chcmiel3sdb7xlmjdzv4 -did:plc:4t4wtjbrkvzbighxk3nmal54 -did:plc:h6a4ybfk6h3dgleloiga4sdc -did:plc:wlc7e46cojval3aa5fkhlaxh -did:plc:eodyrek6hffkjcukqeuoymzd -did:plc:b2utpafjiam3wnxzvitwd6n3 -did:plc:vtlkbum4njnkhpnw7eau5m4c -did:plc:vwh6e6htp7jitk7jz3o7si3z -did:plc:3y424buipwefvzwsxkzj7utx -did:plc:xzb7yibdfjtxvbhhl7kj4pls -did:plc:dhwk3xnuw2actkty24jls3mp -did:plc:oggyal3yb5juqifnqnpzrfpm -did:plc:xjksstpooo2cdpu4mvzc6foa -did:plc:w2fhtrlhtbwd53tvrz2mytrc -did:plc:y6ud7lemt7dzb47nwhfuea43 -did:plc:ivxnrppwdfcqz3o3abez23d5 -did:plc:v6oebotsdylig3kzrtjnbpq6 -did:plc:lehhe5cygx6bqo4f36ktbdsw -did:plc:pivdbwl4ywz3zwo3vh6peyl7 -did:plc:b67juk353xbfgegtrxqw3c4o -did:plc:gbub7errno3zeu64fj6eqnwk -did:plc:l7t5hkauhykc6snmd3laq55u -did:plc:xtr7bv3ienk4vvyp3gjef35x -did:plc:co7y77srmlnlpr2mlkjtyetv -did:plc:45cmcrgdqydyuuthook2xcta -did:plc:nx6smndg2f26w3e76iw5uxlq -did:plc:uaxbykauqjjnj4pj2a2oy5al -did:plc:gg2bbxtsvwzuqqfotkhzdsya -did:plc:dz54o4phvlwst6i2wh7ebxn5 -did:plc:6zeg5ai6cjru2fx7vos256ka -did:plc:l4pkh3kh5zob5fz72rfwrn3n -did:plc:itjc7yq7xgkl7kwyjv4vrwd7 -did:plc:3cjulnt4kufdt3ohgpndojvh -did:plc:qn6ejcl45ghimuae4iwzfbbq -did:plc:4wdu6zob2dv75vfypqrrt2bo -did:plc:2j4gdamxgbptj5c5i4yimfzh -did:plc:qsr3rptzls7szrazxpwukcr3 -did:plc:c33qymajn7f5ow5cyuab24os -did:plc:z7ln6m4zg3bt55xc7sy633ri -did:plc:szkg2jqiytrzhqpa736zli6v -did:plc:qdfij34cynly653mmwsey5gy -did:plc:ox7zcx5vk7mffsr4jglbvcoe -did:plc:n3fjin6eeiwupt4x2fk4mz5k -did:plc:qu75scbhajrjdmmqnoraiudm -did:plc:ryg4wm3igxxmyzqaws3it7vb -did:plc:ldtm2jtsg6aulzob2ipg35qz -did:plc:325aursfd2rjv55wuxsdqjbi -did:plc:w4vtwmg4dwvqz77kdglljdqu -did:plc:gadsdkyzhqvdatpb5nl7x6p3 -did:plc:sdnly3suhwec4pqy74sw2v7u -did:plc:dlkl3ar4r5ee2spc4zywtw2r -did:plc:qksc4rxwyncygre5omp3xelz -did:plc:lqdmkfyt46ucmhowxxbye7p3 -did:plc:kaewrkbi6zukxfzztkqpqseu -did:plc:mjo72bzthd3arfmrw4uns4od -did:plc:qryfxkfvhx2whwpedejhhte2 -did:plc:7l3wcbqdt7mtcccemwpmxsam -did:plc:heg3n3a72deabpalqx3gcvzl -did:plc:bzoijunplkixfqcyn62jzghd -did:plc:dds35iuz5loh3jogrhqvh64c -did:plc:drj7kui3ooltfmrd3txkhz5i -did:plc:2ze4qxtu72kun5jikcniz7m7 -did:plc:m5lpg3yes3tbbpjwblpjwc6c -did:plc:xqwom52lhezn7wyp6nw5hqx2 -did:plc:cqv7t2vnptayhsmnn6aguhu6 -did:plc:lpfcgi4vpyqfas54dxo34rmx -did:plc:lorqjms3ofhj62dqsnsgawgi -did:plc:2vy6ryqbv4ct2vknw6eaem2x -did:plc:6vwg7g5mobkya66ya7rjh2kl -did:plc:laexj5icvqu3odmtnhis37ue -did:plc:rbtmbtq7d3n4zhaj4dj4dy2w -did:plc:c6f35lhnlef3qfttkfy6esuf -did:plc:wpdyo6l7fl34ypkqcktepa6k -did:plc:zh3ehoa6na67bzu6chshsohw -did:plc:s52xjdbkhytb67ff27jd5vby -did:plc:x2zy3mseb4jqj6fbylpatqea -did:plc:n5dijfzmptz6kmt4q7rxejxd -did:plc:bjozg4qxmmmqcshujqiv5oec -did:plc:te3bqo6sltjw2rnxtcse6lti -did:plc:poprk3fy5ns5pjkqcrntbsuc -did:plc:w7poi6ghcki26zgwinhdkhz4 -did:plc:22oaea2f72kxuuiikkwsxd6c -did:plc:bghvmlsevebl32uogvn7ah5z -did:plc:qhinklg2jumn466rnuse6edy -did:plc:5fx3a2hr5ccugqke65jmes5k -did:plc:ro25ivaumop2kjoc5wuensdn -did:plc:2f77s57no7boiqd66ya3equx -did:plc:puxhk3yqjptbjzwmssijnz4d -did:plc:6imthsk5rjhitvm6w3sgizlv -did:plc:epmzieojre4zhpyms6aqjaul -did:plc:pqxpbedgvazhnzzvgpy3cpnb -did:plc:scz6bmggj7fst7vtgcdeszgg -did:plc:i7mdmzb3xzum6mjli2vv72qv -did:plc:fzifzqezgntqslxufotg3nhv -did:plc:bd4ronufiyff3ocmkunmr4gj -did:plc:3mn6pvepldolm6d3g2gi5th3 -did:plc:wuz6w53amzn7vadw4ooekp6a -did:plc:lomtpgvgblkqxzf6bkokam7t -did:plc:bxw3za5e4tqwiphxndma5csh -did:plc:r7nk3gvrbia3hqozfz5h42xn -did:plc:mwg4lse24he2xdfs3lgbof37 -did:plc:aut4c5gbwocpkx7vrpcta35l -did:plc:paq4jy2eg5bdheflmsqd2d2e -did:plc:737exae3wamil2h2uffiais6 -did:plc:gzs6wecn3bxsiwccd3m7imsd -did:plc:ppikxggluaqk5jmhxmotvkng -did:plc:3m4gpjmaznqw2q2iacajxtvc -did:plc:z7ud44p2pd5shsmhjwdhvr4w -did:plc:nm5bepqvaopxhpwcq5k3ctc7 -did:plc:3tijvzfb3kwlwepfg7rtxwip -did:plc:b2qrk4wn4ldn7c3hvjoqasad -did:plc:x5exlf7nqa7kwntqhydmqgoy -did:plc:trdda4qh6uxoctybszbhsfnu -did:plc:b3idq6exdkectglusvai4uf4 -did:plc:sgdkpg2tuarbuipzpjm6kjg2 -did:plc:ag64gdtlu6kbciav7vq4nh7i -did:plc:c7adxfnurj2obl4hivyc2hzu -did:plc:sf5dw3rhegawhar5elboyvsr -did:plc:vsudppkqoojpfdy2rvzjbxp5 -did:plc:3d55fjl2vcq6nvkpa5barrfy -did:plc:pb6gp6lb327mva756kln5yat -did:plc:bfb4lkux6r5ucqgcpqcu7e27 -did:plc:wvfm4234hbg7rjhh5wq626xq -did:plc:rf2xuxxnitg7qrqpeiyekmxr -did:plc:4dttdxomzpogr4wv2qdcu5ek -did:plc:wffvhb6stzymm6ln6hhi26id -did:plc:z5x4glhb3gqrxx53isd4z5kb -did:plc:eaycx73gkwqsd5mnrhdpjf7m -did:plc:t32ml6jdb4ke73yayyowes7l -did:plc:x3f32dvmx67t2pkd7nsx6g2l -did:plc:ncaj2z6btps4m5hifgm6t56q -did:plc:fdxlntu3yy7emuocolctoaiv -did:plc:5ks7ldpjbwv2drc7pipcwrby -did:plc:7vfkcgjt53bq3fqa7wu576rs -did:plc:mgkrh2vph3a6xmrifgcwx5bo -did:plc:a7rfcxlhafxp76ql32elftll -did:plc:fnuaejlpsj3wdsy5iiaew6yt -did:plc:n577xa7nvs2l6dxen5my32md -did:plc:jbpnqm3cmlssseipd7wlabqq -did:plc:ie6mxpfl4n4ebbgacepsfuq5 -did:plc:sz2id6sy7nfgschcf76g3jv6 -did:plc:kwvuoyx6d24yj4qefqn76stw -did:plc:ng44wfs3qlb36rfaotoqrm2v -did:plc:yyilv7nz5733syzojzlzv7kz -did:plc:u63swizopwhuzaeybtmb6lg6 -did:plc:ctusa3ijturwv3zlc72x2kjx -did:plc:is2hxvppoyw3dfy4pvmd7sxo -did:plc:6thr6dv7o6lhn72dxeqnfgxo -did:plc:cuw77a3iuy3ftfnyvaezsyav -did:plc:akuzymwjcpjfmcs5hrulia34 -did:plc:4dm6xm5xvfyjyij44qkj2bsx -did:plc:ildmvks3nxfrnyjntysghxva -did:plc:tii6mmfwah2bxvc3fvk43hg4 -did:plc:a6rddvf5srt6vmzfdlab5pko -did:plc:4tsjcosdxp4jwvtobu4jz4bt -did:plc:7jsmo4scmf5k6j2yhjfw6qkm -did:plc:qe3g3smy2m5dtuw4pen5eaev -did:plc:zaq5tgu2qs47lr4gwojjqkmq -did:plc:xmakx47wrtjqgqvcqut76dit -did:plc:orc4wyle2jwlrls3st6coh5y -did:plc:z4ntujms5nla73fb2sgavrs7 -did:plc:z6any5posonbtuwex7md44wb -did:plc:e6lprlfxw6bxvntmuykpvec5 -did:plc:5sdjshdssdt2vpdl6cyiqe3j -did:plc:f5iiovf6f4hqfmygryvi7axk -did:plc:wcckgyssystbtprmo3wbpu6b -did:plc:idf6zypltzdhq6vszghfiwbb -did:plc:m53apk6pt63yqvdgtvtkev2o -did:plc:ujbczgijwowkbkgokefdtu6m -did:plc:bk4phhnhsqtbhlit6xnlqsds -did:plc:jw45kzpvms3novi3pbkwj3ru -did:plc:4htc4g3bhl6rgh4zz3epn3tl -did:plc:hchmvpsq7pa6pbax5i7fpu62 -did:plc:ppw6seeknfymkejkcccj53bw -did:plc:kn5mkihtgfyqszlghra4baq2 -did:plc:vonhfm5alhclus37pusb4uwp -did:plc:yd5gsc7fx2nucer52ov35upa -did:plc:l37xvcue5qeb44wzzh4pm47c -did:plc:jhrbh5goyleb4dwoaqvgrigz -did:plc:h6zhuhm4f27v5m33cmxvb3ny -did:plc:5zm4l2tpjf4fg6s4h4h3pfd7 -did:plc:jkihta2tqlkon3c3x4p4jsaz -did:plc:oul373x4iireisugtgwpw3p3 -did:plc:2po64tvtsy4uhqtmgdfnqbfy -did:plc:zq4xrms23ythghfynmzp6jr4 -did:plc:hfaqz6q6awh2bomrmggetvck -did:plc:ynwomo7dgxdd6jgywshjh7l7 -did:plc:kgr5d35l34tbzpfdilwqjxo4 -did:plc:fpsgdhyndw6dxnmfp7a2mcc4 -did:plc:q5mkgkwu5vzqmgfdkylzhmnc -did:plc:p4omo5xwdhcl7sttmkmhaccj -did:plc:sq5x73pqypzzyothr4qou3xv -did:plc:6367ofxhg3kdywyuhjhswegm -did:plc:4pwehewc6xw3wvw6whfeilkp -did:plc:ywr7d2eshu6mx63ybqu4aftn -did:plc:xjspgbukswwg76d4rmdif53t -did:plc:g33dh6syn7pumicwjalir77y -did:plc:hj5s2kekxzrjwawt2i6jdkp6 -did:plc:tm3ngnd3locqyv2ajturu3og -did:plc:dpvyvkddwm5alf7nzemr5q7t -did:plc:sl6n44ecl43p3bz7nbgvpeh2 -did:plc:s27lu3dmrmllvsyhlbyifpl6 -did:plc:y3yuo5zzc2ddi47kqhoixg2d -did:plc:seg6u2wyktq7vdjoc2wcrxff -did:plc:feuuqu4fpgcvxx42gu4ea33x -did:plc:twd4pvmds7pyvvgrjsgoscdk -did:plc:xxw2ccww6fkhchzz7vbosd7j -did:plc:vkqyz2gdjrvdqmdmplurwasf -did:plc:z7ak55xdcwfq2olo35xisibx -did:plc:zdeoipg6za55wkl7gwtwqvsn -did:plc:p676sjyyxp23bbkspdjn22he -did:plc:ypaymlo2hj67xojh5bxo4sih -did:plc:6ndwwuk2exd5vsnr226iqntr -did:plc:5ha52bqpys6aepoiwmxd2qpe -did:plc:lfyecpl74rmguevd2cb4vybj -did:plc:u33woq6xn3lp4ssstbt56zs2 -did:plc:i2b26yx4pua5mkz6a4z4ddvh -did:plc:glkthjdhqsmmg6nwjvwdkxro -did:plc:kzjtdmobcxsf26s5bdqv26jr -did:plc:7xaipbxebu5ne7ozt6boe6y2 -did:plc:trwpdhpzwviqlpr6s7ijp3qw -did:plc:oiksez2alqzsmr75gkz5x5nx -did:plc:pp57kh23q36ivd4xp6g3i6qv -did:plc:ashfk557vn4ualo3f6bvcx7q -did:plc:jh46iiv7ftzckk3su62ip7kt -did:plc:k6eyn24dedgzdqqotk3czbhw -did:plc:ivje3qoc7dzyxqvr3pi67cbp -did:plc:pq6i4s6f7fhvta5xtecjrsuc -did:plc:5wtmpxwbwgflzuc4ppc2e672 -did:plc:vn3h2diwjhdbfwpclo3wh627 -did:plc:l24gfe2nsbsuohwvckkjflvq -did:plc:vgr6nfg6zgie2niuez6fla6d -did:plc:jlmzaeq7hlnamghap3et5665 -did:plc:utomztwrltbiqezy6u62hpvk -did:plc:wpa4svzs5n2uvgzffhxwdajn -did:plc:7o5ppuk7gbyqci6ywtqetkys -did:plc:ya6wnsk3y7sdaxlg4akusam5 -did:plc:z7j5aizstl6wzjxdhx7e5fbc -did:plc:qpbjsn2jax3skvoaha6imc55 -did:plc:h4csdfvbxwhu6nxzw2dpdme6 -did:plc:7hjfnwa2tx4hieaj3ozvl7ik -did:plc:shnsihr2hj43uai44lpt6b3g -did:plc:yt47vypeo4j6hu5s7odowia2 -did:plc:arcpbmptbkqn7e3y4ebskiop -did:plc:nq2l5kj4tsd45qamedpv5tml -did:plc:6ieoww2orck53fi6do4keklc -did:plc:7viszmhdrov3ymabtphhtswn -did:plc:hloec6pzvqxb64q4h7smydg3 -did:plc:ycyjwfwggbmxxfsrk4zezueo -did:plc:4txh43jnwg52p2apj2acpnlq -did:plc:gbi35lcto47ld4k6ncx3ltdb -did:plc:yxo5qsa4zymgc3jt2hbg3zlh -did:plc:ab7fwzvyfihzwgqwco4rrw5b -did:plc:bn42xmitngfvdqj7y4ajjcbq -did:plc:umvus3nhaphas7t2ruvp2btp -did:plc:ho7yt37pdy6dqqlctgazdknr -did:plc:u6zglb6l25rai5nbl3vha45d -did:plc:ud6rqrlyehd4nc43admsdnxc -did:plc:uhx7e3wtsh2uiimuxpbhfh5y -did:plc:ztfb6wd64qute7yvlwc4luer -did:plc:r7owqvs22mz4rvad4zf2dbbr -did:plc:22hr43jug7e6bpdqhas2s74n -did:plc:qn5r42m6nbkfnuyebkywky6s -did:plc:c5z46x2d76rqfxf5x6sowrq3 -did:plc:kqpxxyqn7bewysvo4eyuyy3x -did:plc:p2jmycmchqasgduekmhnec3b -did:plc:7oceixrs2qhub7y7declrgk6 -did:plc:ge4avchwxtpqdlte5a43kcd4 -did:plc:ffb2fcfnh5mcvfq4gavradb6 -did:plc:xgzk4byqkxw6thbmfu4oriat -did:plc:kjhyk5lxcbx7pahsydzrvn25 -did:plc:xbvtkkivcqmv5i755colazc7 -did:plc:zaudsxburcwjybjwf76mkbxs -did:plc:uyzxtl5tcretynzsd5u5acuo -did:plc:uq3lap6v4xwys3b2at7nrfs4 -did:plc:fdlvbe3dqmnajwr2adi4iild -did:plc:7mv5ppws66wilpuoia77yloi -did:plc:tu4blw7yanbvpz75qkxktys4 -did:plc:fmjksgmsctbjdlj2bvfe3633 -did:plc:lrfapunwg5trd7e2r3ccfqwc -did:plc:x4medx6ffgwgwj4hefuyhmob -did:plc:m767va77rs2z6yfh5baevrqe -did:plc:lxpa44lmn3aageeufllynuu6 -did:plc:yd3qyut2rapgexxeu6qsxzo2 -did:plc:m5znehy2ly7p57y3ii7g7wqn -did:plc:ko3xvqobea2ttq46a4pky7ab -did:plc:anhalhbxwb5lcvme5xcxmsip -did:plc:7hutbgtkg7ukdv4nvprnrrip -did:plc:r6iq7jl5uaa4dyithhmjqpkr -did:plc:mojx2nxxqdujggnd24s7druh -did:plc:qwa3aofonqzqirnptic66xif -did:plc:jh7ggvpcs3sjbedr37xe6z6j -did:plc:xfrygsyrfx3xiukwfakkfk6b -did:plc:v6htptwjefzuw737ptbuioca -did:plc:hf34ke76ffgfprvlecuphuel -did:plc:pt3f7zlyli6xs7lnkgy7um6p -did:plc:44ilykn7ruwpsdamint2wabl -did:plc:6yuanwd7uw3gllid2mfa6mez -did:plc:yy7iiz47julvntyf2pmgp4e7 -did:plc:mspnzw7i742qvdbevh55vwex -did:plc:vb4m6bnar6bxk6oqcdo7ea22 -did:plc:u4dymgr62prwc3exdjjtl2pb -did:plc:65ord6bnqj4wyzbl3st653am -did:plc:uqdykpagmwc6uexvtb4kvjmy -did:plc:zo3ylq3umqe2hfnszn7tmsi4 -did:plc:fzdtrwh5xunh5whloo2dk4du -did:plc:6hpcvbf2bhtwyfh5cfmx6clw -did:plc:tkjv3o4kne2w5yfvqrtqe54t -did:plc:kuxzpzxrtrhucibabgy72gcc -did:plc:7i2grzu3lvuott3xqpl2vv3h -did:plc:l2xrevkehk2vn3gxykmdqtyf -did:plc:vildlsvr6nmtybkrvujrwovl -did:plc:tahbbcz26djfv5tohsu37j36 -did:plc:uswe4rwfzi3iacoyorwofipg -did:plc:4aixrv4vtvcdrffrlojxdw6b -did:plc:pnvrmmjmjh6xzxajpyj7u2rz -did:plc:4ldsqa6nqrzg4nawqm3zly55 -did:plc:skjxfydgqkvinq54n5e6yh67 -did:plc:uo3456e4goj3cza76jhjuqs7 -did:plc:al7gcv3h7dim6vbiee5flx77 -did:plc:kl7l7yzfuwfjtmsgggc6oemv -did:plc:qats5wdxgogjgfrzqxptyvdb -did:plc:qfqibtrg2k7r2p345p4pbgpi -did:plc:7rmfqc7rs5waflv5byyotdai -did:plc:3ocybhl7sniwrylgnydxatwm -did:plc:uwmme43flea4ybsrkxmk2pdk -did:plc:r5qgo4yw2t34fodze4rtmmco -did:plc:ui32p2gifahikr6lhdzpbxc3 -did:plc:sqyddduzikr2oyqiwrtcxao2 -did:plc:dcm3h4f6ntqafdx2jx7uigbm -did:plc:bpzpgsi5gioigt5hhebxxosc -did:plc:fe2h2djkg3mli6arxbogl5mi -did:plc:unp6msyxnvuwpyoboryk55e7 -did:plc:7yyuqj6kcg5whww7567csndo -did:plc:l4las7c23oqdkuxtohzbwlwx -did:plc:7a3kb5gexj27gcus2qwam2xs -did:plc:eumoz2r4m3hb5hm7qghpqzfo -did:plc:f5xwqw3d22ywbm3qu67holgc -did:plc:z2aagn6df4bi7z3sennm5cd2 -did:plc:v6wj7e4gp2thmwqiyqtg36gm -did:plc:k23x4arbn7yxq636ue7ohgxs -did:plc:pmgah3jcybm3qzel6u6qkvw2 -did:plc:hzqpicvumwzwr7i334dubfnk -did:plc:oj4ddlrief2s6csqzscruolr -did:plc:2od2xwxjmpaw7yjvsechfaqd -did:plc:tsxwqj3hljjlnxbxgxi2ulj6 -did:plc:xnzg6yscpiso62kyqrk5limp -did:plc:ktebblr6hghd4dhmtbungz6c -did:plc:ry6xnnxmfcxp45zkjumhbnf6 -did:plc:exai7oenhpxnn5rpztcdhpls -did:plc:nqau6vhr7raqnlse5vd4ecrj -did:plc:qs2wo2kxgi3uddh5xqwvx6z3 -did:plc:f5xxhqslzf3gxm44mhkdtyog -did:plc:raq4yjwb5dmlarwykf74gdo4 -did:plc:4hjd2krw32jpcw2alweijrz3 -did:plc:wm466x4rakhdcxveqvjc74k2 -did:plc:vefh6rdpwrxhbb7nhlgtxqze -did:plc:qlhknueduyqfbt34qdmkefrw -did:plc:xmj3dnq6vevwbqzl6w3ldrnv -did:plc:3m6wi2hzox6bpdigcipne2b3 -did:plc:yceeez3hlzyc6zc6nm67j4l4 -did:plc:o72ta62nnl7y6eoanhrr2vel -did:plc:b42sj6nekwbxunqlmkqmqswh -did:plc:mmmyp7odyyhkvos5jb2vy3vt -did:plc:wyrt5gfi4zypz36nnyh4arjt -did:plc:t4ly2ws2cx57yoj24o7cggtu -did:plc:q3pbi4ajo72qkdoh3ogv4g6z -did:plc:oj6tjx6rnfy3g3wjumd2swog -did:plc:452nb4fc7outzh5nj7qtinm5 -did:plc:rje4snbb7obj6twr4gji7ssm -did:plc:bpvjiculxsmsp2sbdh2fbbfk -did:plc:qulebf5vlz2foeqz5lf5misj -did:plc:hwooviwqvmhox3pdiksrudur -did:plc:m2hzc35qu4kbzdww5j35vla7 -did:plc:2s3mwwmxrn4tusvrxia5ygjb -did:plc:uwtksnczeypk7iopgrttbyom -did:plc:lgcmveeimi3fef6ynznrzht2 -did:plc:yzfd6bf23pvgf4kxji25w2ki -did:plc:xn4rkk5qvkmaiwu3hqowdfmf -did:plc:2lc2jigeo4jy33zaiq5m3cd4 -did:plc:p3qxu37rwftrorcrus2p5aje -did:plc:p5kccv4rrbifhdmxm6mj6yud -did:plc:4v5phmf65oksoyu3vittp322 -did:plc:7rfmnzj5qtasktoymbtiiryb -did:plc:sb5ecrd2ds4pganvcrbxri32 -did:plc:dtpzhjh45ytjzy6w27gjnbxx -did:plc:zsow6fbxlprddg3tdmxp72mx -did:plc:dwufm4biz4o4ubxtqiovq3zw -did:plc:czmkbm2dwbkdlbncrd6a7wuj -did:plc:osdjp3dlrpgp3dpbz4sgqwgp -did:plc:uclzobsnqhfwjxhfia4c7o44 -did:plc:xpvbzynncyttisykuyma3byo -did:plc:hfnf3x6lgb4dq52e7zif5wps -did:plc:fp34eysa5nujeuexlgtldsls -did:plc:3qzjmu7qrzqkmyf35duz2nhm -did:plc:nmlkq6mxtborlbot2c354iyp -did:plc:3u4cndhzmfd4biblxw42zuww -did:plc:yfg26kivx5qqtpyicdekd4en -did:plc:4jccrkxstchnurwvvbzvcc3s -did:plc:vrp2dr5w57xnsb3camc4cfat -did:plc:wbyxvg2hfk7icr3o5mrdkb7d -did:plc:n64xnsl5jwwffy2swsrn62ka -did:plc:6gf4vebjxchdi7j6qja52lyw -did:plc:a4y6pzu2hdzlrfezhd4nhuhu -did:plc:wqvcgtwo7vip7hiumty5h2jb -did:plc:z4qr3yb4jgcfk6cnnjemcqwk -did:plc:zfpxwbyn5xmai6giq3ypxf4j -did:plc:yqdwotsrwiqfj4z7azhuj7zr -did:plc:rj5vjv6hx6fsqr7zpdtegttk -did:plc:id36v2vegv5vo33o6hgxxz4d -did:plc:hfzsy33kyumoo4sqrti3vgew -did:plc:cbgvkymqdn6i6kgyfywhcys3 -did:plc:3mhzuf5xezgegyyfnjysjwoa -did:plc:kp2dpdv5m4wnydsaxnscsruq -did:plc:42pvu74dtiqengcc2bsfcoem -did:plc:mklokagxayzolheaobz56xk4 -did:plc:pdhn2okoaqlf56dg3mnxcdlt -did:plc:6jcimz7y3jcdwl2rhtitozjk -did:plc:soj46zzxmn6myoklhkmfevrl -did:plc:zy3dizm4d4o3tljpgmuvgfnu -did:plc:tg3rvawiywy5gvtdsiwxxhrn -did:plc:vvdrimbhu4kouacycafar4cs -did:plc:pwh4hsbjda4v7n2lahmovgul -did:plc:snhe2oxrn74k3m24ffw2mfie -did:plc:zgrvwcn23h3pzkjuo4hhe7jj -did:plc:z2r6me4yzz6cxrhjyyjitbam -did:plc:xda7n5353at3nzlqvyrndgp6 -did:plc:lsktxu7r3c6cprwgi6tgd4eg -did:plc:r6uyc7o4ysipotlnkgj7bn76 -did:plc:jqfsezaf7jnsjkhwq2b4eyix -did:plc:p3jqby4a7rawzkscssbfi6e4 -did:plc:a7mvebkfu7vuum47nzenoizj -did:plc:ta4fzzy7jqszbtf4hpyui7kr -did:plc:exn7dc3ynqod7aex7w5ihzsj -did:plc:6kfmaoedii7fbjkvwp4ql25b -did:plc:vuhw67jz535j4y3qsohw35jv -did:plc:koow7jzgrrpcdidhlts72pfh -did:plc:cpzonulcttrpijjbyw3kjbgd -did:plc:wsrhqzhxddqkj3q4mnhg5cak -did:plc:uaeeoakxoukxipbtwptwau5w -did:plc:45fydhqahfmiva5krrflcg24 -did:plc:imyuvrbccpzlmo2nsoqkvhgm -did:plc:zribkykdhaofkpkcbcnphgnp -did:plc:aywqtpcdp4wuoxmiiolht4da -did:plc:cgg4li7ufbtawkn2ddldpnm5 -did:plc:nwp2tguqxxpo3x6q6ugcott4 -did:plc:aphzcsmv6i3d2ce2wilbcbyr -did:plc:3hpzaayax2adhdm3avpdddpm -did:plc:txpnzyfhjhjvgyi5jd4i7r47 -did:plc:ufy6reirhhcybzxdxn35vhlt -did:plc:6b6jzmewnp5b4tyvyiv7i4f5 -did:plc:mm2eq7nzktiqjznbpy6r7rwa -did:plc:6tof26fssbrvmbtfxzjfpczs -did:plc:4eozimym5sjy66xiwtc77gv7 -did:plc:k3hbkyrgl7ezvbmbsphms5ig -did:plc:tkmbnn6rgaj7s2pzb7nymmoq -did:plc:i3hrfu6ceh765vnxz6yd4bhs -did:plc:hrk6llwtklsqbf5ffibbj3d7 -did:plc:xjorowk4qxajaml75e4ijztj -did:plc:yaku2ikr6prooig52oosqw7w -did:plc:imbxryzkwplfhb3a3sex7ezo -did:plc:cs2afy6ud6fv53hbpx57t7fd -did:plc:iuecfbfra2ngazpbts3f57nl -did:plc:47xczx3axuc4szftcdpphqep -did:plc:uhjfa6khtec3xps64nk5qqlr -did:plc:ggg7g6gcc65lzwqvqqpa2mik -did:plc:yikl5qswlaofhrffdyzpu74v -did:plc:frnxaob66yuffrqldqm45fql -did:plc:fiyzfqpjjeimj2nsqvikvhx4 -did:plc:jhlrcoto4mptaewuwaxdr5vg -did:plc:acqln4u4g4etpe54c563vfgk -did:plc:pbnedfg3dzkhtbcjvogs7zxf -did:plc:cvohvkqjrvovgnhyr62c3yuy -did:plc:whqrti4fpu5mdbyjgdjmsmyk -did:plc:vwntv5vntovbcykulspo3icj -did:plc:pem4hlz7k6uz2toiennpruib -did:plc:3qxev3s7ufxk75rwwfkovtha -did:plc:zssj3xmukqpai26i7i7hntur -did:plc:rqtnkbd5xhgfstrw7w4epfs5 -did:plc:hcpcbicl5xmmzm5ka7ejuxvl -did:plc:wgmkbrovycelx3kbvcnvpiri -did:plc:xqljmpbpqtszzld64jgak3fx -did:plc:6wnzcuj6uoardto5td2ddzdb -did:plc:cj5szj3mu2ood66kls7oifmk -did:plc:knc7gup5mpnjyog7dv5hvm5m -did:plc:nmst2i4p72ods4pufnn6rc5h -did:plc:3nwofwh2kjng5hjhbh54453g -did:plc:4zxnew4js2qofw3tovd3ft6h -did:plc:773hiaigxzm4znaxfrpqve6u -did:plc:m7yb6qdlribs4rg5nu5meaw7 -did:plc:zzbq6zptmesanvq4vccqerlu -did:plc:7pf6fxb5zsmrzhwrybyutmz2 -did:plc:t33vqzfaevavylo2nehepn27 -did:plc:vr5q2iynpjolt4dboi26romk -did:plc:yhcxtphccfv3jeacygabveql -did:plc:umvq6izq34qh2jbqxa7myvs6 -did:plc:rvu6sjboraai7dujfr2l2ehr -did:plc:qe27e7kadeu32ddhpegpoxj3 -did:plc:amfkarmk3tv2cdw7nou6u5mq -did:plc:7ekpvrg7ne2oltxiiag4zcvo -did:plc:cocbyqzugxjp3wxugugy55ot -did:plc:7sdhdhlr4uldhv7pdgxz6tq7 -did:plc:dyh4qssn6r2hij7tkcoqgsw2 -did:plc:osdc5lthjmd33wj3irvm37if -did:plc:7tj3vrbxq6jqvey46ftrfz6q -did:plc:6yl6emrptc6aduvxrpl43vdh -did:plc:6y5zhrnh232n7cbft6esixxx -did:plc:eobfiptdlw6cl7lokf77zors -did:plc:j5otcx2sb76x2hjtkd2xdhqf -did:plc:r462pqw46ovlvazsn6lburr2 -did:plc:maduiklmtxajinrpadgcstnz -did:plc:g3zovthrpccx4mwramfbqgaa -did:plc:sedgmb4kgdpveacik64cvp47 -did:plc:rxw2ed63xblnme5zuz5xbox2 -did:plc:7micma4xx4rioscha7irokri -did:plc:ifcposy3e6frphvetobi7mva -did:plc:gfn6cotedq5dktlkanw4c47o -did:plc:a445pdqpqp4lapk7i7ryfvdf -did:plc:ha346qfnou6gnvn7423iydom -did:plc:oyxojmq4zwur7o7kkzkmkxmk -did:plc:tywmrgxz3kltgtoipsdkdr7g -did:plc:vnpfiitp25hmdcf3ipuubmhs -did:plc:xunw7hsqueinj4k76fvct4uw -did:plc:y5ga45vhgo7suffwshmkfcav -did:plc:s677xfs326bpioyjsutz2ydn -did:plc:jygpwgyvieahmkaoqeuqtr47 -did:plc:zhmiwartjsahw2fzecybjvp4 -did:plc:v3pc5dvedax2ey6xqwuopdn7 -did:plc:glyuan43jnj72fjihcobe7fi -did:plc:7j2e6xbfu4fa7nb4jf3h45fd -did:plc:li4ely4zr7jfdule5r6ja4y5 -did:plc:hdkjc2wz4uqyqralv6irxkux -did:plc:rzljwp5qpdak4fllnnoma7a6 -did:plc:o6ghihytizt4oqnmb4g6vwvq -did:plc:pqxiq2uavpml2od7juzx2xmn -did:plc:pzbywfzicsqg57cwl2ycuuux -did:plc:kl4utgii6ofsmqm3vbw2qimx -did:plc:mwcbkhreer7t2n657dz4pwfa -did:plc:wv5aotlmjmjn23y5wcwxkjbz -did:plc:vyfvjgluervnazyv3brmkdxw -did:plc:uhorzhukh5btkvczkchskzns -did:plc:fl23r67vfprtxf4wsleu3w3q -did:plc:5rzkcuznuygd4nwkvhbzd2li -did:plc:w6wfkt2bwpihmlkls5rnirps -did:plc:mrgilbh4nt47r3qkgm4yahaq -did:plc:plar4zuyofa3jsjlns3335ks -did:plc:saeha4m6p3zyqtl6mdthdgsf -did:plc:35gfehtp223nydj5ysa4deyc -did:plc:d4ztsersi7rqz2iwejydbhz6 -did:plc:tfqq4j5q7ovwoerlsqdpmeyt -did:plc:gzh4giqxxp7rr4mptx52rtk2 -did:plc:p755tqmrm4jpokgbkzoo2cpu -did:plc:n54tlyfvoar4xbcmjc53ynbt -did:plc:lqldhuynisdcmlafmbaei4fy -did:plc:iiukjcr5ls4u67ocntfauj5m -did:plc:tgmbwh3vfuh3s23i5uf63h5k -did:plc:523n344v3xhhk27i35qdidar -did:plc:dait3hpduosv64quksdcuzjb -did:plc:sxxnhzipsapdm5inx44fr322 -did:plc:4qmldhjmsvozldytrmot62gt -did:plc:5mrlswiwjfkzai4obny4xb4x -did:plc:w2w32buwkfbevfweymmkds2a -did:plc:xwrbt5paefcfmmg7ezvqd6uh -did:plc:3eofb5tf3atfjlhjx4yj57cs -did:plc:c34z6dghwrph4szlfqne7kzo -did:plc:zb4fdb3hpmaqfm46w6ii37el -did:plc:xwmkkvrfresrawavqskpkfut -did:plc:5g2irqwhbtss7tpmknfkvrl4 -did:plc:onuf5v4xnyl3p5f2ydh2jfyi -did:plc:3z6rwzpz7klx3anbiza7n6uu -did:plc:hxv7ydekp7credmgqsc6tqo6 -did:plc:e4gdd574ctzck6zbn3xosgho -did:plc:fvcxsr6dvm3r3e45xthq4s2g -did:plc:qg63bt5qjnxsaener6lte6ze -did:plc:i52lbako6gbbqxfqhzctifbn -did:plc:6lbspto7urisrdqh74v4p6fk -did:plc:du3i7hg4gofqfhpx72ittjqa -did:plc:apxmdl7qb5sqkduifwahe2s2 -did:plc:kf7v6ku5dnne6v5ilhxfnn4u -did:plc:i4cn2zodwda7qpms7yydvjpk -did:plc:wfjwlo3yy22orvyc4pg2s7xz -did:plc:i7y5u2srrzx6xfbcunbhlb3n -did:plc:7scfpctd4vsvfx5zblw4bhps -did:plc:jrw5zgis5etgdhwelcd2fu5i -did:plc:lws6elilof6c5lyyeck35vzx -did:plc:7fmd7api2ka2cfsn4mwwrgge -did:plc:vx63bsgwq7zs2lv56cztlbiz -did:plc:qzrsmevnptro5vbsxl3pxkd3 -did:plc:aim3gkse4dfcl4xfxwcn4hpe -did:plc:a4nkiwtnfdiafcssjgh26i5m -did:plc:ijayjvzp7w5e3jyyv3ibzad6 -did:plc:i6nxbmdj4olciszhidbdsnym -did:plc:eamwplaguyzdo3utk3iqtlqh -did:plc:66pn7uccnojdt4av7hgqar42 -did:plc:fiojm4rbr6fcw7ynomy3aj4v -did:plc:xnnrkxjvqbpsyxvhzoqmpzll -did:plc:5g3i26cyrmbgi33ibaum6bub -did:plc:prg46p4amxakyqnn4r3py7os -did:plc:4lydetq2xtcnkp7vf7r5ljwm -did:plc:4grbbdd2jwdzixec45dnhrk7 -did:plc:6xdvhnolfmkcq3xgc3xdlyj5 -did:plc:wzagpbo64yxs6jd457yjjaza -did:plc:f74u325iplyymliliyxb5gmx -did:plc:fvcux4vczj2dscudmcy2friv -did:plc:teezqbn5ge75uh666pm7ewur -did:plc:nx4erf2svcbpoz23b7hrqxme -did:plc:eyqfgbjcmyewkhcltszxcjmd -did:plc:oxlp7xwizudi6g7gg44fbrbt -did:plc:ztmxcv4hafjmwgnaknjjrnd2 -did:plc:kytd5nxtdz7bemgbr5ruglgy -did:plc:jognsblholp3ycx6vv7dmfio -did:plc:4dawkzyofwfregihptk4rjpx -did:plc:rympiwrsyzzjm3vnpc6tmwkt -did:plc:jwvr4x2kp5plg3k3ajqkbrvz -did:plc:j56t4ln4wujnhqykee2n76vk -did:plc:7d6negt2fyd3flqlaevdswug -did:plc:i3swkjbnoxt5vapqlj5nalji -did:plc:dof7t57mbpy5jsy3xtdkt2h5 -did:plc:afbdtihw6aa5sqog4pghttof -did:plc:croar7ine2qpypapjtmgil7v -did:plc:ejs2liy5riilry62ipuetdru -did:plc:2t22teutv43etouczpsnjgwg -did:plc:aleaxgbpyhhcebq37i3qg35z -did:plc:etf2mbrcwbkcgvd3lwzruafx -did:plc:ukd24cw6siyouu6xjuatoedt -did:plc:2dwd4zvjtr3fob2pv2pwuf3t -did:plc:p6payrifq522t27irgnqym7u -did:plc:cz73r7iyiqn26upot4jtjdhk -did:plc:5s4k4mu32ervzgxrxwsuv4jb -did:plc:7l6x6hksom6pzpupk7pa7mo5 -did:plc:biezn45ou2ydpsd5oquiumdb -did:plc:n5fns4562xfwolzpcqag4i5i -did:plc:tpcmoprsfxpqzwstsur6g4g7 -did:plc:2lgpw6jjg6da5hcrfptrpoy2 -did:plc:5dwii7o5fa7o477t5ln2ov3u -did:plc:jpf3elvaaeg2z5nfg3dexfrg -did:plc:5uaxbacxpctwxnufdtxxzx6l -did:plc:moqrpvw3s7l3eh7bjfmnkkwm -did:plc:bwb35joex3s3dd46ktgcowav -did:plc:7ws6iqntishk2vavlwywyr46 -did:plc:g47djjzf6pykppaanlwm66bl -did:plc:7zqvvd3s6lwhbogi3uz6bweu -did:plc:6cej4j6f35omzwtqp3mvjukb -did:plc:3c2ivqlnfkcrw2ldw2qjebm2 -did:plc:lajw76bv7ukjrvar2xkgidys -did:plc:tc6swwno7s7y4kr6dvzhuy33 -did:plc:362bnfss2ijxhjzryicwgk3y -did:plc:gw5n3ukwihiccpg242w5rkgx -did:plc:t56y6fc6ca4jevn2n3rzwlt4 -did:plc:hzrcgjgtqdsshgxbfw4clnir -did:plc:f7ha3m2wderfat35ke7x272r -did:plc:7rwhwn2y6omj35kzhjhjdw7g -did:plc:o6iovfnpyy257yeoqf4rxcl5 -did:plc:onwsd3x7qi524le45cvcor37 -did:plc:yx2bxetxdx66beds6cy5v7kx -did:plc:rve6wtocoaiaqc4bqrxjp7ii -did:plc:pdo3tadbrgt6ufwvloipr4r4 -did:plc:q55zkkyk27edrklnjwdobvbc -did:plc:cfxa4ofoterlvttni637ag5v -did:plc:bzrneq7hkfbyjmqztnnexujc -did:plc:3nohgc5uh4edbunfpvc4z2vm -did:plc:esrbts56piymenkfleufo3i2 -did:plc:bdhopuax47nv4qfup6pj7wyz -did:plc:cy7l4tyvfwm63hc5e3sardqf -did:plc:aidmyvxy7lln7l5fzkv4gvxa -did:plc:4v4jowdh2b24tsqos7evw6hm -did:plc:dw72eqelq4r4kb2i7hpr4ceh -did:plc:ceyk5xbeuf63ogi4fy5q5rgw -did:plc:zhq7crzov7yaigydptkvf55p -did:plc:w6g2rc4t6uwbfwemhhy2klzh -did:plc:tx3nw2vrn64inq23nepa2xi6 -did:plc:7r5cygwnvyw77jisti4lwl7t -did:plc:5jciflr4attgyuk7l6yhfefw -did:plc:6aikzgasri74fypm4h3qfvui -did:plc:gnfvccjjjpcbz6mr5e5q3jbc -did:plc:sfvpv6dfrug3rnjewn7gyx62 -did:plc:23sbysipwfpn7bimbt4mcigv -did:plc:esrif26lxrihnewhr7b65bgq -did:plc:b5txof75opxlqoexrfgj6k5a -did:plc:ouytv644apqbu2pm7fnp7qrj -did:plc:3c3xgzirjccyggzd6gr7mpmr -did:plc:xulb3tr74siej6yaeefj4s4y -did:plc:riagt5j2p5cga27naank7olh -did:plc:z72i7hdynmk6r22z27h6tvur -did:plc:6wpkkitfdkgthatfvspcfmjo -did:plc:76au54ar4q26di6egm3p7kcx -did:plc:rljcyrgrfsd4hvuk6iswtuc2 -did:plc:4k6qpysgsk2mcmyyfgmr23qx -did:plc:3h367xd76nbukfe6m6xwc6zb -did:plc:dwqqutqz3fn7gnxv4g66fcpk -did:plc:lr5262feqxiw4gi4rftvuddl -did:plc:p5g5fwx3ugiagfgg73ssukey -did:plc:7qm7q4vdvqz52jt6v454fqo7 -did:plc:qyz55qodgwbn5ngs7c74zg3o -did:plc:xmkbbntesefuqaabuub42ta5 -did:plc:inze6wrmsm7pjl7yta3oig77 -did:plc:3zhqmussvbvewmbuzkbj6o67 -did:plc:ndjkenxulxq7x4frlxwdoxiy -did:plc:dhpteolxxsscwg4syyw5o2tx -did:plc:qvbuyskxlilnob66asu4nb6s -did:plc:cu6rraddlwf623jelltjjvxd -did:plc:2f3nzlozgfmowit2prvnzph6 -did:plc:jdbsltwfprkv6s2lxt7v364o -did:plc:qvqtqeab27zjxz7gradh3qsj -did:plc:to6i6xcckh2zduwohzfmg67k -did:plc:52x5cp3ksdma5mkxfjdqips5 -did:plc:el5raru5jo6iorwl7moonowk -did:plc:wc5zgqxdjwg3fl4b4xtxonol -did:plc:nr4g4aomey36canpxwgot4l4 -did:plc:vq4dw7a6umjxneqwvkqljqbr -did:plc:x2ycpuquen6mcwenprgsxyhp -did:plc:zc7midmdbumro7v7l2byblzw -did:plc:44stihmu3bafrkygqem4wytv -did:plc:dt53cnypffvsrasbhr445ykq -did:plc:4ybwnxvblvytyrb5c6rafmee -did:plc:teerbdm5pvupb5wqo24qvesj -did:plc:63maici3w6b3v3yjtro74rsy -did:plc:mnypof6svvc76zzzhzmxpvpf -did:plc:gf7py2hcgwcucp2osrotnrgn -did:plc:uzowjicdd5d2jswqbc7wgcet -did:plc:ggvnd3v7mzs63ufcgsxaqooy -did:plc:wsmy3ovr2l4tgdrlrswulx35 -did:plc:3qxc66sszst3wr646l5qjdwv -did:plc:bfhb4fu4l6hpj4vig7ux23ys -did:plc:26ftjnohci3vtmte4xxmgapd -did:plc:f3uobop2lb4mtdi4wv4tslgi -did:plc:b6befe2eusj3ihndm2sxpyje -did:plc:7akfvwpu6bmwvsvj6vaxtctl -did:plc:ijnpkdfq5nb6o24vmwujt3q5 -did:plc:shp7dq36h7okd4nj3d3a3kvo -did:plc:t73qxoe7w4qnuyn7nvs4rytd -did:plc:yio2lurxvbivqmq7huw5ww3f -did:plc:y4qihlftgkxbjrvysmg2rqui -did:plc:bexdsaowsqgyxjfbkzl4xcjf -did:plc:hal225zzonojuhao3z6thsag -did:plc:47kqku6pcecljwiuxb7khim5 -did:plc:nqz6jvptzsne4n6wkxhiioh7 -did:plc:sorgcp4kasgq7ehda57gapmj -did:plc:xov3bahcq4r3x2sva2msbgso -did:plc:5bblgce46epzkwdfswp2vlum -did:plc:mo5abp3llnxxbjnzgibxci2l -did:plc:x27zsws6srzhqbsyts7pjwyb -did:plc:yh77zgqvaimbbdqzj5ohlltl -did:plc:fiet54x6zuiopmspq7shcqnh -did:plc:3sjkng4x63bilnpq6g6rxwth -did:plc:tlmwv2o7zpscfrtlllffcyyh -did:plc:dsy4rvg4ewyz3vikvsbl524m -did:plc:drgje24zfzb6cd45sfuycnqz -did:plc:n337ktyjowhlm3ciiuvn3wzr -did:plc:laazhsrbse7q7nii73f7k5qu -did:plc:pfng4rdr4ga45wf3wal4be3f -did:plc:mlcl5fqk7v5p3mkq44adm7qx -did:plc:uwlp5dc2f37yo2ipu2llhbbc -did:plc:5hjiu2rqyrm5ehwughjufb73 -did:plc:rll7idj2gihg426f5ftlepn6 -did:plc:4o5mhekdo2qxtmlgpup6fq2d -did:plc:pvrtdpjrnk67z7mehywacmze -did:plc:kaimy2gdabsh3w7eyina34fk -did:plc:xzcqimxwvmqnboohfe2rdvxg -did:plc:445avk3am7zpwlrj7aop746e -did:plc:ipoxgvqy4ptt5imqmc5oheqm -did:plc:hexug75oiqbghmohfktbshqe -did:plc:lplht77jm4sllykh7ye4mezm -did:plc:lxcl6nvgarx6trcworxtadrj -did:plc:ct7rnzewe2ngaathmmsud3uf -did:plc:mpcyt6cgm75rfl3jgrdod6x7 -did:plc:dagmyvq7xcphhbnw3aph4rl5 -did:plc:usq4pa5wlv5kvoqght3uy4id -did:plc:ow52dlw3buqmbjgdqjcfbzvp -did:plc:62gajyebxf7soszciwuloo73 -did:plc:wtfep3izymr6ot4tywoqcydc -did:plc:tncrjx2tlfyyh3zf2xzwuio4 -did:plc:pypoumh5amfwkm267spgn64c -did:plc:hcxvm3cm7smahi4vp7usqxdv -did:plc:vlxfv5w4nago24c2fi2envrq -did:plc:syrbaogvw7o42kuv3doca37r -did:plc:syptkgsfjqds3fttdap7pcdu -did:plc:vpyebtvjqdc7ryv5dliivv5i -did:plc:idllr3o35pclnbtm7vrat7s4 -did:plc:zc2czn5tap3jb6nyq5mtbwyw -did:plc:vkuhlwi2yambiksthe76hy6i -did:plc:bzcyvwg5cz7fvf7zfzoznyba -did:plc:fv5fegfwujmf3gq5umdacqje -did:plc:uy52lsbj4bsung4fvmyp2eyr -did:plc:j64ds43gqjamp7jk752plhcr -did:plc:2hs42dmzb57npxv7lj24f2tw -did:plc:xbw7aqswtki223x36v3ew37r -did:plc:5hfimnfh5gp3ghlowpewxzsh diff --git a/rake/bluesky.rake b/rake/bluesky.rake index cbadde11..a90e465e 100644 --- a/rake/bluesky.rake +++ b/rake/bluesky.rake @@ -15,14 +15,22 @@ module BlueskyRakeHelpers DIDKit::Resolver.new.resolve_did(did).get_validated_handle end - sig { returns(T.nilable(Domain::User::BlueskyUser)) } - def self.user_from_env - if (handle = ENV["handle"]) - did = self.resolve_did(handle) - Domain::User::BlueskyUser.find_or_create_by!(did:) do |user| - user.handle = handle - end - elsif (did = ENV["did"]) + sig do + params(handle: T.nilable(String), did: T.nilable(String)).returns( + T.nilable(Domain::User::BlueskyUser), + ) + end + def self.user_from_env(handle: nil, did: nil) + if handle + Domain::User::BlueskyUser.find_by(handle:) || + begin + did = self.resolve_did(handle) + return nil if did.blank? + Domain::User::BlueskyUser.find_or_create_by!(did:) do |user| + user.handle = handle + end + end + elsif did Domain::User::BlueskyUser.find_or_create_by!(did:) do |user| user.handle = resolve_handle(did) end @@ -42,17 +50,65 @@ namespace :bluesky do # Remove # if provided hashtag = hashtag.gsub(/^#/, "") - Domain::Bluesky::MonitoredObject.create!(value: hashtag, kind: :hashtag) + Domain::Bluesky::MonitoredObject.build_for_hashtag(hashtag).save! puts "Added hashtag: ##{hashtag}" - elsif (user = BlueskyRakeHelpers.user_from_env) + elsif ENV["handle"] || ENV["did"] + user = + BlueskyRakeHelpers.user_from_env(handle: ENV["handle"], did: ENV["did"]) + if user.nil? + puts "user not found" + next + end Domain::Bluesky::Job::ScanUserJob.perform_later(user:) Domain::Bluesky::Job::ScanPostsJob.perform_later(user:) - Domain::Bluesky::MonitoredObject.create!(value: user.did, kind: :user_did) + Domain::Bluesky::MonitoredObject.build_for_user(user).save! else raise "hashtag, handle, or did is required" end end + desc "Add DID or user handle, bulk from stdin" + task add_bulk: :environment do + added = 0 + file = (ENV["file"] ? File.open(T.must(ENV["file"]), "r") : STDIN) + + while line = file.gets + begin + line = line.strip.chomp + next if line.blank? + user = + if line.starts_with?("did:") + BlueskyRakeHelpers.user_from_env(did: line) + else + BlueskyRakeHelpers.user_from_env(handle: line) + end + if user + unless user.scanned_profile_at.present? + Domain::Bluesky::Job::ScanUserJob.perform_later(user:) + puts "enqueued profile scan: #{user.did} / #{user.handle}" + end + unless user.scanned_posts_at.present? + Domain::Bluesky::Job::ScanPostsJob.perform_later(user:) + puts "enqueued posts scan: #{user.did} / #{user.handle}" + end + + obj = Domain::Bluesky::MonitoredObject.build_for_user(user) + if obj.save + puts "added #{user.did} / #{user.handle} to monitor" + added += 1 + end + else + puts "user not found: #{line}" + end + rescue StandardError => e + puts "error: #{e.message}" + puts "line: #{line}" + raise e + end + end + puts "added #{added} users to monitor" + end + desc "Remove a DID or hashtag from the Bluesky monitor" task remove: :environment do if (hashtag = ENV["hashtag"]) @@ -88,20 +144,30 @@ namespace :bluesky do desc "Watch users that user follows" task watch_follows: :environment do user = - BlueskyRakeHelpers.user_from_env || - raise("user is required, use `handle` or `did`") + BlueskyRakeHelpers.user_from_env( + handle: ENV["handle"], + did: ENV["did"], + ) || raise("user is required, use `handle` or `did`") Domain::Bluesky::Job::ScanUserFollowsJob.perform_now(user:) user.reload user.user_user_follows_from.each do |follow| to_user = T.cast(follow.to, Domain::User::BlueskyUser) - model = - Domain::Bluesky::MonitoredObject.create( - value: to_user.did!, - kind: :user_did, - ) - if model.persisted? - puts "added #{to_user.did} / #{to_user.handle} to monitor" - end + model = Domain::Bluesky::MonitoredObject.build_for_user(to_user) + puts "added #{to_user.did} / #{to_user.handle} to monitor" if model.save end end + + desc "Extract bluesky post rkeys / user dids from E621 sources" + task extract_e621_bluesky_posts_and_users: :environment do + sources = Set.new + Domain::Post::E621Post + .where("sources_array::text LIKE '%https://bsky.app%'") + .find_each(batch_size: 32) do |post| + post.sources_array.each do |source| + if source.include?("https://bsky.app") && sources.add?(source) + puts source + end + end + end + end end