-
Notifications
You must be signed in to change notification settings - Fork 145
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
How to update trigger an reply dynamic? #399
Comments
This is currently not supported easily but I'd be open for a pull request that would fix this. A long time ago it used to be possible - RiveScript loaded triggers in as a hashmap keyed by the trigger text, so seeing a 'duplicate' trigger would update/merge the data and reloading a bot's replies was possible without needing to fully re-initialize a RiveScript instance from scratch. But this caused some issues with the way %Previous was handled; having two 'identical' triggers that had a different %Previous on each, they'd end up overwriting each other by the trigger text and causing problems; so the module was refactored to load triggers into an array rather than a hash map. The plus side was, 'identical' triggers having different %Previous commands worked since they wouldn't overwrite each other; but attempting to 'reload' triggers just appended the duplicates further down the array where they were overshadowed by the first version that was loaded the first time. A fix for this may look like (probably added to the sortReplies() function): to de-duplicate or merge triggers having the same +Trigger and %Previous value. |
Thanks for your reply, so currently the best practices is stop the bot and then reload it, am i right? |
Yeah - specifically, null out your old RiveScript object and replace it w/ a This may reset user variables in memory though (if you're using the default settings); to make sure recent user variables cross over you can use getUservars()/setUservars(). // get the variables out of your current bot
let vars = await old_bot.getUservars();
let new_bot = new RiveScript();
await new_bot.loadDirectory("replies").then(new_bot.sortReplies);
// set them in the new bot
await new_bot.setUservars(vars);
// use the new bot (replace w/e you store RiveScript in
// with the new variable; the old bot will be garbage collected
// and future replies in your app call the new one now
old_bot = new_bot; |
Ok, In this case, I have 2 questions:
|
rivescript is greate!
ATT, I found the
stream
method, but it seems only append new trigger. I want to update a trigger an reply when the bot is running but not stop it. ThanksThe text was updated successfully, but these errors were encountered: