rivescript-python
rivescript-python copied to clipboard
Can't access to the variable in object macro after just defining the variable
# in python
> object tempCall python
return 'right'
< object
< object test python
temp_query = rs.get_uservar(rs.current_user(),"temp_query")
print(temp_query)
> object
# in rivescript
+ xyz (x|y|z)
- <set temp_query=answer is <call>tempCall <star></call>
^ <call>test</call>
Output: answer is {_call_}tempCall x{_call_}
I was hoping for 'answer is right' as an output.
How do I make it work? Am I missing something? Please guide me. Thanks!
- <set temp_query=answer is <call>tempCall <star></call>
Unfortunately, this syntax doesn't work; the <call> tag is the very last one processed after tags like <get> and <set> had already been handled.
However, you can set user variables from inside the object macro itself as a workaround:
> object tempCall python
rs.set_uservar( rs.current_user(), "temp_query", "right")
< object
+ xyz (x|y|z)
- <call>tempCall <star></call>
Background: tags are processed using regular expressions and are done in a certain order. The only set of tags that can be nested in arbitrary order are the variable-setter tags like <get>, <set>, <add> and so on; but that's because each of those tags conveniently starts and ends with <angle brackets> so a recursive regexp can handle them from inner-most to outer-most. But tags like <call>...</call> have inner contents and would be more tricky to handle that way.
Thank you for your response! I'll check it out and get back to you.