未验证 提交 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) {
log.Println("clone failure", err)
return
}
log.Println("the clone progress is done")
} else {
r, err := git.PlainOpen(CONFIG)
if err == nil {
......@@ -110,6 +111,10 @@ func (drm *DefaultResponseManager) responseHandler(yamlContent []byte) {
news := core.NewsResponseBody{}
yaml.Unmarshal(yamlContent, &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:
log.Println("unknow type", reps.MsgType)
}
......
......@@ -17,9 +17,10 @@ image:
mediaID: mediaId
`
responseHandler([]byte(yml))
mgr := NewDefaultResponseManager()
mgr.responseHandler([]byte(yml))
resp := respMap["hi"]
resp := mgr.ResponseMap["hi"]
if resp == nil {
t.Error("Can't find response by keyword: hi.")
}
......@@ -44,9 +45,10 @@ articles:
url: "http://blog.com"
`
responseHandler([]byte(yml))
mgr := NewDefaultResponseManager()
mgr.responseHandler([]byte(yml))
resp := respMap["about"]
resp := mgr.ResponseMap["about"]
if resp == nil {
t.Error("Can't find response by keyword: about.")
return
......@@ -58,3 +60,29 @@ articles:
}
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
import (
"fmt"
"log"
"math/rand"
"time"
core "github.com/jenkins-zh/wechat-backend/pkg"
"github.com/jenkins-zh/wechat-backend/pkg/article"
......@@ -77,6 +79,21 @@ func (m *MatchAutoReply) Handle() (string, error) {
if err != nil {
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 {
err = fmt.Errorf("type error %v", resp)
}
......
......@@ -44,6 +44,14 @@ type ImageResponseBody struct {
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 {
// XMLName xml.Name `xml:"Articles"`
Articles []Article `xml:"item"`
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册