Qué es TextBuilder
TextBuilder es la clase para construir mediante encadenamiento de métodos los facets (anotaciones de rich text) que define el AT Protocol de Bluesky.
El cuerpo de las publicaciones de Bluesky es texto plano, pero para mostrar menciones, enlaces y hashtags hay que enviar además un array facets que indica la posición (byte offset) y el tipo dentro del texto. TextBuilder calcula automáticamente esos offsets y construye el array.
Creación básica de texto
TextBuilder::make()
Crea una instancia indicando el texto inicial conTextBuilder::make(). El texto inicial se puede omitir.
text()
Context() se añade texto al final.
newLine()
Añade un salto de línea. Concount puedes indicar el número de líneas (por defecto: 1).
toPost()
Convierte la instancia deTextBuilder en un record Post. Se puede pasar directamente a Bluesky::post().
Post::build()
También puedes usarPost::build() pasándole una clausura. Devuelve un Post.
Añadir menciones (@mention)
Con mention() se añade un facet de mención.
Resolución automática del DID
Si omitesdid, se resuelve automáticamente a partir del handle (se llama a Bluesky::resolveHandle()).
Indicar el DID explícitamente
Si ya conoces el DID, puedes pasarlo explícitamente para evitar la llamada a la API.Incluir enlaces (URL)
Conlink() se añade un facet de enlace.
uri, se usa text como URI tal cual.
Añadir hashtags
Contag() se añade un facet de hashtag.
Construir texto compuesto
Puedes combinar varios facets para crear textos de publicación enriquecidos.Escritura con Post::build()
Integración con publicaciones
Combinado con Bluesky::post()
Combinado con el canal de Notification
En el métodotoBluesky() de BlueskyChannel puedes usar Post::build().
Detección automática de facets
También puedes detectar automáticamente@mention, URLs y #hashtag dentro del texto y añadir los facets.
Añadir facets personalizados
Con el métodofacet() puedes añadir directamente un array de facet arbitrario.
Límite de caracteres y consideraciones
Byte offsets y graphemes
El índice de facet del AT Protocol se especifica en byte offsets UTF-8. InternamenteTextBuilder usa strlen() para calcular el número de bytes.
Los caracteres multibyte como el japonés o los emojis consumen varios bytes por carácter, así que el offset se determina por bytes, no por caracteres.
Límite de caracteres por publicación
Las publicaciones de Bluesky tienen un máximo de 300 caracteres en graphemes (caracteres visibles). El límite se aplica en graphemes, no en bytes, así que puedes escribir hasta 300 caracteres incluso en japonés.El propio
TextBuilder no verifica el número de caracteres. Si envías una publicación con más de 300 graphemes, la API del AT Protocol devolverá un error.Lista de métodos
Source: src/RichText/TextBuilder.php