feat: support channel OneBot now (close #64)
This commit is contained in:
@@ -29,6 +29,8 @@ func SendMessage(message *model.Message, user *model.User, channel_ *model.Chann
|
||||
return SendDiscordMessage(message, user, channel_)
|
||||
case model.TypeNone:
|
||||
return nil
|
||||
case model.TypeOneBot:
|
||||
return SendOneBotMessage(message, user, channel_)
|
||||
default:
|
||||
return errors.New("不支持的消息通道:" + channel_.Type)
|
||||
}
|
||||
|
||||
@@ -0,0 +1,85 @@
|
||||
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
|
||||
}
|
||||
Reference in New Issue
Block a user