package unify import ( "encoding/json" "fmt" "net/url" "git.u8t.cn/open/gosdk/util" "git.u8t.cn/open/goutil" ) type Message struct { token string sender string address string } func NewMessage(addreess string, token string, sender string) *Message { if addreess == "" { addreess = "http://127.0.0.1:9281" } return &Message{ address: addreess, token: token, sender: sender, } } func (m *Message) Clone(sender string) *Message { return &Message{ address: m.address, token: m.token, sender: sender, } } func (m *Message) Send(args ...string) error { return m.SendText(args...) } func (m *Message) SendMedia(receiver, mediaType, mediaId string) error { reqUrl := fmt.Sprintf("%s/admin/message/send?sender=%s&receiver=%s&type=%s&content=%s", m.address, m.sender, receiver, mediaType, url.QueryEscape(mediaId)) body, err := util.HttpGet(reqUrl, map[string]string{ "x-token": m.token, }) if err != nil { return err } var rsp util.Response if err := json.Unmarshal(body, &rsp); err != nil { return err } if rsp.Code != 0 { return fmt.Errorf("%d:%s", rsp.Code, rsp.Message) } return nil } func (m *Message) SendText(args ...string) error { var receiver, content, fingerprint, level, count string if len(args) == 2 { receiver, content = args[0], args[1] } else if len(args) == 3 { receiver, content, fingerprint = args[0], args[1], args[2] } else if len(args) == 4 { receiver, content, fingerprint, level = args[0], args[1], args[2], args[3] } else if len(args) > 4 { receiver, content, fingerprint, level, count = args[0], args[1], args[2], args[3], args[4] } // Build form data formData := url.Values{} formData.Set("sender", m.sender) formData.Set("receiver", receiver) formData.Set("type", "text") formData.Set("fingerprint", fingerprint) formData.Set("count", count) formData.Set("level", level) formData.Set("content", content) reqUrl := fmt.Sprintf("%s/admin/message/send", m.address) body, err := util.HttpPostForm(reqUrl, map[string]string{ "x-token": m.token, }, formData) if err != nil { return err } var rsp util.Response if err := json.Unmarshal(body, &rsp); err != nil { return err } if rsp.Code != 0 { return fmt.Errorf("%d:%s", rsp.Code, rsp.Message) } return nil } func (m *Message) SendMail(receiver, title, content string) error { // Build form data formData := url.Values{} formData.Set("sender", m.sender) formData.Set("receiver", receiver) formData.Set("type", "text") formData.Set("title", title) formData.Set("content", content) reqUrl := fmt.Sprintf("%s/admin/message/send", m.address) body, err := util.HttpPostForm(reqUrl, map[string]string{ "x-token": m.token, }, formData) if err != nil { return err } var rsp util.Response if err := json.Unmarshal(body, &rsp); err != nil { return err } if rsp.Code != 0 { return fmt.Errorf("%d:%s", rsp.Code, rsp.Message) } return nil } func (m *Message) SendTable(receiver string, table *goutil.TableData) error { content := goutil.EncodeJSON(table) reqUrl := fmt.Sprintf("%s/admin/message/send", m.address) reqData := make(map[string]interface{}) reqData["type"] = "table" reqData["content"] = content reqData["receiver"] = receiver reqData["sender"] = m.sender body, err := util.HttpPostJson(reqUrl, map[string]string{"x-token": m.token}, []byte(goutil.EncodeJSON(reqData))) if err != nil { return err } var rsp util.Response if err := json.Unmarshal(body, &rsp); err != nil { return err } if rsp.Code != 0 { return fmt.Errorf("%d:%s", rsp.Code, rsp.Message) } return nil }