====== Chat Features ======

To configure the "chat" features of the Synchronet [[server:Terminal]] Server, use the [[util:SCFG]]->Chat Features menu option.

  ╔═════════════════════════════╗
  ║        Chat Features        ║
  ╠═════════════════════════════╣
  ║ │Artificial Gurus           ║
  ║ │Multinode Chat Actions     ║
  ║ │Multinode Chat Channels    ║
  ║ │External Sysop Chat Pagers ║
  ╚═════════════════════════════╝

Here you may configure the real-time chat-related features of the BBS.

===== Artificial Gurus =====

The //Guru// is an artificial conversational engine users can chat with for entertainment. The sysop can configure multiple gurus, each with its own personality and intelligence engine, defined in a ''.dat'' file in [[dir:ctrl]] (the default guru's brain is ''ctrl/guru.dat''). See [[custom:guru|GURU.DAT customization]] for the data file format. A guru can instead be driven by a JavaScript chat module via its //Module// field (below) — most notably the bundled [[module:chat_llm|LLM-backed engine]]; see [[howto:llm-guru|Setting up the LLM Guru]].

This menu lists the configured gurus. Use ''Ins'' to add a new guru, ''Del'' to remove one. Selecting a guru opens its sub-menu.

  ╔═════════════════════════════════════════════╗
  ║               Artificial Gurus              ║
  ╠═════════════════════════════════════════════╣
  ║ │The Guru                                   ║
  ║ │                                           ║
  ╚═════════════════════════════════════════════╝

==== Guru ====

  ╔══════════════════════════════════════════════════════════╗
  ║                         The Guru                         ║
  ╠══════════════════════════════════════════════════════════╣
  ║ │Guru Name                  The Guru                     ║
  ║ │Guru Internal Code         GURU                         ║
  ║ │Access Requirements                                     ║
  ║ │Module                                                  ║
  ╚══════════════════════════════════════════════════════════╝

^ Option Name        ^ Description ^
| Guru Name          | The display name users see when chatting with this guru. |
| Guru Internal Code | Up to 16 characters; uniquely identifies this guru within Synchronet. Also the base filename of the intelligence engine for this guru (with the ''.dat'' extension, located in [[dir:ctrl]] — e.g. internal code ''GURU'' loads ''ctrl/guru.dat''). |
| Access Requirements | An [[access:requirements|ARS]] expression — only users matching the requirements can chat with this guru. |
| Module             | Optional name of a JavaScript module (in [[dir:exec]]) that drives this guru's chat instead of the built-in pattern engine.  Blank = the legacy ELIZA-style engine reading the ''.dat'' file.  Set to ''chat_llm'' for the bundled [[module:chat_llm|LLM-backed engine]] (Ollama / OpenAI-compatible), configured via [[config:chat_llm.ini]] — see [[howto:llm-guru|Setting up the LLM Guru]]. |

===== Multinode Chat Actions =====

Multinode Chat Actions are configured in "sets" which can be assigned to Multinode Chat Channels.

  ╔══════════════════════════════════════════════════════════╗
  ║                   Main Chat Action Set                   ║
  ╠══════════════════════════════════════════════════════════╣
  ║ │Action Set Name            Main                         ║
  ║ │Configure Chat Actions...                               ║
  ╚══════════════════════════════════════════════════════════╝
  
==== Set of Chat Actions ====

This is a list of the configured multinode chat actions.  The users can
use these actions in multinode chat by turning on action commands with 
the /A command in multinode chat.  Then if a line is typed which       
begins with a valid action command and has a user name, chat handle,   
or node number following, the output string will be displayed replacing
the %s symbols with the sending user's name and the receiving user's   
name (in that order).                                                  
  
  ╔════════════════════════════════════════════════════════════════════╗
  ║                          Main Chat Actions                         ║
  ╠════════════════════════════════════════════════════════════════════╣
  ║ │ANGER     rh%s is trying to make %s angry.                        ║
  ║ │ANGRY     rh%s is very angry and wants %s to know about it.       ║
  ║ │APPLAUD   bhCLAP CLAP CLAP![]y%s expresses approval with %s.      ║
  ║ │ARMWRESTL mh%s arm wrestles with %s.                              ║
  ║ │BARK      rhRUFF![]m%s barks at %s.                               ║
  ║ │BEAT-UP   hb%snb beats h%s up.                                    ║
  ║ │BLUSH     rh%s turns to %s and blushes shyly.                     ║
  ║ │BOW       nc%s bows to %s.                                        ║
  ║ │BURP      bhBELCH![]y%s burps at %s.                              ║
  ║ │BUY       mh%s attempts to purchase %s.                           ║
  ║ │BYE       mh%s says "wBYEm" to %s.                                ║
  ║ │CARESS    mh%s caresses %s.                                       ║
  ║ │CHEAT     rh%s is cheating on %s.                                 ║
  ║ │COMFORT   bh%s comforts %s.                                       ║
  ║ │COUGH     ghACK ABLEW AHEM![]ng%s coughs at %s.                   ║
  ║ │CRY       nm%s looks at %s and cries.                             ║
  ║ │CUDDLE    mh%s cuddles with %s.                                   ║
  ╚════════════════════════════════════════════════════════════════════╝

