هذه مكتبة مترجم RiveScript لجافا سكريبت. RiveScript هي لغة برمجة نصية لروبوتات الدردشة، مما يجعل من السهل كتابة أزواج التشغيل/الاستجابة لبناء ذكاء الروبوت.
يمكن استخدام هذه المكتبة في متصفح الويب أو كوحدة Node. راجع المجلد eg/
للحصول على أمثلة.
يأتي RiveScript v2.0.0 مزودًا بإعادة بناء ضخمة لقاعدة التعليمات البرمجية لتنفيذ ميزات Async/Await الحديثة في كل مكان. يسمح المُعاد البناء الآن بميزات مثل "تخزين متغيرات المستخدم مباشرة في Redis" أو "استخدام وحدات الماكرو غير المتزامنة في الشروط"
ولكن كان لا بد من كسر بعض التوافق مع الإصدارات السابقة - قليلاً! - عن طريق تحويل الوظائف المتزامنة مسبقًا مثل reply()
إلى وظائف غير متزامنة تُرجع وعودًا مثلما فعل replyAsync()
.
راجع مستند Upgrading-v2 للحصول على معلومات حول التغييرات وكيفية إصلاح التعليمات البرمجية الخاصة بك للإصدار الجديد.
بالنسبة لـNodejs ومحركات JavaScript الأخرى المشابهة، يمكنك تثبيت هذه الوحدة في مشروعك من خلال npm:
$ npm install rivescript
بالنسبة للويب، يمكنك استخدام unpkg:
< script src =" https://unpkg.com/rivescript@latest/dist/rivescript.min.js " > script >
يتضمن مستودع git لهذا المشروع كود مصدر ES2015+. بالنسبة لإصدارات ES5 التي تستهدف المتصفحات الأقدم وإصدارات Node، تحقق من علامة تبويب الإصدارات. يتضمن التوزيع المترجم دليل lib/
مع مصادر ES5 لاستخدامه مع العقدة <= 6، ودليل 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 لاختبار روبوت RiveScript الخاص بك. يأخذ كوسيطة المسار (نسبي أو مطلق) إلى "الدماغ" - المجلد الذي يحتوي على مستندات RiveScript (ملفات .rive ).
npm install rivescript
)، فيمكنك بدء تشغيل الصدفة باستخدام npx أثناء وجودك في مجلد المشروع الخاص بك. مثال: $ npx riveshell /path/to/brain
npm install -g rivescript
)، فيمكنك بدء تشغيل الصدفة من أي مكان. مثال: $ riveshell /path/to/brain
shell.js
في جذر المشروع، باستخدام العقدة. مثال باستخدام العقل الافتراضي الذي يأتي في المجلد eg/ : $ node shell.js /eg/brain
بمجرد دخولك إلى الصدفة، يمكنك الدردشة مع الروبوت باستخدام ملفات RiveScript الموجودة في هذا الدليل. لتصحيح الأخطاء البسيط، يمكنك كتابة /eval
لتشغيل أسطر فردية من تعليمات JavaScript البرمجية. انظر /help
للمزيد.
تقبل الصدفة بعض معلمات سطر الأوامر:
--debug
: تمكين تسجيل التصحيح المطول.--watch
: شاهد مجلد الرد لمعرفة التغييرات وأعد تحميل الروبوت تلقائيًا عند تعديل الملفات.--utf8
: تمكين وضع UTF-8.--case
: تمكين رسائل المستخدم الحساسة لحالة الأحرف. يتم إنشاء وثائق Markdown وHTML للوحدات النمطية الموجودة في مجلد المستندات. الوحدة الرئيسية موجودة في rivscript.
راجع أيضًا RiveScript Community Wiki للتعرف على أنماط التصميم الشائعة والنصائح والحيل الخاصة بـ RiveScript.
هناك أمثلة متوفرة في دليل eg/ لهذا المشروع على GitHub والتي توضح كيفية التفاعل مع روبوت RiveScript بعدة طرق - مثل متصفح الويب أو خادم telnet - ومقتطفات التعليمات البرمجية الأخرى والحيل المفيدة.
لاختبار ومشاركة مقتطفات RiveScript التي تستخدم تطبيق JavaScript، قم بمراجعة RiveScript Playground.
إنه تطبيق ويب على طراز JSFiddle للعب باستخدام RiveScript في متصفح الويب الخاص بك ومشاركة التعليمات البرمجية مع الآخرين.
https://play.rivescript.com/
يضيف الإصدار 1.0.5 دعمًا تجريبيًا لـ UTF-8 في مستندات RiveScript. يتم تعطيله بشكل افتراضي. قم بتمكينه عن طريق تمرير قيمة true
لخيار utf8
في المُنشئ.
افتراضيًا (بدون تشغيل وضع UTF-8)، قد تحتوي المشغلات فقط على أحرف ASCII الأساسية (بدون أحرف أجنبية)، ويتم تجريد رسالة المستخدم من جميع الأحرف باستثناء الأحرف والأرقام والمسافات. وهذا يعني أنه، على سبيل المثال، لا يمكنك التقاط عنوان البريد الإلكتروني للمستخدم في رد RiveScript، بسبب @ و. الشخصيات.
عند تمكين وضع UTF-8، يتم رفع هذه القيود. تقتصر المشغلات فقط على عدم احتوائها على أحرف أولية معينة مثل الشرطة المائلة العكسية، ويتم تجريد رسالة المستخدم فقط من الخطوط المائلة العكسية وأقواس HTML الزاوية (للحماية من XSS الواضح إذا كنت تستخدم RiveScript في تطبيق ويب). بالإضافة إلى ذلك، يتم إزالة أحرف الترقيم الشائعة، وتكون المجموعة الافتراضية هي /[.,!?;:]/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. عند العرض من خلال خادم ويب، انتبه جيدًا إلى أن خادمك يرسل ترميز المحتوى الصحيح باستخدام ملفات مصدر RiveScript ( Content-Type: text/plain; charset=utf-8
).
أحد التحذيرات التي يجب الانتباه إليها في وضع UTF-8 هو أن أحرف الترقيم لا تتم إزالتها من رسالة المستخدم، لذلك إذا كانت تتضمن فواصل أو علامات تعجب، فقد يؤثر ذلك على قدرة المطابقة للمشغلات (يجب عليك عدم كتابة علامة ترقيم صريحة على الإطلاق ) على جانب المشغل الخاص بك، يجب ألا تحتوي على رموز مثل ?
أو ,
حتى مع تمكين وضع UTF-8، وعلى الرغم من أن ذلك قد يعمل الآن، فمن المحتمل أن يفرض التحديث المستقبلي هذا بشكل صارم).
أستخدم البرامج النصية لتشغيل npm للتعامل مع مهام البناء المختلفة.
npm run build
- يجمع مصادر ES2015+ من src/
باستخدام Babel ويخرجها إلى lib/
npm run test
- ينشئ المصدر باستخدام Babel الموضح أعلاه، ويبني نصوص اختبار ES2015+ في test/
ويخرجها إلى test.babel/
ثم يقوم بتشغيل nodeunit
عليه.npm run dist
- ينتج بنية كاملة قابلة للتوزيع. تم إنشاء المصدر باستخدام Babel ثم تم تسليمه إلى webpack وuglify لإنشاءات المتصفح.npm run webpack
- ينشئ dist/rivescript.js
من مصادر ES2015+ مباشرة من src/
(باستخدام babel-loader
). هذا الأمر مستقل عن npm run build
ويمكن تشغيله دون ترك أي كود ES5.npm run uglify
- تصغير dist/rivescript.js
إلى dist/rivescript.min.js
npm run clean
- تنظيف جميع ملفات البناء.إذا كان إصدار العقدة المحلي الخاص بك >= 7 (يدعم Async/Await)، فيمكنك تشغيل مصادر ES2015+ مباشرة دون الحاجة إلى تشغيل أي برامج نصية npm. لهذا الغرض، لدي Makefile.
make setup
- إعداد بيئة التطوير، وتثبيت التبعيات، وما إلى ذلك.make run
- يشير تشغيل shell.js
إلى مثال الدماغ. يعمل هذا البرنامج النصي أصلاً على مصادر ES2015+، دون الحاجة إلى خطوات إنشاء.make test
- تشغيل nodeunit
على مصادر اختبار ES2015+ مباشرة دون بنائها كما يفعل 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
لإزالة الملفات من المجلد الجديد.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/