这是一个 JavaScript 的 RiveScript 解释器库。 RiveScript 是聊天机器人的脚本语言,可以轻松编写触发器/响应对来构建机器人的智能。
该库既可以在 Web 浏览器中使用,也可以作为 Node 模块使用。有关示例,请参阅eg/
文件夹。
RiveScript v2.0.0 对代码库进行了大规模重构,以实现现代的 Async/Await 功能。重构现在允许“直接在 Redis 中存储用户变量”或“在条件中使用异步宏”等功能
但它必然会破坏一些向后兼容性——稍微破坏一下! -- 将以前的同步函数(如reply()
转变为异步函数,并像replyAsync()
那样返回Promises。
有关更改以及如何修复新版本代码的信息,请参阅 Upgrading-v2 文档。
对于nodejs和其他类似的JavaScript引擎,您可以通过npm在项目中安装此模块:
$ npm install rivescript
对于网络,您可以使用 unpkg:
< script src =" https://unpkg.com/rivescript@latest/dist/rivescript.min.js " > script >
该项目的 git 存储库包含 ES2015+ 源代码。对于针对旧版浏览器和 Node 版本的 ES5 构建,请检查“发布”选项卡。编译后的发行版包括一个lib/
目录,其中包含可与节点 <= 6 一起使用的 ES5 源代码,以及一个包含可在网页上使用的“浏览器化”脚本的dist/
目录。
要在网络上使用,只需像平常一样使用标签加载
dist/rivescript.min.js
即可。
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 ) ;
}
RiveScript.js 的发行版包含一个名为riveshell的交互式命令行 shell,用于测试 RiveScript 机器人。它将“大脑”的路径(相对或绝对)作为参数 - 包含 RiveScript 文档( .rive文件)的文件夹。
npm install rivescript
),则可以在项目文件夹中使用npx启动 shell。例子: $ npx riveshell /path/to/brain
npm install -g rivescript
)全局安装了 RiveScript,则可以从任何地方启动 shell。例子: $ riveshell /path/to/brain
shell.js
启动 shell。使用eg/文件夹中的默认大脑的示例: $ node shell.js /eg/brain
进入 shell 后,您可以使用该目录中的 RiveScript 文件与机器人聊天。为了进行简单的调试,您可以键入/eval
来运行单行 JavaScript 代码。请参阅/help
了解更多信息。
shell 接受一些命令行参数:
--debug
:启用详细调试日志记录。--watch
:监视回复文件夹中的更改,并在文件修改时自动重新加载机器人。--utf8
:启用 UTF-8 模式。--case
:启用区分大小写的用户消息。 docs 文件夹中生成了模块的 Markdown 和 HTML 文档。主要模块位于 rivescript。
另请查看RiveScript 社区 Wiki ,了解 RiveScript 的常见设计模式以及提示和技巧。
GitHub 上该项目的 eg/ 目录中提供了示例,展示了如何以多种方式(例如通过 Web 浏览器或 telnet 服务器)与 RiveScript 机器人交互,以及其他代码片段和有用的技巧。
要测试和共享使用 JavaScript 实现的 RiveScript 片段,请查看 RiveScript Playground。
它是一个 JSFiddle 风格的 Web 应用程序,用于在 Web 浏览器中使用 RiveScript 并与其他人共享代码。
https://play.rivescript.com/
1.0.5 版在 RiveScript 文档中添加了对 UTF-8 的实验性支持。默认情况下它是禁用的。通过在构造函数中传递utf8
选项的true
值来启用它。
默认情况下(未启用 UTF-8 模式),触发器只能包含基本 ASCII 字符(无外来字符),并且用户的消息将去除除字母、数字和空格之外的所有字符。这意味着,例如,您无法在 RiveScript 回复中捕获用户的电子邮件地址,因为 @ 和 .人物。
启用 UTF-8 模式后,这些限制将被解除。触发器仅限于不包含某些元字符,例如反斜杠,并且用户消息仅去除反斜杠和 HTML 尖括号(如果您在 Web 应用程序中使用 RiveScript,则可以防止明显的 XSS)。此外,常见的标点符号被删除,默认设置为/[.,!?;:]/g
。这可以通过提供新的RegExp
对象作为rs.unicodePunctuation
属性来覆盖。例子:
// 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 ) ;
RiveScript 中的
标签将捕获用户的“原始”输入,因此您可以编写回复来获取用户的电子邮件地址或在其姓名中存储外来字符。
到目前为止,仅在 Node 下运行时进行了测试。通过 Web 服务器提供服务时,请特别注意您的服务器使用 RiveScript 源文件发送正确的内容编码 ( Content-Type: text/plain; charset=utf-8
)。
在 UTF-8 模式下需要注意的一个警告是,标点符号不会从用户的消息中删除,因此如果它们包含逗号或感叹号,它可能会影响触发器的匹配能力(您绝对不应该编写明确的标点符号)即使启用了 UTF-8 模式,触发器也不应包含?
或 等符号,
虽然现在可能有效,但未来的更新可能会严格执行此操作。
我使用 npm run 脚本来处理各种构建任务。
npm run build
- 使用 Babel 从src/
编译 ES2015+ 源并将其输出到lib/
npm run test
- 根据上述内容使用 Babel 构建源代码,在test/
中构建 ES2015+ 测试脚本并将其输出到test.babel/
中,然后在其上运行nodeunit
。npm run dist
- 生成完整的可分发版本。源代码是使用 Babel 构建的,然后交给 webpack 和 uglify 进行浏览器构建。npm run webpack
- 直接从src/
中的 ES2015+ 源创建dist/rivescript.js
(使用babel-loader
)。该命令独立于npm run build
,并且可以在不留下任何 ES5 代码的情况下运行。npm run uglify
- 将dist/rivescript.js
缩小为dist/rivescript.min.js
npm run clean
- 清理所有构建文件。如果您的本地 Node 版本 >= 7(支持 Async/Await),您可以直接运行 ES2015+ 源,无需运行任何 npm 脚本。为此,我有一个 Makefile。
make setup
- 设置开发环境,安装依赖项等。make run
- 运行指向示例大脑的shell.js
。该脚本在 ES2015+ 源上本机运行,无需构建步骤。make test
- 直接在 ES2015+ 测试源上运行nodeunit
,而无需像npm run test
那样构建它们。我在 Fedora 37/node 18.7.0 上遇到了这个问题; webpack/webpack#14532 的答案是:
export NODE_OPTIONS=--openssl-legacy-provider
该模块的 npm 维护者的步骤:
package.json
和src/rivescript.js
中的版本号Changes.md
npm run dist
来构建 ES5 源代码并运行单元测试。npm install ../rivescript-js
)npm login
,然后npm publish
将模块发布到 NPM。rm -rf .git node_modules
从新文件夹中删除 cruft。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.
RiveScript 官方网站,http://www.rivescript.com/