Skip to main content

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()

Utilisez TextBuilder::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 avec count (par défaut : 1).

toPost()

Convertit l’instance TextBuilder en enregistrement Post. Peut être transmis directement à Bluesky::post().

Post::build()

Vous pouvez également utiliser Post::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 omettez did, 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.
Si vous utilisez beaucoup de mentions en production, mettre le DID en cache permet de réduire les appels API.

Intégration de liens (URL)

link() ajoute un facet de lien.
Si 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 utiliser Post::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.
detectFacets() fonctionne par expressions régulières. Si vous voulez garantir la liaison, il est plus sûr d’utiliser explicitement link(), mention() et tag().

Ajout de facets personnalisés

La méthode facet() 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

Dernière modification le 13 juillet 2026