mirror of
https://github.com/songquanpeng/message-pusher.git
synced 2024-05-03 08:45:04 +08:00
86 lines
1.9 KiB
Go
86 lines
1.9 KiB
Go
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
|
|
}
|