2017-12-28 91 views
6

मेरा बॉट डेटाबेस में उपयोगकर्ता का नाम संग्रहीत करता है, और समय-समय पर, डेटाबेस सत्र को "सेटनाम उपयोगकर्ता नाम" संदेश भेजता है। नमूना rivescript:Rivescript-Python में एक विशेष ट्रिगर को प्रीप्रोसेस कैसे करें?

+ setname * 
- <set name=<formal>> 

+ (what is my name|who am i) 
- You're <get name>, right? 

+ didntlike 
- {topic=nlike}Why? 

> topic nlike 

+ * 
- {topic=random}Thanks for charing. 

< topic 

+ * 
- I don't have a reply for that. 
- Try asking that a different way. 

उपयोगकर्ता Nlike 'है कि * द्वारा बाहर निकल गया है की तरह एक विषय में है और मैं संदेश भेज नाम सेट करने के लिए जब समस्या है, तो बातचीत विषय बाहर निकालता है।

अपेक्षित बातचीत:

Me: hello 
Bot: I don't have a reply for that. 
Me: didntlike 
Bot: Why? 
Me: setname John 
Bot: 
Me: I didn't like because you are ugly. 
Bot: Thanks for charing. 
Me: Who am I? 
Bot: You're John, right? 

वहाँ कि शुरू ब्लॉक में इलाज के लिए कोई तरीका है? मैंने विभिन्न वाक्यविन्यासों की कोशिश की, लेकिन कोई सकारात्मक नतीजा नहीं। मैं की तरह कुछ के बारे में सोचा:

> begin 

+ setname * 
- <set name=<formal>> 

+ request 
- {ok} 

< begin 

एक वैकल्पिक हल सभी विषयों के अंदर एक ही ट्रिगर जोड़ने के लिए है, लेकिन मैं एक बेहतर समाधान की जरूरत है, क्योंकि उस दृष्टिकोण त्रुटियों की संभावना है के रूप में मेरे Rive फ़ाइलों बड़ा मिलता है।

==== कोड नेल्सन जवाब ===== के आधार पर की कोशिश की

> begin 
    + request 
    - {ok}{topic=specialtriggers} 
< begin 

> topic specialtriggers 

+ setname * 
- <set name=<formal>> 

< topic 

+ (what is my name|who am i) 
- You're <get name>, right? 

+ didntlike 
- {topic=nlike}Why? 

> topic nlike 

+ * 
- {topic=random}Thanks for charing. 

< topic 

+ * 
- I don't have a reply for that. 
- Try asking that a different way. 

मैं विषय से {ठीक} {विषय = specialtriggers} बनाने इस विषय के बाहर सभी ट्रिगर असफल जोड़ने लगता है। प्रीप्रोकैसिंग के बाद, रिवर्सक्रिप्ट को जवाब देना चाहिए कि यह एक विशेष ट्रांसफर है या फिर सामान्य ट्रिगर्स की खोज करें।

+1

मुझे समझ नहीं आता कि आप क्या उम्मीद करते हैं बातचीत जाना। क्या आप बिंदु को और ठोस बनाने के लिए कुछ उदाहरण वाक्य दे सकते हैं? क्या आप एक वैध चरित्र के रूप में स्टार के साथ 'setname *' संदेश दर्ज करना चाहते हैं, ट्रिगर नहीं? –

+0

हां। मैं इस संदेश को प्रीप्रोसेस करने के लिए प्रारंभ ब्लॉक का उपयोग करने की उम्मीद करता हूं। जब भी मैं 'सेटनाम जॉन' कहता हूं, तो मैं चर 'नाम' को 'जॉन' पर सेट करूंगा। यह उपयोगी है क्योंकि मुझे मेरी .rive फ़ाइलों के प्रत्येक विषय में ट्रिगर 'setname *' को दोहराना नहीं है। मैं कुछ आसान कह सकता हूं: 'करीबी' और यह राइव नियमों में प्रवेश न करने का जवाब देता है। – StaticX

उत्तर

0

जवाब पर chatbots.org, एक व्यवहार्य समाधान विषय विरासत उपयोग कर रहा है Noah Petherbridge's response के आधार पर:

> topic specialtriggers 
    + setname *{weight=9991234} 
    - <set name=<star1>> 
< topic 

> topic random includes specialtriggers 
    // you don't actually need to put anything inside here, since triggers 
    // without a topic are in the "random" topic automatically, but this 
    // topic declaration line will make "random" include "important" 
< topic 

// but for your other topics, include the specialtriggers one 
> topic nlike includes specialtriggers 
    + * 
    - {topic=random}Thanks for caring. 
< topic 
0

अगर आपका प्रश्न है ही के बारे में कैसे हमेशा begin ब्लॉक का उपयोग preprocess उपयोगकर्ता संदेश के लिए, जवाब है:

  • शुरू ब्लॉक में ट्रिगर दर्ज करने की आवश्यकता है। एक + request किसी भी उपयोगकर्ता संदेश का सामान्य प्रतिनिधित्व है।
  • यदि आप मौजूदा विषय से केवल प्रारंभ में ट्रिगर्स को मिलान करना चाहते हैं, तो {ok} टैग पर्याप्त है। के रूप में पालन

    + didntlike 
    - {topic=nlike}Why? 
    
    > topic nlike 
        + * 
        - Thanks for charing. 
    < topic 
    
    > begin 
        + request 
        - {ok} (Preprocessed in begin) 
    < begin 
    

    संदेश didntlike, hello की निम्न क्रम का प्रयास करें

अपने कोड को संशोधित करें, और आप प्राप्त उत्तरों (Preprocessed in begin) साथ जोड़ दिए जाते हैं देखेंगे।

  • अन्यथा, प्रारंभ ब्लॉक में जवाब एक विषय जोड़ने की आवश्यकता है जहां (कौन सा विषय) ट्रिगर और उत्तर प्राप्त करने के लिए। यदि आप random विषय में ट्रिगर लाने के लिए चाहते हैं, तो आप अपने पहले कोड स्निपेट के अंत में प्रारंभ ब्लॉक जोड़ सकते हैं।

RiveScript कोड

> begin 
    + request 
    - {ok}{topic=random} 
< begin 

इस मामले में, setname करने के लिए अनुरोध की सेवा के बाद विषय विषय random है।

+0

हैलो @ नेल्सन-दीन, आपकी तरह की प्रतिक्रिया के लिए धन्यवाद लेकिन यह काम नहीं किया। मुझे लगता है कि मैंने खुद को स्पष्ट नहीं किया है इसलिए मैंने अपने प्रश्न में बातचीत के अपेक्षित परिणाम जोड़े और कोड को आपके उत्तर का उपयोग करने का प्रयास भी जोड़ा। – StaticX

संबंधित मुद्दे