Skip to content

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 flow
  • sysop_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.


The pageSysop menu entry drives the user side:

  1. Rate limited? — The user sees rate-limit art (PAGESYPLM) or fallback text and returns to the previous menu.
  2. 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.
  3. On a successful page: a session is created, all online sysops are alerted (per pageAlert config), 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.


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.


Both parties use the same sysopChat menu entry. The role (sysop or user) is passed via extraArgs.role.

Art file: SYSOPCHAT

MCIRoleDescription
%MT1BothSysop’s scrollback panel (top)
%ET2SysopSysop’s input line
%MT3BothUser’s scrollback panel (bottom)
%ET4UserUser’s input line
%TL10+BothCustom 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.


SpecModuleDescriptionKey MCI
PAGESYSPpage_sysopMain page form — user types optional reason%ET1 (message), %TL10+
PAGESYSPOKpage_sysop“Your page has been sent” confirmationnone required
PAGESYPNApage_sysopSysop not available — combined with “send as mail?” Y/N%TM1 (Y/N confirm)
PAGESYPLMpage_sysopRate limit art (optional — fallback text used if missing)none required
SYSOPCHATsysop_chatSplit-screen chat layout — drives panel geometry%MT1, %ET2, %MT3, %ET4, %TL10+

System Config (sysopChat block in config.hjson)

Section titled “System Config (sysopChat block in config.hjson)”
KeyDefaultDescription
pageCooldownMinutes5Minimum minutes a user must wait between pages.
pageAlertbelAlert 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}"'

KeyDefaultDescription
notifyFormatpipe-colored textInterrupt text sent to non-WFC sysops. Tokens: {userName}, {nodeId}, {message}, {sessionId}
pageSentArtPAGESYSPOKArt shown after a successful page
notAvailableArtPAGESYPNAArt shown when sysop unavailable (must contain %TM1)
rateLimitArtPAGESYPLMArt shown when rate-limited (optional; fallback text used if missing)
rateLimitTextpipe-colored stringFallback text if rateLimitArt is missing
mailSubjectPage from {userName}Subject for the “send as mail” path. Token: {userName}
sysopUserNameSysopDisplay name used as the mail recipient
mailMenuNameprivateMailMenuCreateMessageMenu navigated to for the mail compose path

KeyDefaultDescription
chatEndedText|08[ Chat session ended ]|07Message 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}

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}.


  • Pre-Auth Feedback — allow unauthenticated visitors to send mail to the sysop directly from the login matrix.