Skip to main content

概览

Bluesky Facade 是 BlueskyManager 的一层薄封装。BlueskyManager 负责管理多个 Agent,而 HasShortHand trait 集中提供了一批常用方法的快捷方式。

架构

BlueskyServiceProvider 会将 Factory::class 以作用域单例(scoped singleton,每次请求一个实例)的形式注册为 BlueskyManager。
Facade 的 getFacadeAccessor() 会解析这个绑定。

BlueskyManager 的核心方法

BlueskyManager 自身定义的核心方法如下。将它们与 HasShortHand trait 提供的方法区分开来,有助于理解内部结构。

认证

Agent 操作

HTTP 客户端

工具方法

HasShortHand trait

HasShortHand trait 把 AT Protocol 的底层 API 包装成了对 PHP 更友好的方法。只要在 BlueskyManager 中写上 use HasShortHand;,这些方法就可以直接通过 Bluesky:: 调用。
把 HasShortHand 拆成独立 trait,是为了便于测试和自定义。这样既能保持 BlueskyManager 代码简洁,又能提供丰富的 API 快捷方式。

发帖 / feed

互动

关注

个人资料 / 账号

媒体

通知

AT Protocol 记录操作

Feed generator 与 labeler

常用快捷方式示例

发帖

回复

回复时使用 Post::build() 设置父帖的 StrongRef。HasShortHand 中没有专门的 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 也使用了 Conditionable 和 Macroable trait。

Conditionable: when() / unless()

Macroable:添加自定义方法

通过 macro(),你可以从应用侧向 BlueskyManager 添加方法。通常写在 AppServiceProvider 的 boot() 中。

注入自定义 Agent

通过 withAgent(),可以直接设置任意的 Agent 实现。
通过常规认证(login() / withToken())会自动设置 agent,所以直接使用 withAgent() 的场合主要出现在测试中。

参考链接

最后修改于 2026年7月18日