簡體   English   中英

Botman 在對話課上陷入了一個循環

[英]Botman is stuck in a loop in a conversation class

Botman 很棒,但我在部分對話中遇到了問題。 它似乎陷入了無限循環(阻止它的唯一方法是殺死機器人進程並清除其緩存)。

這是我想要做的:

我正在查詢一個 API,其中一些 API 結果以品牌名稱作為前綴,我嘗試在需要時添加品牌名稱以在 API 中查找相關產品。

所以我所做的是將所有品牌產品放入array()然后使用in_array($needle, $haystack)查找產品並在需要時添加品牌名稱。

所以這里是主要的對話功能:

機器人:你想查什么?

用戶:產品名稱

public function lookupStrain() {


        
        // ASK: WHAT STRAIN ARE WE GOING TO QUERY THE API FOR
        $this->ask('What strain do you want to know more about?', function($answer) { 

            $this->strain = $answer->getText();


            // DUMB: these are the "branded" strains

            $bhang = array('Afgoo', 'Arjans Strawberry Haze', 'Blackberry Kush', 'Bubba Kush', 'Cali Orange', 'Casey Jones', 'Cheese', 'ChemDawg', 'Cherry Kola', 'Chocolope', 'Diablo OG', 'Durban Poison', 'Dutch Treat', 'Girl Scout Cookies', 'Granddaddy Purple', 'Grape Ape', 'Harlequin', 'Hawaiian Haze', 'Holy Grail', 'Island Sweet Skunk', 'J-1', 'Jack Herer', 'Juicy Fruit', 'Kali Mist', 'King Kush', 'Lavender Kush', 'Lemon Haze', 'Lemon Skunk', 'Mango OG', 'Master Kush', 'Maui Waui', 'Mr. Nice', 'Northern Lights', 'Ogre', 'Perfecto Hybrid', 'Perfecto Indica', 'Pineapple Express', 'Pineapple Kush', 'Purple Diesel', 'Purple Erkle', 'Skunk #1', 'Skywalker OG', 'Sour Diesel', 'Sour OG', 'Strawberry Cough', 'Strawberry Diesel', 'Super Lemon Haze', 'Tangie', 'Triple Berry Goo', 'White Diesel', 'White Widow', 'XJ-13', 'Yoda OG');

            // DUMBER: set brand name for strains that need it

            if (in_array(ucwords($this->strain), $bhang) == $this->strain) {
          
                // this is just a placeholder to show that we got a result, but when this event happens it just repeats endlessly

                $this->say("Bhang " . ucwords($this->strain));

            }           
            
            // NOT AS DUMB: regular strain names without the branding
            else {

                $strainQuery = ucwords($this->strain);

                            
            }

            // CURL API QUERY
            $ch =  curl_init('http://strainapi.evanbusse.com/phwOFe1/strains/search/name/' . $strainQuery);


            curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
            curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
            curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_BASIC);
            curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 5);
            curl_setopt($ch, CURLOPT_TIMEOUT, 3);
            curl_setopt($ch, CURLOPT_HTTPHEADER, array('Accept: application/json'));
            
            $result   = curl_exec($ch);
            $j_result = json_decode($result, true);

            // loop through all api results
            foreach ($j_result as $key => $value) {
                
                if ($strainQuery == $value['name']) {
                
                    $this->say($value['desc']);
                }


            }

          

        });


    }



}

如果我查詢產品列表中的某些內容,結果是品牌產品名稱的源源不斷(如果我們要求“Afgoo”,這就是我們將得到的結果:

Bhang Afgoo 
Bhang Afgoo 
Bhang Afgoo 
Bhang Afgoo 
Bhang Afgoo 
Bhang Afgoo 
Bhang Afgoo 
Bhang Afgoo 
and on and on..

然而..

它工作正常,如果查詢的菌株不在品牌列表中,則只顯示一次結果。

那么如何讓品牌列表像非品牌列表一樣工作? 我想將品牌名稱“Bhang”添加到$bhang array()列出的菌株的查詢$bhang array()

如果您在使用 Telegram,您也可以親眼看看,向“CocoTheWeedBot”發送一條消息,消息正文為:“strain”(觸發壓力對話),然后一個很好的例子是回復機器人問題: “afgoo”(或 $bhang 數組中的任何內容)

您可以通過以下命令清除botman的緩存來停止對話:

php artisan cache:clear

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM