update scpt
This commit is contained in:
parent
c61fd5c748
commit
b5b3850f7b
60
scpt/at.zsh
Executable file
60
scpt/at.zsh
Executable file
@ -0,0 +1,60 @@
|
|||||||
|
#!/bin/zsh
|
||||||
|
|
||||||
|
d=${0:a:h}
|
||||||
|
|
||||||
|
source $d/src/tag.zsh
|
||||||
|
source $d/src/func.zsh
|
||||||
|
|
||||||
|
at-env
|
||||||
|
case $1 in
|
||||||
|
version|v)
|
||||||
|
at-version
|
||||||
|
;;
|
||||||
|
uri|u)
|
||||||
|
at-uri $2
|
||||||
|
;;
|
||||||
|
did|d)
|
||||||
|
at-did $2
|
||||||
|
;;
|
||||||
|
collection|c)
|
||||||
|
at-collection $2 $3
|
||||||
|
;;
|
||||||
|
at-docs|docs)
|
||||||
|
at-docs
|
||||||
|
;;
|
||||||
|
cid)
|
||||||
|
at-cid $2 $3
|
||||||
|
;;
|
||||||
|
login|l)
|
||||||
|
at-login $2 $3
|
||||||
|
;;
|
||||||
|
refresh|r)
|
||||||
|
at-refresh
|
||||||
|
;;
|
||||||
|
session|s)
|
||||||
|
at-session
|
||||||
|
;;
|
||||||
|
profile|pro)
|
||||||
|
at-profile
|
||||||
|
;;
|
||||||
|
download-character-icon)
|
||||||
|
source $d/ai/syui/game/character.zsh
|
||||||
|
download_character_icon
|
||||||
|
;;
|
||||||
|
create-game-character)
|
||||||
|
source $d/ai/syui/game/character.zsh
|
||||||
|
create_game_character
|
||||||
|
;;
|
||||||
|
ai-create-user)
|
||||||
|
source $d/ai/syui/game/character.zsh
|
||||||
|
ai_create_user
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
echo "${help[@]}"
|
||||||
|
echo "${host[@]}"
|
||||||
|
echo "${lexicon[@]}"
|
||||||
|
echo "${github[@]}"
|
||||||
|
echo "${tag[@]}"
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
at-unset
|
302
scpt/src/ai/syui/game/character.zsh
Executable file
302
scpt/src/ai/syui/game/character.zsh
Executable file
@ -0,0 +1,302 @@
|
|||||||
|
character=(
|
||||||
|
ai
|
||||||
|
manny
|
||||||
|
quinn
|
||||||
|
chinese
|
||||||
|
kirin
|
||||||
|
leviathan
|
||||||
|
phoenix
|
||||||
|
wyvern
|
||||||
|
cerberus
|
||||||
|
dragon
|
||||||
|
kitsune
|
||||||
|
pegasus
|
||||||
|
)
|
||||||
|
|
||||||
|
img=(
|
||||||
|
bafkreie34pjuc6coenzcdwrgrh4fbacq7bkhsz263g5vpbsqxwaz37kkwy
|
||||||
|
bafkreie34pjuc6coenzcdwrgrh4fbacq7bkhsz263g5vpbsqxwaz37kkwy
|
||||||
|
bafkreie34pjuc6coenzcdwrgrh4fbacq7bkhsz263g5vpbsqxwaz37kkwy
|
||||||
|
bafkreidlealfybajqzwv5eoz4jshnsijc2vnktlhpw4ph47krwj6aigqby
|
||||||
|
bafkreiegpqedlrfa4ljhssdnkrr5hyd5huy2xhh2zszj5wq2wuuzejggmq
|
||||||
|
bafkreig6vszkx3c4dcortjwfsz6sa6zwqgj7zpxj4lxfrrkwql4xhiu5ou
|
||||||
|
bafkreich7fsumke2yvumvixkruonzrcevk3f6g2cntzfwdn4n2c2vox5dm
|
||||||
|
bafkreiacjvagsekhiiljz3j237b6klrt6pkptxljt7kltprgg5276gv25q
|
||||||
|
bafkreihpni4lp55jysalcntulzal5rbhidtbseanlucpyucagzxmv6xj24
|
||||||
|
bafkreia3huw2gdenqatoobx3hcft74chced46bw4znfgepo5aenegobkri
|
||||||
|
bafkreidy74aieb6ie646xhosginox5zbnbnrtd76cnt4pbn73hrxgfnple
|
||||||
|
bafkreifnbfj27fr6nv7qeqqmwdibf7qrw4lauvzoknw5hexbifmwqt6kmq
|
||||||
|
)
|
||||||
|
|
||||||
|
function download_character_icon(){
|
||||||
|
|
||||||
|
t=(
|
||||||
|
"https://sketchfab.com/3d-models/super-9a80a6d6cf6f4b08906505c7f945d3ce"
|
||||||
|
)
|
||||||
|
|
||||||
|
t=(
|
||||||
|
"https://sketchfab.com/3d-models/cerberus-quirky-series-4379b571b5a440119d1ebaddb0711142"
|
||||||
|
"https://sketchfab.com/3d-models/chinese-dragon-quirky-series-a383d3cf5b004978ac620806558b2924"
|
||||||
|
"https://sketchfab.com/3d-models/dragon-quirky-series-9a0989aae9b84ebdade28e84a0702a71"
|
||||||
|
"https://sketchfab.com/3d-models/kirin-quirky-series-b280c8bc5b87471eac1068acc91fdce1"
|
||||||
|
"https://sketchfab.com/3d-models/kitsune-quirky-series-4fc8b2ade43f4d4bb8a8e6e227f00a62"
|
||||||
|
"https://sketchfab.com/3d-models/leviathan-quirky-series-002200e1db2c461fbcaa8d2fdac2d766"
|
||||||
|
"https://sketchfab.com/3d-models/pegasus-quirky-series-a4488ae7a2d2405c927a50f5a8b2d6bb"
|
||||||
|
"https://sketchfab.com/3d-models/phoenix-quirky-series-1f0a01247b78441ab5b9cf8e9711e78e"
|
||||||
|
"https://sketchfab.com/3d-models/wyvern-quirky-series-7baad217325a45b4877514b3f5924be9"
|
||||||
|
)
|
||||||
|
|
||||||
|
for i in $t; do
|
||||||
|
name=`echo $i|cut -d / -f 5|cut -d - -f 1`
|
||||||
|
tt=`curl -sL $i|tr ' ' '\n' |grep .jpeg|cut -d '"' -f 2`
|
||||||
|
normal=`echo $tt|awk "NR==1"`
|
||||||
|
min=`echo $tt|awk "NR==2"`
|
||||||
|
if [ ! -f $name.jpeg ];then
|
||||||
|
curl -sL $normal -o $name.jpeg
|
||||||
|
fi
|
||||||
|
if [ ! -f ${name}-min.jpeg ];then
|
||||||
|
#curl -sL $min -o ${name}-min.jpeg
|
||||||
|
fi
|
||||||
|
array+=(`echo $tt|sed "1,2d"|cut -d ";" -f 2|cut -d '&' -f 1|tr '\n' ' '`)
|
||||||
|
echo $name
|
||||||
|
for ((i=1; i<=$#array; i++)); do
|
||||||
|
echo "Index: $i, Value: ${array[$i]}"
|
||||||
|
#curl -sL ${array[$i]} -o ${name}-${i}.jpeg
|
||||||
|
done
|
||||||
|
done
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
case $OSTYPE in
|
||||||
|
darwin*)
|
||||||
|
day=`gdate --iso-8601=seconds`
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
day=`date --iso-8601=seconds`
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
|
||||||
|
function create_game_character() {
|
||||||
|
t=(
|
||||||
|
ai
|
||||||
|
chinese
|
||||||
|
kirin
|
||||||
|
leviathan
|
||||||
|
phoenix
|
||||||
|
wyvern
|
||||||
|
cerberus
|
||||||
|
dragon
|
||||||
|
kitsune
|
||||||
|
pegasus
|
||||||
|
)
|
||||||
|
|
||||||
|
for ((i=1; i<=$#t; i++)); do
|
||||||
|
created=2020-01-01T00:00:00+09:00
|
||||||
|
col=ai.syui.game.character
|
||||||
|
req=com.atproto.repo.getRecord
|
||||||
|
url=https://$host/xrpc/$req
|
||||||
|
|
||||||
|
id=$i
|
||||||
|
name=${t[$i]}
|
||||||
|
chara=$name
|
||||||
|
rkey=$chara
|
||||||
|
repo=$did_yui
|
||||||
|
json="{\"collection\":\"$col\", \"rkey\":\"$rkey\", \"repo\":\"$repo\"}"
|
||||||
|
if [ $((RANDOM % 2)) -eq 0 ];then
|
||||||
|
gender=male
|
||||||
|
else
|
||||||
|
gender=female
|
||||||
|
fi
|
||||||
|
|
||||||
|
case $name in
|
||||||
|
ai)
|
||||||
|
gender=none
|
||||||
|
group=origin
|
||||||
|
season=0
|
||||||
|
;;
|
||||||
|
chinese|dragon|cerberus|pegasus|leviathan)
|
||||||
|
gender=male
|
||||||
|
group=fantasy
|
||||||
|
season=1
|
||||||
|
;;
|
||||||
|
kitsune|phoenix|kirin|wyvern)
|
||||||
|
gender=female
|
||||||
|
group=fantasy
|
||||||
|
season=1
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
continue ;;
|
||||||
|
esac
|
||||||
|
|
||||||
|
jj=`curl -sL "$url?repo=$repo&collection=$col&rkey=$rkey"`
|
||||||
|
|
||||||
|
link=`echo $jj|jq -r '.value.embed.external.thumb.ref.[]'`
|
||||||
|
size=`echo $jj|jq -r .value.embed.external.thumb.size`
|
||||||
|
mtype=`echo $jj|jq -r .value.embed.external.thumb.mimeType`
|
||||||
|
echo $name
|
||||||
|
echo $gender
|
||||||
|
echo https://cdn.bsky.app/img/feed_thumbnail/plain/$did_yui/$link
|
||||||
|
|
||||||
|
## upload img
|
||||||
|
#if [ -f ./${name}.jpeg ];then
|
||||||
|
# jj=`ai img-upload ./${name}.jpeg`
|
||||||
|
#elif [ -f ./${name}.png ];then
|
||||||
|
# jj=`ai img-upload ./${name}.png`
|
||||||
|
#fi
|
||||||
|
#link=`echo $jj|jq -r ".blob.ref.[]"`
|
||||||
|
#size=`echo $jj|jq -r .blob.size`
|
||||||
|
#mtype=`echo $jj|jq -r .blob.mimeType`
|
||||||
|
|
||||||
|
req=com.atproto.repo.putRecord
|
||||||
|
url=https://$host/xrpc/$req
|
||||||
|
|
||||||
|
nickname=$name
|
||||||
|
fullname=$name
|
||||||
|
uri=at://${did_yui}/$col/$chara
|
||||||
|
|
||||||
|
|
||||||
|
json="{
|
||||||
|
\"repo\": \"$handle_yui\",
|
||||||
|
\"did\": \"$did_yui\",
|
||||||
|
\"collection\": \"$col\",
|
||||||
|
\"rkey\": \"$chara\",
|
||||||
|
\"record\": {
|
||||||
|
\"id\": $id,
|
||||||
|
\"name\": \"$name\",
|
||||||
|
\"fullname\": \"$fullname\",
|
||||||
|
\"nickname\": \"$nickname\",
|
||||||
|
\"gender\": \"$gender\",
|
||||||
|
\"season\": $season,
|
||||||
|
\"group\": \"$group\",
|
||||||
|
\"embed\": {
|
||||||
|
\"\$type\": \"app.bsky.embed.external\",
|
||||||
|
\"external\": {
|
||||||
|
\"uri\": \"$uri\",
|
||||||
|
\"thumb\": {
|
||||||
|
\"\$type\": \"blob\",
|
||||||
|
\"ref\": {
|
||||||
|
\"\$link\": \"$link\"
|
||||||
|
},
|
||||||
|
\"mimeType\": \"$mtype\",
|
||||||
|
\"size\": $size
|
||||||
|
} } }, \"createdAt\": \"$created\", \"updatedAt\": \"$day\" } }"
|
||||||
|
|
||||||
|
if echo $json|jq . ;then
|
||||||
|
curl -sL -X POST -H "Content-Type: application/json" -H "Authorization: Bearer $token_yui" -d $json $url
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
function ai_create_user() {
|
||||||
|
|
||||||
|
col=ai.syui.game.user
|
||||||
|
rkey=ai
|
||||||
|
did=$did_yui
|
||||||
|
handle=$handle_yui
|
||||||
|
#rkey=syui
|
||||||
|
#img=https://cdn.bsky.app/img/feed_thumbnail/plain/did:plc:4hqjfn7m6n5hno3doamuhgef/bafkreie34pjuc6coenzcdwrgrh4fbacq7bkhsz263g5vpbsqxwaz37kkwy@jpeg
|
||||||
|
req=com.atproto.repo.putRecord
|
||||||
|
url=https://$host/xrpc/$req
|
||||||
|
|
||||||
|
for ((i=1; i<=${#character}; i++)); do
|
||||||
|
|
||||||
|
cname=${character[$i]}
|
||||||
|
cid=${img[$i]}
|
||||||
|
imguri=https://cdn.bsky.app/img/feed_thumbnail/plain/$did_yui/${cid}@jpeg
|
||||||
|
echo $imguri
|
||||||
|
echo $i $character $cname
|
||||||
|
season=1
|
||||||
|
group=test
|
||||||
|
lv=1
|
||||||
|
hp=100
|
||||||
|
exp=0
|
||||||
|
rank=0
|
||||||
|
mode=0
|
||||||
|
attack=0
|
||||||
|
attack_post=0
|
||||||
|
critical=0
|
||||||
|
critical_d=0
|
||||||
|
|
||||||
|
case $cname in
|
||||||
|
ai)
|
||||||
|
group=origin
|
||||||
|
season=0
|
||||||
|
mode=2
|
||||||
|
;;
|
||||||
|
manny|quinn)
|
||||||
|
group=test
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
group=fantasy
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
|
||||||
|
jc="\"$cname\": { \"group\": \"$group\", \"season\": $season, \"img\": \"$imguri\", \"lv\": $lv, \"exp\": $exp, \"hp\": $hp, \"rank\": $rank, \"mode\": $mode, \"attack\": $attack, \"attack_post\": $attack_post, \"critical\": $critical, \"critical_d\": $critical_d }"
|
||||||
|
|
||||||
|
if [ $#character -ne $i ];then
|
||||||
|
jc=${jc},
|
||||||
|
fi
|
||||||
|
|
||||||
|
json=${json}${jc}
|
||||||
|
|
||||||
|
done
|
||||||
|
json="
|
||||||
|
{
|
||||||
|
\"repo\": \"$handle_yui\",
|
||||||
|
\"did\": \"$did_yui\",
|
||||||
|
\"collection\": \"$col\",
|
||||||
|
\"rkey\": \"$rkey\",
|
||||||
|
\"record\": {
|
||||||
|
\"did\": \"$did\",
|
||||||
|
\"limit\": false,
|
||||||
|
\"login\": false,
|
||||||
|
\"handle\": \"$handle\",
|
||||||
|
\"aiten\": 10,
|
||||||
|
\"gender\": \"famale\",
|
||||||
|
\"character\": {
|
||||||
|
$json
|
||||||
|
},
|
||||||
|
\"createdAt\": \"${created}\",
|
||||||
|
\"updatedAt\": \"${created}\"
|
||||||
|
}
|
||||||
|
}"
|
||||||
|
|
||||||
|
|
||||||
|
if echo $json|jq . ;then
|
||||||
|
echo $token_yui
|
||||||
|
echo y
|
||||||
|
read y
|
||||||
|
if [ "y" = "$y" ];then
|
||||||
|
curl -sL -X POST -H "Content-Type: application/json" -H "Authorization: Bearer $token_yui" -d $json $url
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
col=ai.syui.game
|
||||||
|
rkey=self
|
||||||
|
at_uri=at://$did_yui/ai.syui.game.user/ai
|
||||||
|
|
||||||
|
json="
|
||||||
|
{
|
||||||
|
\"repo\": \"$handle_yui\",
|
||||||
|
\"did\": \"$did_yui\",
|
||||||
|
\"collection\": \"$col\",
|
||||||
|
\"rkey\": \"$rkey\",
|
||||||
|
\"record\": {
|
||||||
|
\"account\": \"$at_uri\",
|
||||||
|
\"username\": \"ai\",
|
||||||
|
\"createdAt\": \"$created\"
|
||||||
|
}
|
||||||
|
}"
|
||||||
|
|
||||||
|
if echo $json|jq . ;then
|
||||||
|
echo y
|
||||||
|
read y
|
||||||
|
if [ "y" = "$y" ];then
|
||||||
|
curl -sL -X POST -H "Content-Type: application/json" -H "Authorization: Bearer $token_yui" -d $json $url
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
|
94
at.zsh → scpt/src/func.zsh
Executable file → Normal file
94
at.zsh → scpt/src/func.zsh
Executable file → Normal file
@ -1,50 +1,14 @@
|
|||||||
#!/bin/zsh
|
|
||||||
|
|
||||||
help=(
|
|
||||||
at.zsh v
|
|
||||||
at.zsh d handle
|
|
||||||
at.zsh u at-uri
|
|
||||||
at.zsh c at-uri -r
|
|
||||||
at.zsh docs
|
|
||||||
at.zsh l handle password
|
|
||||||
at.zsh r
|
|
||||||
at.zsh s
|
|
||||||
at.zsh cid handle cid
|
|
||||||
at.zsh pro
|
|
||||||
at.zsh col ai.syui.game.user self
|
|
||||||
)
|
|
||||||
host=(
|
|
||||||
bsky.social
|
|
||||||
public.api.bsky.app
|
|
||||||
plc.directory
|
|
||||||
)
|
|
||||||
lexicon=(
|
|
||||||
# https://github.com/bluesky-social/atproto/tree/main/lexicons
|
|
||||||
com.atproto.repo.describeRepo
|
|
||||||
com.atproto.repo.getRecord
|
|
||||||
com.atproto.repo.listRecords
|
|
||||||
com.atproto.identity.resolveHandle
|
|
||||||
com.atproto.server.createSession
|
|
||||||
com.atproto.server.refreshSession
|
|
||||||
com.atproto.server.getSession
|
|
||||||
com.atproto.sync.getBlob
|
|
||||||
app.bsky.actor.getProfile
|
|
||||||
)
|
|
||||||
github=(
|
|
||||||
https://github.com/bluesky-social/atproto
|
|
||||||
https://github.com/bluesky-social/social-app
|
|
||||||
https://github.com/bluesky-social/feed-generator
|
|
||||||
https://github.com/bluesky-social/jetstream
|
|
||||||
https://github.com/bluesky-social/indigo
|
|
||||||
https://github.com/did-method-plc/did-method-plc
|
|
||||||
)
|
|
||||||
tag=( at bsky bsync pds bgs plc ozone feed jetstream social-app oauth )
|
|
||||||
|
|
||||||
function at-env() {
|
function at-env() {
|
||||||
host=bsky.social
|
host=bsky.social
|
||||||
at_uri=at://did:plc:4hqjfn7m6n5hno3doamuhgef/ai.syui.game.user/syui
|
handle_syui=syui.ai
|
||||||
|
handle_yui=yui.syui.ai
|
||||||
|
did_yui=did:plc:4hqjfn7m6n5hno3doamuhgef
|
||||||
|
did_syui=did:plc:uqzpqmrjnptsxezjx4xuh2mn
|
||||||
|
handle=$handle_yui
|
||||||
|
did=$did_yui
|
||||||
|
created=2020-01-01T00:00:00+09:00
|
||||||
|
at_uri=at://$did_yui/ai.syui.game.user/syui
|
||||||
docs_uri=https://docs.bsky.app/docs/api
|
docs_uri=https://docs.bsky.app/docs/api
|
||||||
handle=yui.syui.ai
|
|
||||||
did=`echo $at_uri|cut -d / -f 3`
|
did=`echo $at_uri|cut -d / -f 3`
|
||||||
collection=`echo $at_uri|cut -d / -f 4`
|
collection=`echo $at_uri|cut -d / -f 4`
|
||||||
rkey=`echo $at_uri|cut -d / -f 5`
|
rkey=`echo $at_uri|cut -d / -f 5`
|
||||||
@ -170,45 +134,3 @@ function at-profile() {
|
|||||||
url="https://${host}${req}?actor=$did"
|
url="https://${host}${req}?actor=$did"
|
||||||
curl -sL -X GET -H "Content-Type: application/json" -H "Authorization: Bearer $token" $url|jq .
|
curl -sL -X GET -H "Content-Type: application/json" -H "Authorization: Bearer $token" $url|jq .
|
||||||
}
|
}
|
||||||
|
|
||||||
at-env
|
|
||||||
case $1 in
|
|
||||||
version|v)
|
|
||||||
at-version
|
|
||||||
;;
|
|
||||||
uri|u)
|
|
||||||
at-uri $2
|
|
||||||
;;
|
|
||||||
did|d)
|
|
||||||
at-did $2
|
|
||||||
;;
|
|
||||||
collection|c)
|
|
||||||
at-collection $2 $3
|
|
||||||
;;
|
|
||||||
at-docs|docs)
|
|
||||||
at-docs
|
|
||||||
;;
|
|
||||||
cid)
|
|
||||||
at-cid $2 $3
|
|
||||||
;;
|
|
||||||
login|l)
|
|
||||||
at-login $2 $3
|
|
||||||
;;
|
|
||||||
refresh|r)
|
|
||||||
at-refresh
|
|
||||||
;;
|
|
||||||
session|s)
|
|
||||||
at-session
|
|
||||||
;;
|
|
||||||
profile|pro)
|
|
||||||
at-profile
|
|
||||||
;;
|
|
||||||
*)
|
|
||||||
echo "${help[@]}"
|
|
||||||
echo "${host[@]}"
|
|
||||||
echo "${lexicon[@]}"
|
|
||||||
echo "${github[@]}"
|
|
||||||
echo "${tag[@]}"
|
|
||||||
;;
|
|
||||||
esac
|
|
||||||
at-unset
|
|
39
scpt/src/tag.zsh
Normal file
39
scpt/src/tag.zsh
Normal file
@ -0,0 +1,39 @@
|
|||||||
|
help=(
|
||||||
|
at.zsh v
|
||||||
|
at.zsh d handle
|
||||||
|
at.zsh u at-uri
|
||||||
|
at.zsh c at-uri -r
|
||||||
|
at.zsh docs
|
||||||
|
at.zsh l handle password
|
||||||
|
at.zsh r
|
||||||
|
at.zsh s
|
||||||
|
at.zsh cid handle cid
|
||||||
|
at.zsh pro
|
||||||
|
at.zsh col ai.syui.game.user self
|
||||||
|
)
|
||||||
|
host=(
|
||||||
|
bsky.social
|
||||||
|
public.api.bsky.app
|
||||||
|
plc.directory
|
||||||
|
)
|
||||||
|
lexicon=(
|
||||||
|
# https://github.com/bluesky-social/atproto/tree/main/lexicons
|
||||||
|
com.atproto.repo.describeRepo
|
||||||
|
com.atproto.repo.getRecord
|
||||||
|
com.atproto.repo.listRecords
|
||||||
|
com.atproto.identity.resolveHandle
|
||||||
|
com.atproto.server.createSession
|
||||||
|
com.atproto.server.refreshSession
|
||||||
|
com.atproto.server.getSession
|
||||||
|
com.atproto.sync.getBlob
|
||||||
|
app.bsky.actor.getProfile
|
||||||
|
)
|
||||||
|
github=(
|
||||||
|
https://github.com/bluesky-social/atproto
|
||||||
|
https://github.com/bluesky-social/social-app
|
||||||
|
https://github.com/bluesky-social/feed-generator
|
||||||
|
https://github.com/bluesky-social/jetstream
|
||||||
|
https://github.com/bluesky-social/indigo
|
||||||
|
https://github.com/did-method-plc/did-method-plc
|
||||||
|
)
|
||||||
|
tag=( at bsky bsync pds bgs plc ozone feed jetstream social-app oauth )
|
Loading…
x
Reference in New Issue
Block a user