Esta é uma biblioteca interpretadora RiveScript para JavaScript. RiveScript é uma linguagem de script para chatterbots, facilitando a escrita de pares de gatilho/resposta para desenvolver a inteligência de um bot.
Esta biblioteca pode ser usada tanto em um navegador web quanto como um módulo Node. Veja a pasta eg/
para exemplos.
RiveScript v2.0.0 vem com uma refatoração massiva da base de código para implementar recursos modernos de Async/Await por toda parte. O refatorador agora permite recursos como “armazenar variáveis de usuário diretamente no Redis” ou “usar macros assíncronas em condicionais”
Mas necessariamente teve que quebrar alguma compatibilidade com versões anteriores - um pouco! - transformando funções anteriormente síncronas como reply()
em funções assíncronas que retornam promessas como replyAsync()
fez.
Consulte o documento Upgrading-v2 para obter informações sobre as alterações e como corrigir seu código para a nova versão.
Para nodejs e outros mecanismos JavaScript semelhantes, você pode instalar este módulo em seu projeto através do npm:
$ npm install rivescript
Para a web você pode usar o unpkg:
< script src =" https://unpkg.com/rivescript@latest/dist/rivescript.min.js " > script >
O repositório git para este projeto inclui o código-fonte ES2015+. Para compilações ES5 direcionadas a navegadores mais antigos e versões do Node, verifique a guia Releases. A distribuição compilada inclui um diretório lib/
com fontes ES5 para usar com o nó <= 6, e um diretório dist/
contendo um script "browserified" que pode ser usado em uma página web.
Para usar na web, basta carregar dist/rivescript.min.js
com uma tag como de costume.
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 ) ;
}
A distribuição do RiveScript.js inclui um shell de linha de comando interativo chamado riveshell para testar seu bot RiveScript. Toma como argumento o caminho (relativo ou absoluto) para o "cérebro" - a pasta que contém seus documentos RiveScript (arquivos .rive ).
npm install rivescript
), você pode iniciar o shell usando npx enquanto estiver na pasta do projeto. Exemplo: $ npx riveshell /path/to/brain
npm install -g rivescript
), poderá iniciar o shell de qualquer lugar. Exemplo: $ riveshell /path/to/brain
shell.js
na raiz do projeto, usando node. Exemplo usando o cérebro padrão que vem na pasta eg/ : $ node shell.js /eg/brain
Uma vez dentro do shell você pode conversar com o bot usando os arquivos RiveScript nesse diretório. Para depuração simples, você pode digitar /eval
para executar linhas únicas de código JavaScript. Veja /help
para mais.
O shell aceita alguns parâmetros de linha de comando:
--debug
: ativa o registro de depuração detalhado.--watch
: monitore a pasta de resposta em busca de alterações e recarregue automaticamente o bot quando os arquivos forem modificados.--utf8
: ativa o modo UTF-8.--case
: ativa mensagens de usuário que diferenciam maiúsculas de minúsculas. É gerada documentação Markdown e HTML dos módulos na pasta docs. O módulo principal está em rivescript.
Verifique também o Wiki da comunidade RiveScript para padrões de design comuns e dicas e truques para RiveScript.
Existem exemplos disponíveis no diretório eg/ deste projeto no GitHub que mostram como interagir com um bot RiveScript de várias maneiras - como por meio de um navegador da web ou de um servidor telnet - e outros trechos de código e truques úteis.
Para testar e compartilhar trechos do RiveScript que usam a implementação do JavaScript, confira o RiveScript Playground.
É um aplicativo da web estilo JSFiddle para brincar com o RiveScript em seu navegador e compartilhar código com outras pessoas.
https://play.rivescript.com/
A versão 1.0.5 adiciona suporte experimental para UTF-8 em documentos RiveScript. Ele está desabilitado por padrão. Habilite-o passando um valor true
para a opção utf8
no construtor.
Por padrão (sem o modo UTF-8 ativado), os gatilhos podem conter apenas caracteres ASCII básicos (sem caracteres estrangeiros), e a mensagem do usuário é despojada de todos os caracteres, exceto letras, números e espaços. Isso significa que, por exemplo, você não pode capturar o endereço de e-mail de um usuário em uma resposta do RiveScript, por causa dos caracteres @ e . personagens.
Quando o modo UTF-8 está ativado, essas restrições são suspensas. Os gatilhos são limitados apenas a não conter certos metacaracteres, como a barra invertida, e a mensagem do usuário só é despojada de barras invertidas e colchetes angulares HTML (para proteger contra XSS óbvio se você usar RiveScript em um aplicativo da web). Além disso, os caracteres de pontuação comuns são eliminados, sendo o conjunto padrão /[.,!?;:]/g
. Isso pode ser substituído fornecendo um novo objeto RegExp
como o atributo rs.unicodePunctuation
. Exemplo:
// 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 ) ;
As tags
no RiveScript capturarão a entrada "bruta" do usuário, para que você possa escrever respostas para obter o endereço de e-mail do usuário ou armazenar caracteres estrangeiros em seu nome.
Até agora, isso só foi testado quando executado no Node. Quando servido por meio de um servidor web, tome cuidado extra para que seu servidor envie a codificação de conteúdo correta com os arquivos de origem RiveScript ( Content-Type: text/plain; charset=utf-8
).
Uma ressalva a ser observada no modo UTF-8 é que os caracteres de pontuação não são removidos da mensagem de um usuário, portanto, se eles incluírem vírgulas ou pontos de exclamação, isso poderá afetar a capacidade de correspondência de seus gatilhos (você absolutamente não deve escrever um sinal de pontuação explícito no lado do seu gatilho NÃO devem conter símbolos como ?
ou ,
mesmo com o modo UTF-8 ativado e, embora isso possa funcionar agora, uma atualização futura provavelmente imporá isso rigidamente).
Eu uso scripts de execução npm para lidar com várias tarefas de construção.
npm run build
- Compila os fontes ES2015+ de src/
com Babel e os envia para lib/
npm run test
- Constrói a fonte com Babel conforme acima, cria os scripts de teste ES2015+ em test/
e os envia para test.babel/
e então executa nodeunit
nele.npm run dist
- Produz uma compilação distribuível completa. O código-fonte é construído com Babel e depois transferido para webpack e uglify para compilações de navegador.npm run webpack
- Cria dist/rivescript.js
a partir das fontes ES2015+ diretamente de src/
(usando babel-loader
). Este comando é independente do npm run build
e pode ser executado sem deixar nenhum código ES5 parado.npm run uglify
- Minifica dist/rivescript.js
para dist/rivescript.min.js
npm run clean
– Limpe todos os arquivos de construção.Se a sua versão local do Node for >= 7 (suporta Async/Await), você pode executar as fontes ES2015+ diretamente sem precisar executar nenhum script npm. Para isso, tenho um Makefile.
make setup
- configura o ambiente de desenvolvimento, instala dependências, etc.make run
- executa shell.js
apontado para o cérebro do exemplo. Este script é executado nativamente nas fontes ES2015+, sem necessidade de etapas de construção.make test
- executa nodeunit
nas fontes de teste ES2015+ diretamente, sem compilá-las como faria npm run test
.Encontrei isso no Fedora 37/node 18.7.0; a resposta de webpack/webpack#14532 é:
export NODE_OPTIONS=--openssl-legacy-provider
Etapas para o mantenedor npm deste módulo:
package.json
e src/rivescript.js
Changes.md
npm run dist
para construir as fontes ES5 e executar testes de unidade.npm install ../rivescript-js
)npm login
se for a primeira vez em um novo sistema e npm publish
para publicar o módulo no NPM.rm -rf .git node_modules
para remover o lixo da nova pasta.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.
O site oficial do RiveScript, http://www.rivescript.com/