12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485 |
- package channel
- import (
- "bytes"
- "encoding/json"
- "errors"
- "fmt"
- "message-pusher/model"
- "net/http"
- "strconv"
- "strings"
- )
- type oneBotMessageRequest struct {
- MessageType string `json:"message_type"`
- UserId int64 `json:"user_id"`
- GroupId int64 `json:"group_id"`
- Message string `json:"message"`
- AutoEscape bool `json:"auto_escape"`
- }
- type oneBotMessageResponse struct {
- Message string `json:"message"`
- Status string `json:"status"`
- RetCode int `json:"retcode"`
- }
- func SendOneBotMessage(message *model.Message, user *model.User, channel_ *model.Channel) error {
- url := fmt.Sprintf("%s/send_msg", channel_.URL)
- req := oneBotMessageRequest{
- Message: message.Content,
- }
- if message.Content == "" {
- req.Message = message.Description
- }
- target := channel_.AccountId
- if message.To != "" {
- target = message.To
- }
- parts := strings.Split(target, "_")
- var idStr string
- var type_ string
- if len(parts) == 1 {
- type_ = "user"
- idStr = parts[0]
- } else if len(parts) == 2 {
- type_ = parts[0]
- idStr = parts[1]
- } else {
- return errors.New("无效的 OneBot 配置")
- }
- id, _ := strconv.ParseInt(idStr, 10, 64)
- if type_ == "user" {
- req.UserId = id
- req.MessageType = "private"
- } else if type_ == "group" {
- req.GroupId = id
- req.MessageType = "group"
- } else {
- return errors.New("无效的 OneBot 配置")
- }
- reqBody, err := json.Marshal(req)
- if err != nil {
- return err
- }
- request, _ := http.NewRequest("POST", url, bytes.NewReader(reqBody))
- request.Header.Set("Authorization", "Bearer "+channel_.Secret)
- request.Header.Set("Content-Type", "application/json")
- resp, err := http.DefaultClient.Do(request)
- if err != nil {
- return err
- }
- if resp.StatusCode != 200 {
- return errors.New(resp.Status)
- }
- var res oneBotMessageResponse
- err = json.NewDecoder(resp.Body).Decode(&res)
- if err != nil {
- return err
- }
- if res.RetCode != 0 {
- return errors.New(res.Message)
- }
- return nil
- }
|