Messenger
Headless messenger and visual-novel transcript engine for React Text Game.
A chat's transcript is an append-only log that lives in an engine entity, so it survives saves, loads, and remounts, and knows exactly what the player has and has not seen. The same primitive powers a messenger simulator (chat list, unread badges, scheduled delivery) and a Ren'Py-style visual novel (backlog, skip-already-read).
This release is headless: state, delivery, and selectors, with no components.
Example
import {
defineChat, defineContact, defineMessenger, defineScript, m,
} from '@react-text-game/messenger';
import { MINUTE } from '@react-text-game/core/clock';
const anna = defineContact('anna', { name: m.t('contacts.anna') });
const chat = defineChat('anna', { peer: anna });
const opener = defineScript('anna/opener', (m) => [
m.from(anna).text(m.t('anna.opener')),
m.typing(anna, 1200),
m.from(anna).media([m.image('/park.webp')], { caption: m.t('anna.park') }),
m.wait(30 * MINUTE),
m.choice('anna/opener/reply', [
{ content: m.t('reply.yes') },
{ content: m.t('reply.no') },
]),
]);
export const messenger = defineMessenger({ chats: [chat] });
// From an action handler, never while rendering:
chat.play(opener);
chat.advance();
Classes
Type Aliases
- Beat
- BeatInput
- ChatCallbacks
- ChatKind
- ChatListItem
- ChatOptions
- ChatSnapshot
- ChatSummary
- ChatVars
- ChoiceBeatInput
- ChoiceOption
- Conditional
- Contact
- ContactOptions
- CustomBeatInput
- DeliverableBeatInput
- ForwardOrigin
- ForwardOriginInput
- I18nText
- Json
- MediaItem
- MediaItemInput
- MediaItemOptions
- MediaMessageOptions
- MessageBeatInput
- MessageBody
- MessageOptions
- Messenger
- MessengerHelpers
- MessengerOptions
- Params
- Payload
- PendingChoice
- PlainRichText
- RawText
- Receipt
- RefText
- RichText
- Script
- ScriptBuilder
- SeenStore
- SeenTransport
- SenderScope
- StaticText
- SystemBeatInput
- TextInput
- TranscriptEntry
- TypingBeatInput
- WaitBeatInput
Variables
- AUTHOR_I18N_NAMESPACE
- ENTRY_WARN_THRESHOLD
- m
- MESSENGER_I18N_NAMESPACE
- MESSENGER_STORE_ID
- messengerTranslations
- PLAYER_SENDER
- playerSenderId
- SEEN_SETTING_KEY
- settingsSeenTransport
- SYSTEM_SENDER
Functions
- createMemorySeenStore
- createSeenStore
- defineChat
- defineContact
- defineMessenger
- defineScript
- getAllChats
- getChat
- getContact
- getScript
- isI18nText
- isStaticText
- previewText
- resolvePlainRichText
- resolveSenderAvatar
- resolveSenderName
- resolveSystemText
- resolveText
- selectFirstUnreadKey
- selectLastEntry
- selectTypingContacts
- selectUnread
- selectUnseenEntries
- t
- useChat
- useChatList
- useUnreadTotal