Skip to main content

Cos’è TextBuilder

TextBuilder è una classe che permette di comporre tramite metodi concatenati i facets (annotazioni rich text) definiti da AT Protocol di Bluesky. Il corpo dei post Bluesky è testo semplice, ma per visualizzare menzioni, link e hashtag è necessario inviare, insieme al testo, un array facets che indichi posizione (offset in byte) e tipo. TextBuilder calcola automaticamente questi offset e costruisce l’array.

Creazione di testo base

TextBuilder::make()

Con TextBuilder::make() generi un’istanza specificando il testo iniziale. Il testo iniziale è opzionale.

text()

Con text() aggiungi testo in coda.

newLine()

Aggiunge un a capo. Con count puoi indicare il numero di righe (default: 1).

toPost()

Converte l’istanza di TextBuilder in un record Post. Puoi passarlo direttamente a Bluesky::post().

Post::build()

Puoi anche passare una closure a Post::build(). Il valore di ritorno è un Post.

Aggiungere una menzione (@mention)

Con mention() aggiungi un facet di menzione.

Risoluzione automatica del DID

Se ometti did, viene risolto automaticamente dall’handle (viene chiamato Bluesky::resolveHandle()).

Specifica esplicita del DID

Se conosci già il DID, puoi passarlo esplicitamente per evitare la chiamata API.
Se in produzione usi molte menzioni, mettere in cache i DID riduce il numero di chiamate API.
Con link() aggiungi un facet di link.
Se ometti uri, viene usato text come URI.

Aggiungere un hashtag

Con tag() aggiungi un facet di hashtag.

Composizione di testo complesso

Puoi combinare più facet per creare testi post ricchi.

Scrittura con Post::build()

Integrazione con i post

Combinazione con Bluesky::post()

Combinazione con il canale Notification

Nel metodo toBluesky() di BlueskyChannel puoi usare Post::build().

Rilevamento automatico dei facets

Puoi anche far rilevare automaticamente @mention, URL e #hashtag nel testo e impostare i facets.
detectFacets() è un rilevamento basato su espressioni regolari. Se vuoi certezza del link, usa esplicitamente link(), mention() o tag().

Aggiungere un facet personalizzato

Con il metodo facet() puoi aggiungere direttamente un array di facet arbitrario.

Limiti di lunghezza e attenzioni

Offset in byte e grapheme

Gli indici dei facet in AT Protocol si specificano in offset UTF-8 in byte. TextBuilder calcola internamente il numero di byte usando strlen(). Caratteri multibyte come giapponese ed emoji occupano più byte anche se rappresentano un solo carattere, quindi gli offset sono determinati dai byte, non dal numero di caratteri.

Limite di caratteri del post

I post di Bluesky hanno un limite di 300 caratteri in grapheme (caratteri visualizzati). Il limite è espresso in grapheme e non in byte, quindi puoi scrivere fino a 300 caratteri anche in giapponese.
TextBuilder di per sé non verifica il numero di caratteri. Se invii un post che supera i 300 grapheme, l’API di AT Protocol restituisce un errore.

Elenco dei metodi

Ultima modifica il 13 luglio 2026