Skip to main content

概觀

Bluesky Facade 是 BlueskyManager 的薄層封裝。BlueskyManager 管理多個 Agent,HasShortHand trait 則整合了常用方法的捷徑。

架構

BlueskyServiceProviderFactory::class 註冊為 BlueskyManager 的 scoped 單例(每次請求 1 個實體)。
Facade 的 getFacadeAccessor() 會解析此綁定。

BlueskyManager 的核心方法

以下是 BlueskyManager 自身定義的核心方法。將其與 HasShortHand trait 的方法分開理解,有助於掌握內部結構。

認證

Agent 操作

HTTP client

工具

HasShortHand trait

HasShortHand trait 將 AT Protocol 的低階 API 封裝為易讀的 PHP 方法。只要在 BlueskyManager 中寫入 use HasShortHand;,這些方法即可直接透過 Bluesky:: 呼叫。
之所以將 HasShortHand 獨立為 trait,是為了便於測試與客製化。透過此 trait,可讓 BlueskyManager 的程式碼保持精簡,同時提供豐富的 API 捷徑。

貼文 / feed

互動

追蹤

個人資料 / 帳號

媒體

通知

AT Protocol record 操作

Feed generator / labeler

常用捷徑範例

貼文

回覆

回覆時透過 Post::build() 設定父貼文的 StrongRefHasShortHand 中並沒有專用的 reply() 方法,而是將 Post 物件傳給 post()

按讚 / 轉發

更新個人資料

upsertProfile() 會取得目前的個人資料,並儲存於閉包中修改的內容。可透過 Profile 物件的方法設定 displayName、description 等。

設定 self label

可以透過 SelfLabels 對整個帳號設定 self label。

直接呼叫任意 API

HasShortHand 中沒有的方法,可使用 send()client()

透過 Facade 與直接使用的差異

Bluesky::post()app(Factory::class)->post() 對應的是同一個 BlueskyManager 實體。
由於是 scoped 註冊,因此在一次請求內,login() 之後的 session 狀態會被保留。

Conditionable 與 Macroable

BlueskyManager 同時使用了 ConditionableMacroable trait。

Conditionable:when() / unless()

Macroable:新增自訂方法

透過 macro() 可從應用程式端向 BlueskyManager 增加方法。通常在 AppServiceProviderboot() 中定義。

插入自訂 Agent

透過 withAgent() 可直接設定任意的 Agent 實作。
一般認證(login() / withToken())會自動設定 agent,因此直接使用 withAgent() 的機會主要在測試時。

參考連結

最後修改於 2026年8月2日