Sysop Chat
Sysop Chat
ENiGMA½ provides a two-way split-screen chat system between the sysop and any connected user. It is composed of two modules that work together:
page_sysop— user-facing page flowsysop_chat— split-screen chat screen used by both parties
The sysop can also break into chat with any node directly from the WFC without waiting for a page.
User Flow (Paging the Sysop)
The pageSysop menu entry drives the user side:
- Rate limited? — The user sees rate-limit art (
PAGESYPLM) or fallback text and returns to the previous menu. - Sysop available?
- No — The user sees the “not available” art (
PAGESYPNA) with a Y/N prompt offering to send their message as private mail addressed to the sysop instead. - Yes — The user sees the main page art (
PAGESYSP) with an optional text input for a reason/message, then submits.
- No — The user sees the “not available” art (
- On a successful page: a session is created, all online sysops are alerted (per
pageAlertconfig), and the user sees the confirmation art (PAGESYSPOK).
Sysops at the WFC are not sent an interrupt — they see the page reflected immediately in the node list (pageIndicator) and in the pending page tokens. Sysops not at the WFC receive an interrupt notification with the user’s name, node, and message.
Sysop Flow (WFC)
With a node selected in VM1, press B to break into chat:
- If that node has a pending page, the existing session is accepted.
- If there is no pending page, a new sysop-initiated session is created.
Both parties enter the sysopChat menu directly — no pre-chat confirmation is shown to the user.
Chat Screen (sysopChat module)
Both parties use the same sysopChat menu entry. The role (sysop or user) is passed via extraArgs.role.
Art file: SYSOPCHAT
| MCI | Role | Description |
|---|---|---|
%MT1 |
Both | Sysop’s scrollback panel (top) |
%ET2 |
Sysop | Sysop’s input line |
%MT3 |
Both | User’s scrollback panel (bottom) |
%ET4 |
User | User’s input line |
%TL10+ |
Both | Custom status tokens (see chatInfoFormat10 etc.) |
Messages from either party appear in the sender’s panel on both screens.
ESC ends the chat. The party that exits notifies the partner, who sees a brief “chat ended” message then exits automatically after a short delay.
Art Files
| Spec | Module | Description | Key MCI |
|---|---|---|---|
PAGESYSP |
page_sysop |
Main page form — user types optional reason | %ET1 (message), %TL10+ |
PAGESYSPOK |
page_sysop |
“Your page has been sent” confirmation | none required |
PAGESYPNA |
page_sysop |
Sysop not available — combined with “send as mail?” Y/N | %TM1 (Y/N confirm) |
PAGESYPLM |
page_sysop |
Rate limit art (optional — fallback text used if missing) | none required |
SYSOPCHAT |
sysop_chat |
Split-screen chat layout — drives panel geometry | %MT1, %ET2, %MT3, %ET4, %TL10+ |
System Config (sysopChat block in config.hjson)
| Key | Default | Description |
|---|---|---|
pageCooldownMinutes |
5 |
Minimum minutes a user must wait between pages. |
pageAlert |
bel |
Alert mode on page arrival: bel (sends \x07 to sysop terminals), none (silent), or command (runs pageAlertCommand). |
pageAlertCommand |
'' |
Shell command run when pageAlert is command. Tokens: {userName}, {nodeId}, {message}. Example: 'notify-send "Page from {userName}" "{message}"' |
pageSysop Menu Config Keys
| Key | Default | Description |
|---|---|---|
notifyFormat |
pipe-colored text | Interrupt text sent to non-WFC sysops. Tokens: {userName}, {nodeId}, {message}, {sessionId} |
pageSentArt |
PAGESYSPOK |
Art shown after a successful page |
notAvailableArt |
PAGESYPNA |
Art shown when sysop unavailable (must contain %TM1) |
rateLimitArt |
PAGESYPLM |
Art shown when rate-limited (optional; fallback text used if missing) |
rateLimitText |
pipe-colored string | Fallback text if rateLimitArt is missing |
mailSubject |
Page from {userName} |
Subject for the “send as mail” path. Token: {userName} |
sysopUserName |
Sysop |
Display name used as the mail recipient |
mailMenuName |
privateMailMenuCreateMessage |
Menu navigated to for the mail compose path |
sysopChat Menu Config Keys
| Key | Default | Description |
|---|---|---|
chatEndedText |
\|08[ Chat session ended ]\|07 |
Message shown in the sysop panel when the partner ends the chat |
messageFormat |
\|15{userName}\|07: {message} |
Format for each sent message line. Tokens: {userName}, {message} |
chatInfoFormat10+ |
— | Custom-range status token format (standard ENiGMA pattern). Tokens: {partnerName}, {duration}, {userName}, {userNode} |
Theming
prefixFormat (per-view in theme.hjson)
Set prefixFormat on ET2 or ET4 in the sysopChat MCI theme block to display a role-specific label before the input line. Pipe codes are supported and render live as the user types.
sysopChat: {
0: {
ET2: {
prefixFormat: "|11{userName} |14> "
}
ET4: {
prefixFormat: "|11{userName} |14> "
}
}
}
Token available: {userName}.