===== Multinode Chat Channels =====

This menu lists the configured chat channels. Use ''Ins'' to add a new channel, ''Del'' to remove one. Selecting a channel opens its sub-menu:

  ╔══════════════════════════════════════════════════════════╗
  ║                     Main Chat Channel                    ║
  ╠══════════════════════════════════════════════════════════╣
  ║ │Name                       Main                         ║
  ║ │Internal Code              Main                         ║
  ║ │Cost in Credits            0                            ║
  ║ │Access Requirements                                     ║
  ║ │Password Protection        No                           ║
  ║ │Guru Joins When Empty      Yes                          ║
  ║ │Channel Guru               The Guru                     ║
  ║ │Channel Action Set         Main                         ║
  ╚══════════════════════════════════════════════════════════╝

^ Option Name           ^ Description ^
| Name                  | Channel display name shown to users in the channel list. |
| Internal Code         | Up to 16 characters; uniquely identifies this channel within Synchronet. |
| Cost in Credits       | [[access:credits|Credits]] deducted from a user's account when joining this channel. ''0'' = free. |
| Access Requirements   | An [[access:requirements|ARS]] expression — users not matching the requirements cannot see or join this channel. |
| Password Protection   | If ''Yes'', users may lock the channel with a password; only users knowing the password can enter once it's locked. |
| Guru Joins When Empty | If ''Yes'', the configured //Channel Guru// will join the channel when only one user is present. |
| Channel Guru          | The [[#artificial_gurus|Artificial Guru]] that joins when the channel is empty (if //Guru Joins When Empty// is enabled). |
| Channel Action Set    | The [[#multinode_chat_actions|Chat Action Set]] available to users in this channel. |

===== External Sysop Chat Pagers =====

External sysop pagers run a command (typically to play a sound or send an external notification) when a user pages the sysop. Multiple pagers may be configured with different access requirements — e.g. play different sounds for different user classes, or trigger a notification only after hours.

Use ''Ins'' to add a new pager, ''Del'' to remove one. Selecting a pager opens its sub-menu.

  ╔═════════════════════════════════════════════╗
  ║          External Sysop Chat Pagers         ║
  ╠═════════════════════════════════════════════╣
  ║ │?sound.js %!syspage.wav      WIN32         ║
  ║ │                                           ║
  ╚═════════════════════════════════════════════╝

==== Sysop Chat Pager ====

  ╔══════════════════════════════════════════════════════════╗
  ║                    Sysop Chat Pager #1                   ║
  ╠══════════════════════════════════════════════════════════╣
  ║ │Command Line               ?sound.js %!syspage.wav      ║
  ║ │Access Requirements        WIN32                        ║
  ║ │Native Executable          No                           ║
  ║ │I/O Method                 FOSSIL or UART               ║
  ║ │Use Shell or New Context   No                           ║
  ╚══════════════════════════════════════════════════════════╝

^ Option Name              ^ Description ^
| Command Line             | The [[config:cmdline|command line]] to invoke when the sysop is paged. The example above runs the JavaScript module ''sound.js'' with the ''syspage.wav'' file in [[dir:exec]]. |
| Access Requirements      | An [[access:requirements|ARS]] expression — the pager runs only for users matching the requirements. The example ''WIN32'' restricts to Windows hosts. |
| Native Executable        | ''Yes'' if the command is a native (non-DOS) executable; ''No'' for DOS programs (which require a DOS emulator on *nix). |
| I/O Method               | How standard I/O is handled — ''FOSSIL or UART'' (intercepted), ''Standard I/O'' (stdin/stdout pass-through), etc. |
| Use Shell or New Context | If ''Yes'', the command is run via a shell (or a new context) rather than executed directly. |

===== See Also =====
  * [[:config:|config index]]
  * [[:howto:relay_smtp|Sysop notification by email]]
  * [[:howto:mqtt|MQTT events]]
  * [[:custom:guru|Guru customization (GURU.DAT)]]

{{tag>chat guru chat-channels chat-actions sysop-pager}}
