⤵️

BlueskyのdisplayNameに改行を入れる [deprecated]

2023/07/31に公開

Blueskyでは、実は表示名に改行コードを入れることができます。


こんな感じ

https://bsky.app/

普通に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して現状の値を取得し、それを引き継いでます。
もちろん、これらに別の値を指定して更新することも可能です。

https://atproto.com/lexicons/app-bsky-actor#appbskyactorprofile

なお、displayNameに改行が入っている場合、Web版とアプリ版(iOSしか確認していません)ではタイムラインでの表示が異なります。

Web版では改行が空白に変換されます:


Web版での表示

iOSアプリ版では1行目のみ表示されます:


アプリ版での表示

ということで、どこまで仕様どおりの挙動かわかりません。
いずれ修正されて使えなくなるかもしれませんが、面白かったので紹介しました。

ちなみに本記事に添付したスクリーンショットでfollower数などが非表示になっていますが、これに関しては以下の記事をご覧ください。

https://zenn.dev/kawarimidoll/articles/54287c1c74a118

Discussion