2017-12-28 109 views
6

Botum, kullanıcının adını bir veritabanında depolar ve zaman zaman veritabanı, oturuma “setname username” mesajını gönderir. Numune rivescript:Rivescript-Python'da özel bir tetikleme nasıl yapılır?

+ 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. 

kullanıcı * ile çıkılır ‘nlike’ gibi bir konu olduğunu ve ben adını ayarlamak için mesaj gönderirken sorun, daha sonra konuşma konusunu çıkar.

Beklenen görüşme:

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? 

başlamak binadaki o tedavisi için bir yolu var mı? Farklı sözdizimleri denedim, ancak olumlu bir sonuç yok. Ben böyle bir şey düşündüm:

> begin 

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

+ request 
- {ok} 

< begin 

Bir geçici çözüm tüm konular içeride aynı tetiği eklemek, ama benim koparmak dosya boyutlarının olarak bu yaklaşım hatası eğilimli olduğu için, daha iyi bir çözüm gerekiyor.

==== Kod

> 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. 

Ben konuyu etmek {Tamam} {topic = specialtriggers} Bu konu dışında tüm tetikleyiciler başarısız yapma ekleyerek düşünüyorum Nelson'un cevabı ===== dayalı çalıştı. Ön işlemden sonra, Rivescript özel bir tetikleyici veya normal tetikleyiciler için arama yapmalıdır.

+1

Sana konuşma gitmek bekliyorsunuz anlamıyorum. Noktayı daha somut hale getirmek için örnek cümleler verebilir misiniz? Bir yıldız karakterini "setname" ile star olarak geçerli bir karakter olarak tetiklemek ister misiniz? –

+0

Evet. Bu mesajı önceden işlemek için başlangıç ​​bloğunu kullanmayı bekliyorum. 'Setname John' dediğimde, 'name' değişkenini 'John' olarak ayarlayacağım. Bu yararlıdır çünkü .rive dosyalarının her bir başlığında 'setname *' tetikleyicisini çoğaltmak zorunda kalmam. Aynı şekilde daha basit bir şey söyleyebilirim: 'yakın' ve rive kurallarına girmeyerek cevap verir. – StaticX

cevap

0

Cevap:

> 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

sadece hep önişleyebilir kullanıcı mesaj begin bloğu kullanarak konusunda, cevap soru ise:

  • başlamak bloğuna tetiği girmeye gerek yok. Bir + request, herhangi bir kullanıcı mesajının genel temsilidir.
  • Geçerli konudan başlangıç ​​bloğundaki numaralı blokta eşleştirilecek tetikleyicileri sınırlamak isterseniz, bir {ok} etiketi yeterlidir.

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

    mesajla didntlike, hello aşağıdaki sırasını deneyin izleyin olarak

kodunuzu değiştirin ve Yanıtların (Preprocessed in begin) ile eklenen göreceksiniz.

  • Aksi takdirde, yanıtı başlat bloğunun tetikleyicileri ve yanıtları nereden alacağı konusunda bir konu eklemeniz gerekir. setname için tetikleyiciyi random konusuna getirmek isterseniz, başlangıç ​​bloğunu ilk kod snippet'inizin sonuna ekleyebilirsiniz.

Bu durumda RiveScript kodu

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

, setname isteği çektikten sonra konu konu random olduğunu.chatbots.org, tek makul çözüm konu devralma kullanıyor üzerinde Noah Petherbridge's response dayalı

+0

Merhaba @ nelson-dinh, nazik yanıtın için teşekkürler ama işe yaramadı. Ben kendimi netleştirmediğimi düşünüyorum, bu yüzden sorduğum soruda beklenen bir konuşma sonucu ekledim ve ayrıca cevabınızı kullanarak denenen kodu ekledim. – StaticX

İlgili konular