2024-04-23 13:21:26 +00:00
|
|
|
+++
|
|
|
|
date = "2023-03-08"
|
|
|
|
tags = ["bluesky","atproto"]
|
|
|
|
title = "blueskyでhandle.updateしてみた"
|
|
|
|
slug = "bluesky"
|
|
|
|
+++
|
|
|
|
|
|
|
|
bluesky(bsky.social)では現在、handle.updateが追加されていて、いわゆるcustom-domain(custom-handle)のようなことができるようになっています。これを`handle.update`と呼びます。
|
|
|
|
|
2024-12-21 06:52:52 +00:00
|
|
|
具体的には、`syui.bsky.social -> syui.ai`などにhandleを変更することができます。
|
2024-04-23 13:21:26 +00:00
|
|
|
|
|
|
|
で、実際にこのhandle.updateをやってみた感想を書きます。
|
|
|
|
|
|
|
|
web, cliの両方に簡単に機能を追加しましたので、誰でもできると思います。
|
|
|
|
|
|
|
|
### web
|
|
|
|
|
2024-12-21 06:52:52 +00:00
|
|
|
[bsky.syui.ai](https://bsky.syui.ai/login) -> login -> profile -> handle.update
|
2024-04-23 13:21:26 +00:00
|
|
|
|
|
|
|
note: re-login
|
|
|
|
|
|
|
|
### cli
|
|
|
|
|
|
|
|
```sh
|
|
|
|
$ sudo pacman -S rust --noconfirm
|
|
|
|
$ git clone https://github.com/syui/atr
|
|
|
|
$ cd !$:t
|
|
|
|
$ cargo build
|
|
|
|
```
|
|
|
|
|
|
|
|
```toml:~/.config/atr/config.toml
|
|
|
|
host = "bsky.social"
|
|
|
|
pass = "password"
|
|
|
|
user = "syui.bsky.social"
|
|
|
|
```
|
|
|
|
|
|
|
|
```sh
|
|
|
|
$ ./target/debug/atr h xxx.bsky.social
|
|
|
|
$ ./target/debug/atr h example.com
|
|
|
|
# note: change config.toml
|
|
|
|
# user = "example.com"
|
|
|
|
|
|
|
|
$ ./target/debug/atr a
|
|
|
|
$ ./target/debug/atr profile
|
|
|
|
```
|
|
|
|
|
|
|
|
### shell
|
|
|
|
|
|
|
|
shellでも書いてみました。大体はこんな感じです。
|
|
|
|
|
|
|
|
```sh
|
|
|
|
#!/bin/zsh
|
|
|
|
|
|
|
|
# session.create
|
|
|
|
user=syui.bsky.social
|
|
|
|
pass=xxx
|
|
|
|
url=https://bsky.social/xrpc/com.atproto.session.create
|
|
|
|
curl -sL -X POST -H "Content-Type: application/json" -d "{\"handle\":\"$user\",\"password\":\"$pass\"}" $url >! token.json
|
|
|
|
cat token.json|jq .
|
|
|
|
|
|
|
|
# get : did, accessJwt
|
|
|
|
did=`cat token.json|jq -r .did`
|
|
|
|
token=`cat token.json|jq -r .accessJwt`
|
|
|
|
|
|
|
|
# handle.update
|
|
|
|
url=https://bsky.social/xrpc/com.atproto.handle.update
|
2024-12-21 06:52:52 +00:00
|
|
|
json="{\"handle\":\"syui.ai\"}"
|
2024-04-23 13:21:26 +00:00
|
|
|
curl -sL -X POST -H "Content-Type: application/json" -H "Authorization: Bearer $token" -d "$json" $url
|
|
|
|
```
|
|
|
|
|
|
|
|
### handle.update
|
|
|
|
|
|
|
|
なぜatではhandle.customと言わず、handle.updateという単語が採用されているのでしょう。
|
|
|
|
|
|
|
|
atでは、handleを削除した場合、そのhandleは空き状態になります。
|
|
|
|
|
|
|
|
つまり、誰でも取得できるようになります。
|
|
|
|
|
|
|
|
これはatの設計思想だと思われます。
|
|
|
|
|
|
|
|
handleを凍結するか、空きにするかで設計思想が異なります。それぞれにメリット、デメリットがあります。
|
|
|
|
|
|
|
|
atはhandleの空きを積極的に作ることで、ユーザーがお気に入りのhandleを取得しやすくなっています。
|
|
|
|
|
|
|
|
これは、handle.updateの処理にも影響します。
|
|
|
|
|
|
|
|
handle.updateとは、handleの完全な移行を意味します。
|
|
|
|
|
|
|
|
具体的には、以前のhandleは削除され、空き状態になり、誰でも取得できるようになります。
|
|
|
|
|
|
|
|
これについては、matrixでwhy氏に教えてもらいました。
|
|
|
|
|
|
|
|
ですから、handle.customではなくhandle.updateという単語が採用されているのだと思います。
|
|
|
|
|
|
|
|
しかし、一般的にはhandle.customのほうがわかりやすいので、私もそのように表記することがあります。
|
|
|
|
|
|
|
|
ですが、実態は、handleの完全な移行であり、以前のhandleは削除されるという認識です。
|
|
|
|
|
|
|
|
handle.update後のerror時の処理ですが、`handle = email`でre-loginすると解消されます。
|
|
|
|
|
|
|
|
### handle.save
|
|
|
|
|
|
|
|
これは、atの設計思想からあまりおすすめできるものではありませんが、`bsky.social`のhandleを確保しておきたい場合、以下のような処理を行いましょう。
|
|
|
|
|
|
|
|
1. handle.updateする
|
|
|
|
|
|
|
|
2. 以前のhandleでaccountをcreateする
|
|
|
|
|
|
|
|
![](https://raw.githubusercontent.com/syui/img/master/other/bluesky_20230307_0001.jpg)
|
|
|
|
|
|
|
|
```sh
|
|
|
|
# restore
|
|
|
|
# account delete : syui.bsky.social
|
|
|
|
$ atr h syui.bsky.social
|
|
|
|
# note: invite code x2
|
|
|
|
```
|
|
|
|
|
|
|
|
### did
|
|
|
|
|
|
|
|
atのhandleはusernameのようなものです。didがidですね。
|
|
|
|
|
|
|
|
didはnostrでいうpubkeyのようなもので、ユーザー固有で変更できないもの、確実なものとして、基本的には内部でdidが参照されています。
|
|
|
|
|
|
|
|
handleはあくまでaliasのようなもので、search, mention, loginなどの処理のときに人間にわかりやすいようにしている感じです。
|
|
|
|
|
|
|
|
とはいえ、人間にとってhandleのほうが重要ですね。
|
|
|
|
|