Qu’est-ce que TextBuilder ?
TextBuilder est une classe qui permet de composer par chaînage de méthodes les facets (annotations de texte enrichi) définis par l’AT Protocol de Bluesky.
Le corps d’une publication Bluesky est du texte brut, mais pour afficher des mentions, liens et hashtags, il faut envoyer un tableau facets indiquant la position (offset en octets) et le type dans le texte. TextBuilder effectue automatiquement ce calcul d’offset et la construction du tableau.
Création de texte de base
TextBuilder::make()
UtilisezTextBuilder::make() pour créer une instance avec un texte initial. Le texte initial est optionnel.
text()
text() ajoute du texte à la fin.
newLine()
Ajoute un saut de ligne. Vous pouvez spécifier le nombre de lignes aveccount (par défaut : 1).
toPost()
Convertit l’instanceTextBuilder en enregistrement Post. Peut être transmis directement à Bluesky::post().
Post::build()
Vous pouvez également utiliserPost::build() en lui passant une closure. La valeur de retour est un Post.
Ajout de mentions (@mention)
mention() ajoute un facet de mention.
Résolution automatique du DID
Si vous omettezdid, le DID sera automatiquement résolu depuis le handle (Bluesky::resolveHandle() est appelée).
Spécification explicite du DID
Si le DID est déjà connu, vous pouvez le passer explicitement pour éviter l’appel API.Intégration de liens (URL)
link() ajoute un facet de lien.
uri est omis, text sera utilisé tel quel comme URI.
Ajout de hashtags
tag() ajoute un facet de hashtag.
Construction de texte composite
Vous pouvez combiner plusieurs facets pour créer un texte de publication enrichi.Écriture avec Post::build()
Intégration avec les publications
Combinaison avec Bluesky::post()
Combinaison avec le canal Notification
Vous pouvez utiliserPost::build() dans la méthode toBluesky() de BlueskyChannel.
Détection automatique des facets
Vous pouvez également détecter automatiquement les@mention, URL et #hashtag du texte pour configurer les facets.
Ajout de facets personnalisés
La méthodefacet() permet d’ajouter directement n’importe quel tableau de facet.
Limites de caractères et considérations
Offset en octets et grapheme
Les index de facet d’AT Protocol sont spécifiés en offsets d’octets UTF-8.TextBuilder utilise en interne strlen() pour calculer le nombre d’octets.
Les caractères multi-octets comme le japonais ou les emojis consomment plusieurs octets par caractère, donc l’offset est déterminé en nombre d’octets et non en nombre de caractères.
Limite de caractères des publications
Les publications Bluesky sont limitées à 300 caractères en grapheme (caractères affichés) maximum. La limite étant en grapheme et non en octets, vous pouvez écrire 300 caractères même en japonais.TextBuilder lui-même ne vérifie pas la longueur. Si vous envoyez une publication dépassant 300 graphemes, l’API AT Protocol retournera une erreur.Liste des méthodes
Source: src/RichText/TextBuilder.php