Esta es una biblioteca de intérprete Rivescript para JavaScript. Rivescript es un lenguaje de secuencias de comandos para Chatterbots, lo que facilita la escritura de pares de activación/respuesta para construir la inteligencia de un bot.
Esta biblioteca se puede usar tanto en un navegador web como en un módulo de nodo. Vea la carpeta eg/
para ver ejemplos.
Rivescript v2.0.0 viene con un refactor masivo de la base de código para implementar características modernas de async/espera en todo momento. El refactor ahora permite características como "almacenar variables de usuario directamente en Redis" o "usar macros asíncronas en condicionales"
Pero necesariamente tuvo que romper una compatibilidad al revés, ¡ligeramente! - Al convertir las funciones previamente sincrónicas como reply()
en async que devuelven promesas como replyAsync()
lo hizo.
Consulte el documento de actualización-V2 para obtener información sobre los cambios y cómo solucionar su código para la nueva versión.
Para NodeJS y otros motores JavaScript similares, puede instalar este módulo en su proyecto a través de NPM:
$ npm install rivescript
Para la web puede usar el impkg:
< script src =" https://unpkg.com/rivescript@latest/dist/rivescript.min.js " > script >
El repositorio GIT para este proyecto incluye el código fuente de ES2015+. Para las compilaciones ES5 dirigidas a navegadores y versiones de nodo más antiguos, verifique la pestaña de lanzamiento. La distribución compilada incluye un directorio lib/
con fuentes ES5 para usar con el nodo <= 6, y un directorio dist/
que contiene un script "navegador" que se puede usar en una página web.
Para usar en la web, simplemente cargue dist/rivescript.min.js
con una etiqueta como de costumbre.
var bot = new RiveScript ( ) ;
// Load a directory full of RiveScript documents (.rive files). This is for
// Node.JS only: it doesn't work on the web!
bot . loadDirectory ( "brain" ) . then ( loading_done ) . catch ( loading_error ) ;
// Load an individual file.
bot . loadFile ( "brain/testsuite.rive" ) . then ( loading_done ) . catch ( loading_error ) ;
// Load a list of files all at once (the best alternative to loadDirectory
// for the web!)
bot . loadFile ( [
"brain/begin.rive" ,
"brain/admin.rive" ,
"brain/clients.rive"
] ) . then ( loading_done ) . catch ( loading_error ) ;
// All file loading operations are asynchronous, so you need handlers
// to catch when they've finished. If you use loadDirectory (or loadFile
// with multiple file names), the success function is called only when ALL
// the files have finished loading.
function loading_done ( ) {
console . log ( "Bot has finished loading!" ) ;
// Now the replies must be sorted!
bot . sortReplies ( ) ;
// And now we're free to get a reply from the brain!
// RiveScript remembers user data by their username and can tell
// multiple users apart.
let username = "local-user" ;
// NOTE: the API has changed in v2.0.0 and returns a Promise now.
bot . reply ( username , "Hello, bot!" ) . then ( function ( reply ) {
console . log ( "The bot says: " + reply ) ;
} ) ;
}
// It's good to catch errors too!
function loading_error ( error , filename , lineno ) {
console . log ( "Error when loading files: " + error ) ;
}
La distribución de rivescript.js incluye un shell de línea de comandos interactivo llamado Riveshell para probar su bot. Toma como argumento la ruta (relativa o absoluta) al "cerebro": la carpeta que contiene sus documentos Rivescript (archivos .rive ).
npm install rivescript
), puede iniciar el shell usando NPX mientras está en la carpeta de su proyecto. Ejemplo: $ npx riveshell /path/to/brain
npm install -g rivescript
), puede iniciar el shell desde cualquier lugar. Ejemplo: $ riveshell /path/to/brain
shell.js
en la raíz del proyecto, utilizando el nodo. Ejemplo usando el cerebro predeterminado que viene en la carpeta EG/ : $ node shell.js /eg/brain
Una vez dentro del shell, puede chatear con el bot utilizando los archivos Rivescript en ese directorio. Para la depuración simple, puede escribir /eval
las líneas únicas de código JavaScript. Ver /help
para más.
El shell acepta algunos parámetros de línea de comando:
--debug
: habilita el registro de depuración detallada.--watch
: mire la carpeta de respuesta para los cambios y vuelva a cargar automáticamente el bot cuando se modifican los archivos.--utf8
: habilita el modo UTF-8.--case
: habilitar mensajes de usuario sensibles a los casos. Hay documentación generada de Markdown y HTML de los módulos en la carpeta DOCS. El módulo principal está en Rivescript.
También consulte el Wiki de la comunidad Rivescript para ver los patrones de diseño comunes y los consejos y trucos para Rivescript.
Hay ejemplos disponibles en el EG/ Directorio de este proyecto en GitHub que muestran cómo interactuar con un bot de Rivescript de varias maneras, como a través de un navegador web o un servidor de Telnet, y otros fragmentos de código y trucos útiles.
Para probar y compartir fragmentos de Rivescript que usan la implementación de JavaScript, consulte el Rivescript Playground.
Es una aplicación web de estilo JSFIDDLE para jugar con Rivescript en su navegador web y compartir código con otros.
https://play.rivescript.com/
La versión 1.0.5 agrega soporte experimental para UTF-8 en documentos Rivescript. Está deshabilitado de forma predeterminada. Habilitarlo pasando un valor true
para la opción utf8
en el constructor.
De manera predeterminada (sin el modo UTF-8 encendido), los desencadenantes solo pueden contener caracteres ASCII básicos (sin caracteres extranjeros), y el mensaje del usuario se despide de todos los caracteres, excepto letras, números y espacios. Esto significa que, por ejemplo, no puede capturar la dirección de correo electrónico de un usuario en una respuesta de rivescript, debido a la @ y. personajes.
Cuando el modo UTF-8 está habilitado, estas restricciones se elevan. Los desencadenantes solo se limitan a no contener ciertos metacharacteres como la barra inalcanzada, y el mensaje del usuario solo se despierta de barras invertidas y corchetes HTML (para proteger de XSS obvio si usa Rivescript en una aplicación web). Además, los caracteres de puntuación comunes se eliminan, con el conjunto predeterminado de ser /[.,!?;:]/g
. Esto se puede anular proporcionando un nuevo objeto RegExp
como el atributo rs.unicodePunctuation
. Ejemplo:
// Make a new bot with UTF-8 mode enabled.
var bot = new RiveScript ( { utf8 : true } ) ;
// Override the punctuation characters that get stripped from the
// user's message.
bot . unicodePunctuation = new RegExp ( / [.,!?;:] / g ) ;
Las etiquetas
en Rivescript capturarán la entrada "sin procesar" del usuario, por lo que puede escribir respuestas para obtener la dirección de correo electrónico del usuario o almacenar caracteres extranjeros en su nombre.
Hasta ahora, esto solo se ha probado cuando se ejecuta bajo el nodo. Cuando se sirva a través de un servidor web, tenga cuidado con el cuidado de que su servidor envíe la codificación de contenido correcto con los archivos de origen de Rivescript ( Content-Type: text/plain; charset=utf-8
).
Una advertencia a tener en cuenta en el modo UTF-8 es que los caracteres de puntuación no se eliminan del mensaje de un usuario, por lo que si incluyen comas o marcos de exclamación, puede afectar la capacidad de correspondencia de sus desencadenantes ( no debe escribir un signo de puntuación explícito En ?
lado de su gatillo ,
Utilizo scripts de ejecución de NPM para manejar varias tareas de compilación.
npm run build
: compila las fuentes ES2015+ de src/
con Babel y las lleva a lib/
npm run test
: construye la fuente con Babel por arriba, construye los scripts de prueba ES2015+ en test/
y los lleva a test.babel/
y luego ejecuta nodeunit
en él.npm run dist
: produce una compilación distribuible completa. La fuente está construida con Babel y luego se entrega a Webpack y Uglify para compilaciones de navegador.npm run webpack
: crea dist/rivescript.js
de las fuentes ES2015+ directamente de src/
(usando babel-loader
). Este comando es independiente de npm run build
y podría ejecutarse sin dejar ningún código ES5 sentado.npm run uglify
- Minifica dist/rivescript.js
a dist/rivescript.min.js
npm run clean
: limpie todos los archivos de compilación.Si su versión de nodo local es> = 7 (admite Async/Wait), puede ejecutar las fuentes ES2015+ directamente sin necesidad de ejecutar Scripts NPM. Para ese propósito, tengo un archivo de make.
make setup
: configure el entorno de desarrollo, instala dependencias, etc.make run
- ejecuta shell.js
señaló el cerebro de ejemplo. Este script se ejecuta de forma nativa en las fuentes ES2015+, no se necesitan pasos de compilación.make test
: ejecuta nodeunit
en las fuentes de prueba ES2015+ directamente sin construirlas como lo haría npm run test
.Me encontré con esto en Fedora 37/Node 18.7.0; La respuesta de Webpack/Webpack#14532 es:
export NODE_OPTIONS=--openssl-legacy-provider
Pasos para el mantenedor NPM de este módulo:
package.json
y src/rivescript.js
Changes.md
npm run dist
para construir las fuentes ES5 y ejecutar pruebas unitarias.npm install ../rivescript-js
)npm login
si es la primera vez en un nuevo sistema, y npm publish
para publicar el módulo a NPM.rm -rf .git node_modules
para eliminar Cruft de la nueva carpeta.zip -r rivescript-js-VERSION.zip rivescript-js
tar -czvf rivescript-js-VERSION.tar.gz rivescript-js
The MIT License (MIT)
Copyright (c) 2020 Noah Petherbridge
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
El sitio web oficial de Rivescript, http://www.rivescript.com/