-= Version française =- & -= English version =- Bot Module - May 98 - par Sylvain HUET [CRYO] ---------- Ce module est un 'bot' (robot). Trois actions : - in : un utilisateur arrive - out : un utilisateur est parti - hear : un utilisateur a dit quelque chose Deux événements : - broad : le bot s'adresse à tout le monde - private : le bot s'adresse à un seul utilisateur Vous pouvez ajouter d'autres événements (éditeur DMI) et les programmer dans kbot.pkg Modification de KBot - July 98 - par Vincent CARON [QUAERIS] -------------------- ***** ***** *** CE MODULE VOUS EST OFFERT PAR QUAERIS *** ** ** *** www.quaeris.com - I-net solutions ! *** ***** ***** Bot programmable ! Utilise des scénarios, gère indépendamment plusieurs utilisateurs, possibilité de commandes personnalisés, configurabilité... Un nouvel événement : - log : garde une trace des événements du bot. Utilisé également pour le débuggage de scénario. Trois nouvelles actions : - !chglogin : signal au bot qu'un utilisateur a changé de pseudo - run : démarre ou redémarre le robot - stop : désactive le robot (redémarrage par COM_start) Liens standards DMS à établir : KBot.broad -> (objet c3d2).broad KBot.private -> (objet term).display KBot.log -> (objet log).log (objet c3d2 object).in -> KBot.in (objet c3d2).out -> KBot.out (objet c3d2).spy -> KBot.hear (objet login).loginchanged -> KBot.!chglogin -------------- | Principiae | -------------- - Le comportement du robot est controllé par un script (appelé scénario). Ce script est stocké dans un fichier. Un script est un ensemble de 'parties', chaque partie décrivant une situtation (un texte est affiché par le robot) et les issues possibles (un jeu de mot-clés), pointeurs vers d'autres parties ! JETEZ UN OEIL AU FICHIER 'exemple.sc' !!! - Le robot cherche des mot-clés (réponses possibles de la partie courante) dans les réponses de l'utilisateur. Si plusieurs mot-clés sont trouvés, le premier est pris en compte. Astuce: vous pouvez utiliser des racines de mot uniquement, comme 'mort'. Le robot reconnaitra alors les mots clés 'mortel', 'mortalité' ... - En plus des mots-clés propres à chaque partie, vous pouvez définir des mots-clés accessibles en permanence. Ils seront définis dans une partie x comme les autres, dont le texte sera ignoré. Il vous suffit alors de déclarer la partie x comme globale (ligne 3 du scénario : 'global x'). | ATTENTION: la partie globale doit toujours être présente. Par défaut, il | convient de laisser une partie vide de texte et de liens, et de faire | pointer le paramètre 'global' vers cette partie. - Le robot gère les utilisateurs indépendamment, en se basant sur leur pseudo. Chaque utilisateur peut avoir un robot complet qui lui est dédié ! Le robot peut garder la trace des utilisateurs même après que ceux-ci se soient déconnectés, et ré-utiliser ces informations à la prochaine connection. (Jusqu'à ce que le serveur soit redémarré...) - a propos des pseudos : avec le module standard 'login', un utilisateur se connecte toujours avec un pseudo 'Guest x'. KBot réagit alors à tout changement de login : si l'utilisateur est reconnu (son pseudo est dans la liste du robot), KBot se retrouvera dans l'état ou l'utilisateur l'a laissé lors de la dernière connection. Lors d'un changement de pseudo, les utilisateurs 'Guest x' sont automatiquement effacés de la liste de KBot. Cette étrange stratégie sera bientot obsolète grâce au module 'loginP' qui utilise une base de donnée pseudo/mot de passe via ODBC. Jetez un oeil sur le paramètre Auto_unregister (ci-dessous) du fichier de configuration. - Le robot comprend plusieurs commandes en plus des mot-clés de la partie courante. Certaines commandes sont toujours disponibles, certaines seulement lorsque le robot est actif. Les raccourcis des commandes sont définis dans le fichier de configuration. Liste des commandes : COM_stop = arrête le robot. Il se taira jusqu'à ce que vous le rappeliez ou que vous le redémarriez (reset). Il peut toujours réagir à certaines commandes. COM_start= rappelle le robot. Le robot reprendra là où il a été arrêté. Il affichera également le texte de la partie courante. COM_reset= redémarre le robot! Il effacera l'historique de l'utilisateur et reprendra le scénario à la partie de départ. COM_help = affiche un fichier d'aide dans une fenêtre. COM_info = infos utilisateur. Sans paramètre, les infos de l'utilisateur courant sont affichés. Si le paramètre est un pseudo connu du robot, des infos à son sujet seront affichées. COM_answers= affiche les mot-clés disponibles (ceux de la partie courante). Les liens ne sont pas affichés. COM_who = affiche la liste des clients connectés au même serveur. On voit en particulier les logins de la cellule 3D courant, et également les logins des autres personnes. COM_say = cette commande permet d'envoyer un message à une personne n'étant pas connectée à la même cellule que l'émetteur. Le premier paramètre est un pseudo d'un client connecté. La liste des pseudos est donnée par la commande COM_who. Le second paramètre est le message à envoyer. JETEZ UN OEIL AU FICHIER 'kbot.cfg' ! - Le robot peut interpréter des 'alias' dans les textes des parties. Ces alias sont également disponibles pour les chaîne du fichier de configuration. : est remplacé par le pseudo de l'utilisateur : affiche le nombre de pseudos connus du robot x: déclenche l'événement x. Cet événement doit être déclaré dans l'éditeur DMI du KBot. Il peut alors être lié à n'importe quelle action d'un autre module. | ATTENTION : doit être placé en fin de ligne, le paramètre x étant donc le dernier mot ! Astuce: si vous voulez téléporter quelqu'un dans une autre cellule 3D ! A l'aide du DMS builder, éditez le module KBot et rajoutez un événement du genre 'tel_macellule'. Liez alors cet événement à l'action 'Entry' du module c3d2 de votre cellule. Vous pouvez maintenant téléporter quelqu'un en tapant le texte suivant dans le scénario : "Allez, on bouge de la ! tel_macellule" Utilisez également pour déclencher des sons, lancer des URL, 'kicker' un utilisateur, lacher un monstre, etc... --------------------------------- | Structure du fichier scenario | --------------------------------- | ATTENTION : LE TEXTE DOIT ETRE AU FORMAT UNIX (Les fins de lignes sont de | simples retour chariot) | ULTRAEDIT recommendé !!! version x <- x=version courante entry x <- x=partie de départ global x <- x=partie "globale" [part] paramètre <- le paramètre est une référence de partie [text] paramètre <- order, cycle ou random blabla1 <- 1er texte blabla2 <- 2e texte ... <- nombre de textes illimité [links] link1 xxx <- lien : mot-clé et référence de partie link2 xxx link3 xxx ... <- nombre de liens illimité [endp] [part] ... [endp] ... Aide sur les codes et les paramètres : ------------------------------ - version : en prévoyance des évolutions du bot, le scénario doit déclarer un numéro de version compatible avec le robot. - entry : désigne la partie de départ du script (référence) - global : désigne la partie contenant les mots-clés globaux. - référence de partie : une partie est référencée par un numéro allant de 1 à 31999. - textes : KBot garde un historique des parties déjà parcourues par les utilisateurs. Ainsi quand un utilisateur accède à une partie déjà connue, le robot peut proposer un texte alternatif. Il y a plusieurs stratégies : order = les textes sont affichés du 1er au dernier, et tout accès ultérieur à la même partie affichera toujours le dernier texte. cycle = les textes sont affichés du 1er au dernier, puis on repart au 1er et ainsi de suite... random = les textes sont choisis au hasard. Remarquez que le 1er texte est toujours affiché lors du 1er accès à la partie. - commentaires : tout ce qui peut se trouver entre les blocks [part]...[endp] est ignoré. Utilisez cet espace ! - a propos de l'analyse syntaxique de KBot : KBot lit le scénario ligne par ligne. Lorsqu'une ligne commence par un tag "[xx]" ou un lien, cette ligne est décomposée en mots, le séparateur principal étant l'espace. Ainsi, une ligne de texte est lue texto, sans séparation de mots. Vous pouvez toujours utiliser les caractères spéciaux (\[space], \n etc.). Un lien qui contient un espace ou autre séparateur DOIT utiliser le code équivalent avec l'antislash. CODES SPECIAUX (type C) : \n : retour chariot \z : caractère NULL \" : guillemet \\ : antislash \xxx : \132 est le caractère de code ASCII 132 Aide sur les messages d'erreur : ------------------------ |IMPORTANT : Si une erreur a lieu, le robot est désactivé. Il vous faudra | alors corriger le script et redémarre le serveur ! - Scenario file not found : Vérifiez le paramètre 'Scenario_file' dans kbot.cfg ! Assurez vous qu'il pointe vers un fichier qui existe. - Unexpected tag : Vous avez fait une faute de grammaire ! Assurez-vous que vous avez respecté l'ordre suivant pour les paramètres : [part] [text] [links] [endp], et qu'aucune ligne ne commence par le caractère '['. - Invalid order parameter : Le code [text] supporte 3 paramètres différents : order, cycle ou random. Assurez-vous également de ne pas l'avoir oublié ! - Unexpected end of file : La définition de la dernière partie du scénario ne comporte vraisemblablement pas de code [endp]. - Wrong scenario version : La version du scenario n'est pas compatible avec le robot ! Vérifiez la version du robot (au démarrage, dans la fenêtre de login du serveur). - Version not found : Vous avez oublié le code 'version' qui doit se trouver en 1ère ligne du fichier de scénario. - Entry not found : Vous avez oublié le code 'entry' qui doit se trouver en 2ème ligne du fichier de scénario. - Invalid part reference : Les références de partie sont des entiers compris entre 1 et 31999. - Part not defined : Un lien utilise une référence de partie non définie ! - Entry part not defined : Le paramètre du code 'entry' (ligne 2 du scénario) n'est pas une référence valide. - Global part not defined : Le paramètre du code 'global' (ligne 3 du scénario) n'est pas une référence valide. ----------------------------------------- | Structure du fichier de configuration | ----------------------------------------- KBot utilise un fichier de configuration. Pas besoin de toucher au code ! Le fichier de configuration est chargé automatiquement au démarrage du serveur. Les paramètres non définis prennent leur valeur par défaut. Le nom du fichier de configuration est défini dans l'éditeur DMI du module (sous DMS builder). Ainsi vous pouvez créer autant de profiles (fichiers de configuration) que de KBots ! Avec le même module, vous pouvez lancer de multiples robots totalement indépendants et différents les uns des autres. Voici les paramètres du fichier de configuration : Bot_name le nom du robot, pseudo dans la chat box Scenario_file nom et chemin du fichier de scénario Help_file nom et chemin du fichier d'aide COM_start active le robot COM_stop désactive the robot COM_reset redémarre le robot (partie de départ, efface l'historique) COM_help affiche le fichier d'aide dans une fenêtre COM_info info utilisateur (paramètre optionnel : pseudo) COM_answers affiche les mot-clés courants MSG_no_answer message = pas de mot-clés trouvés MSG_reset message = redémarrage du robot MSG_already_on message = le robot est déjà actif MSG_login_chg message = changement de pseudo ( contient le nouveau) MSG_stopped message = le robot a été arrêté Auto_display_ans 0/1 = affiche les mot-clés automatiquement Auto_unregister 0/1 = oublie le pseudo à la déconnection Auto_reactivate 0/1 = réactive le robot à la connection (si il a été arrêté par une commande COM_stop lors d'une connection préc.) Auto_reply 0/1 = le robot répond même lorsqu'il n'a pas compris par MSG_no_answer Display_globals 0/1 = affiche les mots-clés globaux (si Auto_display_ans est activé) _debug_ 0/1 = debug exhaustif du chargement de scénario ---------- | Auteur | ---------- Vincent Caron [QUAERIS] vcaron@quaeris.com ou Vincent.Caron@ecl1999.ec-lyon.fr _______________________________________________________________________________ Bot Module - May 98 - by Sylvain HUET [CRYO] ---------- This module is a bot module : Three actions : - in : a user is coming - out : a user has left - hear : some user said something Two main events : - broad : the bot says something to everyone - private : the bot says something to only one user You can add other events (dmi editor) and program them in kbot.pkg. Look at the custom event manager below ! Modification to KBot - July 98 - by Vincent CARON [QUAERIS] -------------------- ***** ***** *** THIS PACKAGE IS BROUGHT TO YOU BY QUAERIS *** ** ** *** www.quaeris.com - I-net solutions ! *** ***** ***** Programmable bot ! Supports scenario files, multi-independant-users, customised commands... One more event : - log : logs bot actions. Also used for scenario debugging. Three new actions : - !chglogin : signals the bot that a login changed. - run : restart or start the robot - stop : stops the robot (reactivate with COM_start) DMS standard links : KBot.broad -> (c3d2 object).broad KBot.private -> (term object).display KBot.log -> (log object).log (c3d2 object).in -> KBot.in (c3d2 object).out -> KBot.out (c3d2 object).spy -> KBot.hear (login object).loginchanged -> KBot.!chglogin -------------- | Principiae | -------------- - The behaviour of the robot is controlled by a script (called scenario). The script is stored in a file. A script is a set of 'parts', each part desc- ribing a situtation (a text displayed by the robot) and the possible new issues (set of answers) pointing to other parts ! HAVE A LOOK AT THE 'example.sc' FILE !!! - The robot search for keywords (possible answers of the current part) in client answers. If several keywords are found, the first one is taken into account. Trick: you can use word roots only, such as 'comput'. The robot will recognize 'compute' 'computing' 'computers' 'computationnal'... - You can defines 'global keywords' that are available independently of the current user part. These keywords are defined as normal links in a part which texts will be ignored. This special part is referenced by the global parameter (3rd line of the scenario). | WARNING: The 'global part' must always be present. If not needed, just | leave one without any text or link, and reference it with the global | parameter. About the global parts : its links define the so-called 'global keywords'. They point out another part. - The robot manages users independently, based on the user login. Every user can have a whole robot dedicated to itself ! The robot can keep the track of users even after logging out, and re-use it at next login. (Until the server is restarted...) - about logins : with the standard 'login' module, a user always log in with an anonymous 'Guest x' login. KBot then handles any login change : if the user is recognized (his login is in the KBot client list), KBot restart from the last state for the user. During login change, 'Guest x' logins are removed from the KBot client list. This strange strategy is a bit weird, but it will be much butter with the future loginP module from Cryo, using a login/password database manager ! Have a look at the Auto_unregister parameter below. - The robot understands commands and the keywords of the current user part. Some commands are always available, some are only available if the robot is turned on. - available commands are : COM_stop = stop the robot. It will keep quiet until you call it back or you reset it. It still reacts to some commands. COM_start= call back the robot. The robot restarts from the point where it stopped. It will also display the current part. COM_reset= reset the robot! It will clean user's history and restart from the entry part. COM_help = display the help file in a standalone window. COM_info = display user info. If there's no parameter, info about the client is displayed. If the parameter is a known login (that is registered in the KBot client list), info a bout the corresponding user is displayed. COM_answers= display available keywords for current client. Links are not displayed. COM_who = displays all clients connected to the same server. At least clients connected to the current 3D cell are listed. COM_say = sends a message to a person which is not necessarily connected to the same chat module (or 3D cell). First parameter is a pseudo (taken from the COM_who result) and second is the message. HAVE A LOOK AT THE 'kbot.cfg' FILE ! - The robot can interpret aliases in the part strings. These aliases are still available in the configuration strings (see 'kbot.cfg'). : replaced with user login : displays the number of bot known clients x: triggers the x event. The 'x' event has to be declared in the KBot DMI editor, and then can be linked to any action. | WARNING : the tag must be at the end of a line, the x parameter being thus the last word ! Trick: if you want to teleport someone to another 3D cell in your world ! With de DMS builder, edit the KBot module and add an event such as 'tel_mycell'. Then link this event to the 'Entry' action of your cell's c3d2 object. You can now teleport someone by a KBot text like "Let's warp to another world ! tel_mycell". Text will be displayed without the tag and its parameter ! You can also use the tag in order to play sounds, send and view URLs, 'kick' a user, release a monster and so on ! ---------------------------------- | Structure of the scenario file | ---------------------------------- | WARNING : THE SCENARIO TEXT MUST BE UNIX STYLE !!! (lines end with a | chariot return) | ULTRAEDIT recommended !!! version x <- x=current version entry x <- x=start part reference global x <- x="global" part reference [part] parameter <- parameter is the part reference [text] parameter <- parameter is order,cycle or random blabla1 <- 1st text blabla2 <- 2nd text ... <- any number of texts [links] link1 xxx <- link: keyword and part reference link2 xxx link3 xxx ... <- any number of links [endp] [part] ... [endp] ... Help on tags and parameters : --------------------- - version : to support bot evolutions, the scenario script version must be declared. - entry : select starting part of scenario (start=user login or bot reset) - global : select the part containing the global keywords. - part reference : this is a number from 1 to 31999 - texts : KBot keep an history of the parts the user already entered in, and use it to display different texts for one part. There are three ways to choose the display order (in time) of these texts : order = texts are displayed from 1st to last, and only last text is displayed at further access to this part. cycle = texts are displayed from 1st to last, then from 1st part and so on... random = texts are choosen at random. Note that the 1st text is displayed at the 1st part access. - comments : any text between [part]...[endp] part definitions is ignored, so use this space ! - about the syntax analysis of KBot : KBot reads the scenario line by line. When a line begins with a tag or a link keyword, this line is decomposed into words, the main separator being the space character. Thus, a line of text is read as is, without any word separation. You still can use special characters (\[space], \n etc.). A link which contains a space or another separator MUST use the equivalent code with the antislash. SPECIAL CODES (C type) : \n : chariot return \z : NULL character \" : \\ : antislash \xxx : \132 is the character code ASCII 132 Help on error messages : ---------------- |IMPORTANT : if an error occurs, the bot will not be active. You have to | correct your scenario, and then restart the server ! - Scenario file not found : Have a look at the 'Scenario_file' tag in kbot.cfg ! - Unexpected tag : You made a grammatical error ! Make sure that you respected the following order for a part : [part] [text] [links] [endp], and that you don't have any line beginning with the '[' character ! - Invalid order parameter : The [text] tag supports only 3 parameters : 'order', 'cycle' and 'random'. Make sure you didn't forget it. - Unexpected end of file : Your last part definition must lack the [endp] tag. - Wrong scenario version : Your scenario is not supported by this version of KBot ! Check the robot version (at login start). - Version not found : You forgot the 'version' tag which must be placed on the first line. - Entry not found : You forgot the 'entry' tag which must be placed on the 2nd line. - Invalid part reference : Part references are integer numbers between 1 and 31999. - Part not defined : A link uses a part reference number which doesn't correspond to a known part. - Entry part not defined : The parameter of the entry tag (line 2 of scenario) is not a valid part reference. - Global part not defined : The parameter of the global tag (line 3 of scenario) is not a valid part reference. --------------------------------------- | Structure of the configuration file | --------------------------------------- KBot uses a configuration file for customisation... No need to touch the code! The configuration file is loaded at bot server start. The name of the configuration file is defined in the DMI editor of the KBot module (in the DMS builder). Thus you can create as many profiles (configuration files) as KBot robots ! With the same module, you can launch multiple, different and independant robots. Here are the available parameters : Bot_name bot name used to identify in the chat box Scenario_file file name and path from partition folder Help_file file name and path from partition folder COM_start (re)activates the robot COM_stop disable the robot COM_reset restarts the robot (from entry part, clean client history) COM_help displays help file in a window COM_info displays info (can use a login as parameter) COM_answers displays current keywords (possible answers) MSG_no_answer message = keyword not found MSG_reset message = robot restarting MSG_already_on message = robot already active MSG_login_chg message = client changed login ( is new login) MSG_stopped message = robot disabled Auto_display_ans 0/1 = display keywords automatically Auto_unregister 0/1 = unregister client at log out (that is, forget it!) Auto_reactivate 0/1 = reactivate robot for client at login (if stopped with a COM_stop command in previous session) Auto_reply 0/1 = robot always answer (MSG_unknown if not understood) Display_globals 0/1 = display global keywords (if Auto_display_ans is enabled) _debug_ 0/1 = verbose debug of scenario loading ---------- | Author | ---------- Vincent Caron [QUAERIS] vcaron@quaeris.com or Vincent.Caron@ecl1999.ec-lyon.fr