1
0
mirror of https://github.com/Mrs4s/go-cqhttp.git synced 2025-05-05 03:23:49 +08:00

Add support for post_message_format: array

This commit is contained in:
XYenon 2020-08-10 13:59:46 +08:00
parent d5a8f3ead2
commit c27ebadbc4
7 changed files with 113 additions and 18 deletions

View File

@ -446,7 +446,7 @@ func (bot *CQBot) CQGetForwardMessage(resId string) MSG {
"nickname": n.SenderName, "nickname": n.SenderName,
}, },
"time": n.Time, "time": n.Time,
"content": ToStringMessage(n.Message, 0, false), "content": ToFormattedMessage(n.Message, 0, false),
}) })
} }
return OK(MSG{ return OK(MSG{

View File

@ -154,7 +154,7 @@ func (bot *CQBot) InsertGroupMessage(m *message.GroupMessage) int32 {
"group-name": m.GroupName, "group-name": m.GroupName,
"sender": m.Sender, "sender": m.Sender,
"time": m.Time, "time": m.Time,
"message": ToStringMessage(m.Elements, m.GroupCode, true), "message": ToFormattedMessage(m.Elements, m.GroupCode, true),
} }
id := ToGlobalId(m.GroupCode, m.Id) id := ToGlobalId(m.GroupCode, m.Id)
if bot.db != nil { if bot.db != nil {

View File

@ -23,6 +23,76 @@ var matchReg = regexp.MustCompile(`\[CQ:\w+?.*?]`)
var typeReg = regexp.MustCompile(`\[CQ:(\w+)`) var typeReg = regexp.MustCompile(`\[CQ:(\w+)`)
var paramReg = regexp.MustCompile(`,([\w\-.]+?)=([^,\]]+)`) var paramReg = regexp.MustCompile(`,([\w\-.]+?)=([^,\]]+)`)
func ToArrayMessage(e []message.IMessageElement, code int64, raw ...bool) (r []MSG) {
ur := false
if len(raw) != 0 {
ur = raw[0]
}
for _, elem := range e {
m := MSG{}
switch o := elem.(type) {
case *message.TextElement:
m = MSG{
"type": "text",
"data": map[string]string{"text": CQCodeEscapeText(o.Content)},
}
case *message.AtElement:
if o.Target == 0 {
m = MSG{
"type": "at",
"data": map[string]string{"qq": "all"},
}
} else {
m = MSG{
"type": "at",
"data": map[string]string{"qq": fmt.Sprint(o.Target)},
}
}
case *message.ReplyElement:
m = MSG{
"type": "reply",
"data": map[string]string{"id": fmt.Sprint(ToGlobalId(code, o.ReplySeq))},
}
case *message.ForwardElement:
m = MSG{
"type": "forward",
"data": map[string]string{"id": o.ResId},
}
case *message.FaceElement:
m = MSG{
"type": "face",
"data": map[string]string{"id": fmt.Sprint(o.Index)},
}
case *message.VoiceElement:
if ur {
m = MSG{
"type": "record",
"data": map[string]string{"file": o.Name},
}
} else {
m = MSG{
"type": "record",
"data": map[string]string{"file": o.Name, "url": o.Url},
}
}
case *message.ImageElement:
if ur {
m = MSG{
"type": "image",
"data": map[string]string{"file": o.Filename},
}
} else {
m = MSG{
"type": "image",
"data": map[string]string{"file": o.Filename, "url": o.Url},
}
}
}
r = append(r, m)
}
return
}
func ToStringMessage(e []message.IMessageElement, code int64, raw ...bool) (r string) { func ToStringMessage(e []message.IMessageElement, code int64, raw ...bool) (r string) {
ur := false ur := false
if len(raw) != 0 { if len(raw) != 0 {

View File

@ -14,6 +14,21 @@ import (
"time" "time"
) )
var format = "string"
func SetMessageFormat(f string) {
format = f
}
func ToFormattedMessage(e []message.IMessageElement, code int64, raw ...bool) (r interface{}) {
if format == "string" {
r = ToStringMessage(e, code, raw...)
} else if format == "array" {
r = ToArrayMessage(e, code, raw...)
}
return
}
func (bot *CQBot) privateMessageEvent(c *client.QQClient, m *message.PrivateMessage) { func (bot *CQBot) privateMessageEvent(c *client.QQClient, m *message.PrivateMessage) {
checkMedia(m.Elements) checkMedia(m.Elements)
cqm := ToStringMessage(m.Elements, 0, true) cqm := ToStringMessage(m.Elements, 0, true)
@ -24,7 +39,7 @@ func (bot *CQBot) privateMessageEvent(c *client.QQClient, m *message.PrivateMess
"sub_type": "friend", "sub_type": "friend",
"message_id": ToGlobalId(m.Sender.Uin, m.Id), "message_id": ToGlobalId(m.Sender.Uin, m.Id),
"user_id": m.Sender.Uin, "user_id": m.Sender.Uin,
"message": ToStringMessage(m.Elements, 0, false), "message": ToFormattedMessage(m.Elements, 0, false),
"raw_message": cqm, "raw_message": cqm,
"font": 0, "font": 0,
"self_id": c.Uin, "self_id": c.Uin,
@ -72,7 +87,7 @@ func (bot *CQBot) groupMessageEvent(c *client.QQClient, m *message.GroupMessage)
"anonymous": nil, "anonymous": nil,
"font": 0, "font": 0,
"group_id": m.GroupCode, "group_id": m.GroupCode,
"message": ToStringMessage(m.Elements, m.GroupCode, false), "message": ToFormattedMessage(m.Elements, m.GroupCode, false),
"message_id": id, "message_id": id,
"message_type": "group", "message_type": "group",
"post_type": "message", "post_type": "message",
@ -128,7 +143,7 @@ func (bot *CQBot) tempMessageEvent(c *client.QQClient, m *message.TempMessage) {
"sub_type": "group", "sub_type": "group",
"message_id": m.Id, "message_id": m.Id,
"user_id": m.Sender.Uin, "user_id": m.Sender.Uin,
"message": ToStringMessage(m.Elements, 0, false), "message": ToFormattedMessage(m.Elements, 0, false),
"raw_message": cqm, "raw_message": cqm,
"font": 0, "font": 0,
"self_id": c.Uin, "self_id": c.Uin,

View File

@ -28,7 +28,8 @@ go-cqhttp 支持导入CQHTTP的配置文件, 具体步骤为:
"enabled": true, "enabled": true,
"host": "0.0.0.0", "host": "0.0.0.0",
"port": 5700, "port": 5700,
"post_urls": {"url:port": "secret"} "post_urls": {"url:port": "secret"},
"post_message_format": "string"
}, },
"ws_config": { "ws_config": {
"enabled": true, "enabled": true,

View File

@ -40,10 +40,11 @@ type CQHttpApiConfig struct {
} }
type GoCQHttpConfig struct { type GoCQHttpConfig struct {
Enabled bool `json:"enabled"` Enabled bool `json:"enabled"`
Host string `json:"host"` Host string `json:"host"`
Port uint16 `json:"port"` Port uint16 `json:"port"`
PostUrls map[string]string `json:"post_urls"` PostUrls map[string]string `json:"post_urls"`
PostMessageFormat string `json:"post_message_format"`
} }
type GoCQWebsocketConfig struct { type GoCQWebsocketConfig struct {
@ -66,10 +67,11 @@ func DefaultConfig() *JsonConfig {
ReLogin: true, ReLogin: true,
ReLoginDelay: 3, ReLoginDelay: 3,
HttpConfig: &GoCQHttpConfig{ HttpConfig: &GoCQHttpConfig{
Enabled: true, Enabled: true,
Host: "0.0.0.0", Host: "0.0.0.0",
Port: 5700, Port: 5700,
PostUrls: map[string]string{}, PostUrls: map[string]string{},
PostMessageFormat: "string",
}, },
WSConfig: &GoCQWebsocketConfig{ WSConfig: &GoCQWebsocketConfig{
Enabled: true, Enabled: true,

15
main.go
View File

@ -91,10 +91,11 @@ func main() {
Uin: uin, Uin: uin,
Password: pwd, Password: pwd,
HttpConfig: &global.GoCQHttpConfig{ HttpConfig: &global.GoCQHttpConfig{
Enabled: true, Enabled: true,
Host: "0.0.0.0", Host: "0.0.0.0",
Port: 5700, Port: 5700,
PostUrls: map[string]string{}, PostUrls: map[string]string{},
PostMessageFormat: "string",
}, },
WSConfig: &global.GoCQWebsocketConfig{ WSConfig: &global.GoCQWebsocketConfig{
Enabled: true, Enabled: true,
@ -193,6 +194,12 @@ func main() {
b := coolq.NewQQBot(cli, conf) b := coolq.NewQQBot(cli, conf)
if conf.HttpConfig != nil && conf.HttpConfig.Enabled { if conf.HttpConfig != nil && conf.HttpConfig.Enabled {
server.HttpServer.Run(fmt.Sprintf("%s:%d", conf.HttpConfig.Host, conf.HttpConfig.Port), conf.AccessToken, b) server.HttpServer.Run(fmt.Sprintf("%s:%d", conf.HttpConfig.Host, conf.HttpConfig.Port), conf.AccessToken, b)
if conf.HttpConfig.PostMessageFormat != "string" && conf.HttpConfig.PostMessageFormat != "array" {
log.Errorf("http_config.post_message_format 配置错误")
return
} else {
coolq.SetMessageFormat(conf.HttpConfig.PostMessageFormat)
}
for k, v := range conf.HttpConfig.PostUrls { for k, v := range conf.HttpConfig.PostUrls {
server.NewHttpClient().Run(k, v, b) server.NewHttpClient().Run(k, v, b)
} }