跳转到主要内容

概览

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() 设置父帖的 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年7月18日