未验证 提交 aaa2fb47 编写于 作者: Z Zhao Xiaojie 提交者: GitHub

Add random text respones (#15)

* Add random text respones

* Add more debug info

* Fix the random issues

* Add more debug info

* Add more debug info
上级 cb08fe1f
...@@ -54,6 +54,7 @@ func (drm *DefaultResponseManager) InitCheck(weConfig *config.WeChatConfig) { ...@@ -54,6 +54,7 @@ func (drm *DefaultResponseManager) InitCheck(weConfig *config.WeChatConfig) {
log.Println("clone failure", err) log.Println("clone failure", err)
return return
} }
log.Println("the clone progress is done")
} else { } else {
r, err := git.PlainOpen(CONFIG) r, err := git.PlainOpen(CONFIG)
if err == nil { if err == nil {
...@@ -110,6 +111,10 @@ func (drm *DefaultResponseManager) responseHandler(yamlContent []byte) { ...@@ -110,6 +111,10 @@ func (drm *DefaultResponseManager) responseHandler(yamlContent []byte) {
news := core.NewsResponseBody{} news := core.NewsResponseBody{}
yaml.Unmarshal(yamlContent, &news) yaml.Unmarshal(yamlContent, &news)
drm.ResponseMap[reps.Keyword] = news drm.ResponseMap[reps.Keyword] = news
case "random": // TODO this not the regular way
random := core.RandomResponseBody{}
yaml.Unmarshal(yamlContent, &random)
drm.ResponseMap[reps.Keyword] = random
default: default:
log.Println("unknow type", reps.MsgType) log.Println("unknow type", reps.MsgType)
} }
......
...@@ -17,9 +17,10 @@ image: ...@@ -17,9 +17,10 @@ image:
mediaID: mediaId mediaID: mediaId
` `
responseHandler([]byte(yml)) mgr := NewDefaultResponseManager()
mgr.responseHandler([]byte(yml))
resp := respMap["hi"] resp := mgr.ResponseMap["hi"]
if resp == nil { if resp == nil {
t.Error("Can't find response by keyword: hi.") t.Error("Can't find response by keyword: hi.")
} }
...@@ -44,9 +45,10 @@ articles: ...@@ -44,9 +45,10 @@ articles:
url: "http://blog.com" url: "http://blog.com"
` `
responseHandler([]byte(yml)) mgr := NewDefaultResponseManager()
mgr.responseHandler([]byte(yml))
resp := respMap["about"] resp := mgr.ResponseMap["about"]
if resp == nil { if resp == nil {
t.Error("Can't find response by keyword: about.") t.Error("Can't find response by keyword: about.")
return return
...@@ -58,3 +60,29 @@ articles: ...@@ -58,3 +60,29 @@ articles:
} }
assert.Equal(t, newsResp.Articles.Articles[0].Title, "title", "title parse error.") assert.Equal(t, newsResp.Articles.Articles[0].Title, "title", "title parse error.")
} }
func TestRandomResponseBody(t *testing.T) {
yml := `
keyword: weixin
msgType: random
items:
- abc
- def
`
mgr := NewDefaultResponseManager()
mgr.responseHandler([]byte(yml))
resp := mgr.ResponseMap["weixin"]
if resp == nil {
t.Error("Can't find response by keyword: weixin.")
return
}
newsResp, ok := resp.(core.RandomResponseBody)
if !ok {
t.Error("Get the wrong type, should be RandomResponseBody.")
}
assert.Equal(t, len(newsResp.Items), 2, "can not parse items")
assert.Equal(t, newsResp.Items[0], "abc")
}
...@@ -3,6 +3,8 @@ package reply ...@@ -3,6 +3,8 @@ package reply
import ( import (
"fmt" "fmt"
"log" "log"
"math/rand"
"time"
core "github.com/jenkins-zh/wechat-backend/pkg" core "github.com/jenkins-zh/wechat-backend/pkg"
"github.com/jenkins-zh/wechat-backend/pkg/article" "github.com/jenkins-zh/wechat-backend/pkg/article"
...@@ -77,6 +79,21 @@ func (m *MatchAutoReply) Handle() (string, error) { ...@@ -77,6 +79,21 @@ func (m *MatchAutoReply) Handle() (string, error) {
if err != nil { if err != nil {
err = fmt.Errorf("Wechat Service: makeNewsResponseBody error: %v", err) err = fmt.Errorf("Wechat Service: makeNewsResponseBody error: %v", err)
} }
} else if random, ok := resp.(core.RandomResponseBody); ok {
items := random.Items
count := len(items)
r := rand.New(rand.NewSource(time.Now().UnixNano()))
index := r.Intn(count)
fmt.Printf("response random item count: %d, index: %d\n", count, index)
rondomText := fmt.Sprintf("%s\n%s", random.Content, items[index])
data, err = makeTextResponseBody(from, to, rondomText)
if err != nil {
err = fmt.Errorf("Wechat Service: RandomResponseBody error: %v", err)
}
} else { } else {
err = fmt.Errorf("type error %v", resp) err = fmt.Errorf("type error %v", resp)
} }
......
...@@ -44,6 +44,14 @@ type ImageResponseBody struct { ...@@ -44,6 +44,14 @@ type ImageResponseBody struct {
Image Image Image Image
} }
// RandomResponseBody is not a regular type from wechat system
type RandomResponseBody struct {
ResponseBody `yaml:",inline"`
XMLName xml.Name `xml:"xml"`
Items []string
Content string
}
type Articles struct { type Articles struct {
// XMLName xml.Name `xml:"Articles"` // XMLName xml.Name `xml:"Articles"`
Articles []Article `xml:"item"` Articles []Article `xml:"item"`
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册