Skip to main content

什麼是 TextBuilder

TextBuilder 是以方法鏈組合 Bluesky AT Protocol 所定義的 facets(富文字註記)的類別。 Bluesky 貼文本文為純文字,但若要顯示 mention、連結、hashtag,需要同時傳送標示文字中位置(位元組偏移)與種類的 facets 陣列。TextBuilder 會自動處理這些偏移計算與陣列建構。

基本文字建立

TextBuilder::make()

以 TextBuilder::make() 指定初始文字並產生實體。初始文字可省略。

text()

以 text() 於末尾追加文字。

newLine()

加入換行。可透過 count 指定行數(預設:1)。

toPost()

將 TextBuilder 實體轉換為 Post 記錄,可直接傳入 Bluesky::post()。

Post::build()

也可透過將閉包傳入 Post::build() 的方式使用。回傳值為 Post。

加入 mention(@mention)

以 mention() 加入 mention facet。

DID 自動解析

若省略 did,會從 handle 自動解析 DID(會呼叫 Bluesky::resolveHandle())。

明確指定 DID

若已知 DID,明確傳入即可避免 API 呼叫。
若正式環境中頻繁使用 mention,將 DID 快取起來可減少 API 呼叫。

嵌入連結(URL)

以 link() 加入連結 facet。
若省略 uri,則會將 text 直接作為 URI。

加入 hashtag

以 tag() 加入 hashtag facet。

組合文字的建構

可組合多個 facet 建立豐富的貼文文字。

以 Post::build() 撰寫

與貼文的整合

與 Bluesky::post() 結合

與 Notification 頻道結合

可在 BlueskyChannel 的 toBluesky() 方法中使用 Post::build()。

facets 的自動偵測

也可自動偵測文字中的 @mention、URL、#hashtag 並設定 facets。
detectFacets() 是基於正規表達式的偵測。若要確保連結正確,明確使用 link()、mention()、tag() 會更可靠。

加入自訂 facet

透過 facet() 方法可直接加入任意的 facet 陣列。

字數限制與注意事項

位元組偏移與 grapheme

AT Protocol 的 facet 索引以 UTF-8 位元組偏移 指定。TextBuilder 內部使用 strlen() 計算位元組數。 日文、emoji 等多位元組字元即使 1 個字元也會佔用多個位元組,因此偏移由位元組數而非字元數決定。

貼文字數限制

Bluesky 的貼文限制為 grapheme(顯示上的字數)最多 300 字元。限制以 grapheme 而非位元組數計,因此中文也可撰寫 300 字。
TextBuilder 本身不執行字數檢查。若送出超過 300 grapheme 的貼文,AT Protocol API 會回傳錯誤。

方法列表

最後修改於 2026年8月2日