====== Guru Customization (GURU.DAT) ====== The Synchronet //Guru// is an artificial conversational engine users can chat with for entertainment. Each [[config:chat_features#artificial_gurus|configured guru]] is backed by a small file in the [[dir:ctrl]] directory whose name matches the guru's [[config:chat_features#artificial_gurus|Internal Code]] (lowercased) with a ''.dat'' extension. The default guru's brain is ''[[dir:ctrl]]/guru.dat''. A guru's "intelligence" is just a list of //expression / response// pairs evaluated top-down against the user's typed line. The first expression that evaluates true triggers a randomly-chosen response from its set. Sysops customize a guru by editing this file. :!: The interpreter does not handle syntax errors gracefully. Make a backup before editing, and test changes against your own login. ===== File structure ===== (expression) response response (expression) response response () response response response * Expressions are enclosed in parentheses ''(...)''. * Each expression is followed by one or more response lines. * The final expression must be the empty //fall-through// expression ''()''. Omitting it is a syntax error. * Total file size is limited to 64 KB (or available memory). Evaluation is **top-down**. As soon as one expression matches, its response set is used and remaining expressions are ignored for that input line. Only one response per input line is selected. ===== Expressions ===== The simplest expression is a literal uppercase string (with or without spaces). The user's input is uppercased before comparison. * Strings cannot contain ''~'', ''^'', ''|'', ''&'', ''('', or '')''. ==== Match modifiers ==== ^ Modifier ^ Position ^ Meaning ^ | ''~'' | suffix | Match even when the string is **embedded** in a larger word. ''(HELLO~)'' matches the user typing ''XhelloX''. | | ''^'' | suffix | Match only when the string is at the **start** of the input line. ''(HELLO^)'' matches ''Hello there'' but not ''I said, Hello!''. | ==== Logic operators ==== ^ Operator ^ Meaning ^ Example ^ | ''&'' | AND | ''(HELLO&GURU)'' — both strings must appear in the input | | ''%%|%%''| OR | ''(HELLO%%|%%HI)'' — either string | | ''( )'' | Group | ''(GURU&(HELLO%%|%%HI))'' — nested logic | ==== ARS expressions ==== An expression may include an [[access:requirements|ARS]] in square brackets ''[ ]'' for user-attribute matching. Example: (HELLO&GURU&[LEVEL 20]) Evaluates true only if the user typed both ''HELLO'' and ''GURU'' **and** their security level is 20 or higher. See [[access:requirements|Access Requirements]] for the full ARS syntax. ===== Responses ===== Each expression can be followed by up to **100 responses**, each up to **512 bytes**. The Guru picks one at random from the matching expression's response set. * Responses cannot contain ''('' or '')''. * A response may span multiple lines if each continued line ends with a back-slash ''\''. * The more responses an expression has, the less the Guru repeats himself. ==== Response variables ==== A back-quote (''`'') character followed by one of the variables below substitutes a dynamic value (or performs an action) inline: ^ Variable ^ Meaning ^ | ''`A'' | User's alias (or name, if aliases are not allowed) | | ''`B'' | User's birth date | | ''`C'' | User's computer / host description | | ''`D'' | User's download bytes | | ''`G'' | Guru's name | | ''`I'' | System's QWK ID | | ''`J'' | Current day of month | | ''`L'' | User's [[access:level|security level]] | | ''`M'' | Current month | | ''`N'' | User's note (location, if aliases not allowed) | | ''`O'' | Sysop's name | | ''`P'' | User's phone number | | ''`R'' | User's real name (address, if aliases not allowed) | | ''`S'' | System name | | ''`T'' | Current time | | ''`U'' | User's upload bytes | | ''`W'' | Current day of week | | ''`Y'' | Current year | | ''`Z'' | User's ZIP/postal code | | ''`$'' | User's [[access:credits|credits]] | | ''`#'' | User's age | ==== Action variables (local-only) ==== These have effect only when the user is in **local** chat with the Guru (not in [[config:chat_features#multinode_chat_channels|multinode chat]]): ^ Variable ^ Effect ^ | ''`H'' | Hang up on the user immediately | | ''`Q'' | Quit chat (the only way to exit Guru chat without ''Alt-G'' locally) | | ''`!'' | Toggle the Guru's typing-mistake mode on/off | | ''`_'' | Pause briefly mid-response | ===== Example ===== (HELLO) Hello there, `a... Hi `a, what's new? Hey `a — how's the weather in `n? If a user named //Joey// from //Bigfork, MT// types ''hello'', the Guru randomly picks one of the three responses. ''`a'' is replaced with ''Joey'' and ''`n'' with ''Bigfork, MT''. For more elaborate examples, see the default ''[[dir:ctrl]]/guru.dat'' that ships with Synchronet. ===== See Also ===== * [[:custom:|Customization index]] * [[config:chat_features#artificial_gurus|Configuring Artificial Gurus in SCFG]] * [[access:requirements|Access Requirements (ARS)]] * [[dir:ctrl]] — location of ''guru.dat'' {{tag>guru chat customization}}