| 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
 
- }
 
 
  |