⤵️
BlueskyのdisplayNameに改行を入れる [deprecated]
Blueskyでは、実は表示名に改行コードを入れることができます。
こんな感じ
普通にWeb UIの入力窓から更新すると改行が削除されてしまうのですが、API経由であれば改行コードを混ぜることができます。
以下にコードを示します。Deno向けに書いていますが、Nodeでもimport文などを少し修正すれば動くと思います。
update_bsky_prof.ts
// deno run --allow-net update_bsky_prof.ts
import AtprotoAPI from "npm:@atproto/api";
const { BskyAgent } = AtprotoAPI;
// ログイン先のサーバーを指定
const service = "https://bsky.social";
const agent = new BskyAgent({ service });
// id/passを指定してログイン app-passwordも使用可能
const identifier = "BLUESKY_IDENTIFIER";
const password = "BLUESKY_PASSWORD";
await agent.login({ identifier, password });
// 現在のプロフィール情報を取得
const { data } = await agent.getProfile({ actor: identifier });
console.log(data)
const record = {
// 本記事のメイン ここに`\n`を入れることができる
displayName: "名前\n(^ ^)",
// プロフィール説明文(現在の設定を残すため)
description: data.description,
// アイコン画像の指定(現在の設定を残すため)
avatar: {
// $typeとmimeTypeは型情報 おまじない
$type: "blob",
mimeType: "image/jpeg",
// ref.$linkが画像のURL
// data.avatarにはCDNのURLが入っているのでrefだけ抜き出す
ref: { $link: (data.avatar || "").replace(/^.*\/plain\/|@jpeg$/g, "") },
// sizeはnumber型の引数 必須ではあるが渡されていればゼロでも問題ない
size: 0
},
// ヘッダー背景画像の指定(現在の設定を残すため)
// 型はアイコンと共通
banner: {
$type: "blob",
ref: { $link: (data.banner || "").replace(/^.*\/plain\/|@jpeg$/g, "") },
mimeType: "image/jpeg",
size: 0
},
};
console.log(record);
// profileの更新
const response = await agent.com.atproto.repo.putRecord({
collection: "app.bsky.actor.profile",
repo: data.did,
rkey: "self",
record,
});
console.log(response);
更新時のrecord
にはdisplayName
description
avatar
banner
を指定できますが、指定していない項目は消えてしまいます。今回はdisplayName
だけを変更したかったので、事前にgetProfile
して現状の値を取得し、それを引き継いでます。
もちろん、これらに別の値を指定して更新することも可能です。
なお、displayNameに改行が入っている場合、Web版とアプリ版(iOSしか確認していません)ではタイムラインでの表示が異なります。
Web版では改行が空白に変換されます:
Web版での表示
iOSアプリ版では1行目のみ表示されます:
アプリ版での表示
ということで、どこまで仕様どおりの挙動かわかりません。
いずれ修正されて使えなくなるかもしれませんが、面白かったので紹介しました。
ちなみに本記事に添付したスクリーンショットでfollower数などが非表示になっていますが、これに関しては以下の記事をご覧ください。
Discussion