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 頻道結合

可在 BlueskyChanneltoBluesky() 方法中使用 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日