Skip to main content

Wat is TextBuilder?

TextBuilder is een klasse waarmee je via method chaining de facets (rich-text-annotaties) opbouwt die het AT Protocol van Bluesky definieert. De tekst van een Bluesky-post is platte tekst, maar om mentions, links en hashtags weer te geven moet je een facets-array meesturen die de positie in de tekst (byte-offsets) en het type aangeeft. TextBuilder verzorgt deze offsetberekening en het opbouwen van de array automatisch.

Eenvoudige tekst maken

TextBuilder::make()

Met TextBuilder::make() maak je een instantie met een begintekst. De begintekst is optioneel.

text()

Met text() voeg je tekst toe aan het einde.

newLine()

Voegt een regeleinde toe. Met count geef je het aantal regels op (standaard: 1).

toPost()

Converteert de TextBuilder-instantie naar een Post-record. Je kunt deze rechtstreeks doorgeven aan Bluesky::post().

Post::build()

Je kunt ook een closure doorgeven aan Post::build(). De returnwaarde is dan een Post.

Mentions (@mention) toevoegen

Met mention() voeg je een mention-facet toe.

Automatische DID-resolutie

Als je did weglaat, wordt de DID automatisch geresolved vanuit de handle (Bluesky::resolveHandle() wordt aangeroepen).

De DID expliciet opgeven

Als je de DID al kent, kun je die expliciet doorgeven en zo de API-aanroep vermijden.
Gebruik je in productie veel mentions, dan kun je API-aanroepen verminderen door DID’s te cachen.
Met link() voeg je een link-facet toe.
Als je uri weglaat, wordt text direct als URI gebruikt.

Hashtags toevoegen

Met tag() voeg je een hashtag-facet toe.

Samengestelde tekst bouwen

Door meerdere facets te combineren maak je rijke posttekst.

Schrijven met Post::build()

Integratie met posts

Combineren met Bluesky::post()

Combineren met het Notification-kanaal

Je kunt Post::build() gebruiken in de toBluesky()-method van BlueskyChannel.

Facets automatisch detecteren

Je kunt @mention, URL’s en #hashtag in de tekst ook automatisch laten detecteren en de facets laten instellen.
detectFacets() detecteert op basis van reguliere expressies. Wil je zeker weten dat er gelinkt wordt, gebruik dan expliciet link(), mention() en tag().

Custom facets toevoegen

Met de facet()-method kun je rechtstreeks een willekeurige facet-array toevoegen.

Tekenlimieten en aandachtspunten

Byte-offsets en graphemes

De facet-indexen van het AT Protocol worden opgegeven als UTF-8-byte-offsets. TextBuilder berekent het aantal bytes intern met strlen(). Multibyte-tekens zoals Japans en emoji nemen meerdere bytes per teken in beslag, dus de offset wordt bepaald door het aantal bytes, niet het aantal tekens.

Tekenlimiet voor posts

Een Bluesky-post is beperkt tot maximaal 300 tekens in graphemes (zichtbare tekens). De limiet geldt in graphemes en niet in bytes, dus ook in het Japans kun je 300 tekens schrijven.
TextBuilder zelf controleert het aantal tekens niet. Stuur je een post van meer dan 300 graphemes, dan geeft de AT Protocol-API een fout terug.

Overzicht van methods

Laatst gewijzigd op 6 september 2026