1// Package cleverbot implements wrapper for the cleverbot.io API. 2package cleverbot 3 4import ( 5 "bytes" 6 "encoding/json" 7 "fmt" 8 "io/ioutil" 9 "net/http" 10) 11 12// API Endpoints. 13const ( 14 baseURL = "https://cleverbot.io/1.0/" 15 createURL = baseURL + "create" 16 askURL = baseURL + "ask" 17) 18 19// New bot instance. 20// "nick" is optional if you did not specify it, a random one is generated for you. 21// A successful call returns err == nil. 22func New(user, key string, nick ...string) (s *Session, err error) { 23 var sessionName string 24 if len(nick) > 0 { 25 sessionName = nick[0] 26 } 27 28 s = &Session{ 29 User: user, 30 Key: key, 31 Nick: sessionName, 32 } 33 34 params, err := json.Marshal(s) 35 if err != nil { 36 return 37 } 38 39 response, err := http.Post(createURL, "application/json", bytes.NewBuffer(params)) 40 if err != nil { 41 return 42 } 43 44 body, err := ioutil.ReadAll(response.Body) 45 if err != nil { 46 return 47 } 48 49 m := map[string]string{} 50 err = json.Unmarshal([]byte(body), &m) 51 if err != nil { 52 return 53 } 54 55 if m["status"] == "success" { 56 s.Nick = m["nick"] 57 } else { 58 err = fmt.Errorf(m["status"]) 59 return 60 } 61 62 return 63} 64 65// Ask Cleverbot a question, returns Cleverbots response. 66// A successful call returns err == nil. 67func (s *Session) Ask(text string) (output string, err error) { 68 69 s.Text = text 70 71 params, err := json.Marshal(s) 72 if err != nil { 73 return 74 } 75 76 response, err := http.Post(askURL, "application/json", bytes.NewBuffer(params)) 77 if err != nil { 78 return 79 } 80 81 body, err := ioutil.ReadAll(response.Body) 82 if err != nil { 83 return 84 } 85 86 m := map[string]string{} 87 err = json.Unmarshal([]byte(body), &m) 88 if err != nil { 89 return 90 } 91 92 if m["status"] != "success" { 93 err = fmt.Errorf(m["status"]) 94 return 95 } 96 97 // return the bots asnwer. 98 return m["response"], nil 99} 100