diff --git a/coolq/api.go b/coolq/api.go
index 7e212ae..f506725 100644
--- a/coolq/api.go
+++ b/coolq/api.go
@@ -622,101 +622,3 @@ func convertGroupMemberInfo(groupId int64, m *client.GroupMemberInfo) MSG {
"card_changeable": false,
}
}
-
-func (bot *CQBot) Send_private_msg_xml(userId int64, i interface{}, ResId int64) MSG {
- var str string
- if m, ok := i.(gjson.Result); ok {
- if m.Type == gjson.JSON {
- elem := bot.ConvertObjectMessage(m, true)
- mid := bot.SendPrivateMessage(userId, &message.SendingMessage{Elements: elem})
- if mid == -1 {
- return Failed(100)
- }
- return OK(MSG{"message_id": mid})
- }
- str = func() string {
- if m.Str != "" {
- return m.Str
- }
- return m.Raw
- }()
- } else if s, ok := i.(string); ok {
- str = s
- }
- if str == "" {
- return Failed(100)
- }
- var elem []message.IMessageElement
- println(str)
- elem = append(elem, NewXmlMsg(str,ResId))
-
- mid := bot.SendPrivateMessage(userId, &message.SendingMessage{Elements: elem})
- if mid == -1 {
- return Failed(100)
- }
- return OK(MSG{"message_id": mid})
-}
-
-func NewXmlMsg(template string,ResId int64) *message.ServiceElement{
- var serviceid string
- if ResId == 0{
- serviceid ="2" //默认值2
- }else{
- serviceid = strconv.FormatInt(ResId,10)
- }
- //println(serviceid)
- return &message.ServiceElement{
- Id: int32(ResId),
- Content: template,
- ResId: serviceid,
- SubType: "xml",
- }
-}
-
-func (bot *CQBot) CQSendGroupMessage_XML(groupId int64, i interface{}, ResId int64) MSG {
- var str string
- fixAt := func(elem []message.IMessageElement) {
- for _, e := range elem {
- if at, ok := e.(*message.AtElement); ok && at.Target != 0 {
- at.Display = "@" + func() string {
- mem := bot.Client.FindGroup(groupId).FindMember(at.Target)
- if mem != nil {
- return mem.DisplayName()
- }
- return strconv.FormatInt(at.Target, 10)
- }()
- }
- }
- }
- if m, ok := i.(gjson.Result); ok {
- if m.Type == gjson.JSON {
- elem := bot.ConvertObjectMessage(m, true)
- fixAt(elem)
- mid := bot.SendGroupMessage(groupId, &message.SendingMessage{Elements: elem})
- if mid == -1 {
- return Failed(100)
- }
- return OK(MSG{"message_id": mid})
- }
- str = func() string {
- if m.Str != "" {
- return m.Str
- }
- return m.Raw
- }()
- } else if s, ok := i.(string); ok {
- str = s
- }
- if str == "" {
- return Failed(100)
- }
- var elem []message.IMessageElement
- println(str)
- elem = append(elem, NewXmlMsg(str,ResId))
- //fixAt(elem)
- mid := bot.SendGroupMessage(groupId, &message.SendingMessage{Elements: elem})
- if mid == -1 {
- return Failed(100)
- }
- return OK(MSG{"message_id": mid})
-}
diff --git a/coolq/cqcode.go b/coolq/cqcode.go
index 5e8f6ae..f7c6294 100644
--- a/coolq/cqcode.go
+++ b/coolq/cqcode.go
@@ -196,6 +196,22 @@ func (bot *CQBot) ConvertStringMessage(m string, group bool) (r []message.IMessa
}
}
}
+ if(t == "xml"){
+ //xml需要实体化,发送的时候不能转回去
+ x := make(map[string]string)
+ //循环遍历Map
+ for _, p := range ps {
+ x[p[1]] = p[2]
+ }
+ resId := x["resid"]
+ template := x["data"]
+ println(template)
+ i, _ := strconv.ParseInt(resId, 10, 64)
+ msg :=global.NewXmlMsg(template,i)
+ r=append(r,msg)
+ continue
+ }
+
elem, err := bot.ToElement(t, d, group)
if err != nil {
log.Warnf("转换CQ码到MiraiGo Element时出现错误: %v 将原样发送.", err)
@@ -236,6 +252,16 @@ func (bot *CQBot) ConvertObjectMessage(m gjson.Result, group bool) (r []message.
}
}
}
+ if t =="xml"{
+ //xml需要实体化,发送的时候不能转回去
+ resId := e.Get("data").Get("resid").Str
+ template := e.Get("data").Get("data").Str
+ println(template)
+ i, _ := strconv.ParseInt(resId, 10, 64)
+ msg :=global.NewXmlMsg(template,i)
+ r=append(r,msg)
+ return
+ }
d := make(map[string]string)
e.Get("data").ForEach(func(key, value gjson.Result) bool {
d[key.Str] = value.Str
diff --git a/docs/cqhttp.md b/docs/cqhttp.md
index 5737ac4..a0f5c42 100644
--- a/docs/cqhttp.md
+++ b/docs/cqhttp.md
@@ -119,6 +119,51 @@ Type: `node`
]
````
+### xml支持
+
+Type: `xml`
+
+范围: **发送**
+
+参数:
+
+| 参数名 | 类型 | 说明 |
+| ------ | ------ | ------------------------------------------------------------ |
+| data | string | xml内容,xml中的value部分,记得实体化处理|
+| resid | int32 | 可以不填|
+
+示例: `[CQ:xml,data=xxxx]`
+
+####一些xml样例
+####ps:重要:xml中的value部分,记得html实体化处理后,再打加入到cq码中
+#### qq音乐
+```xml
+- 十年陈奕迅
+```
+#### 网易音乐
+```xml
+- 十年黄梦之
+```
+
+#### 卡片消息1
+```xml
+
+
+- 生死8秒!女司机高速急刹,他一个操作救下一车性命
+
+
+```
+
+#### 卡片消息2
+```xml
+
+
+-
+test title
+
+
+
+```
## API
@@ -258,59 +303,3 @@ Type: `node`
| `user_id` | int64 | | 好友id |
| `message_id` | int64 | | 被撤回的消息id |
-
-## 自定义xml结构化消息发送,请自行承担风险
-### 发送好友消息
-
-终结点: `/send_private_msg_xml` 或者 `send_private_msg_xml_async`
-
-**参数**
-
-| 字段 | 类型 | 说明 |
-| -------- | ------ | ---- |
-| user_id | int64 | qq号 |
-| message | string | xml数据 |
-| serviceid | int | 服务Id,一般xml中也有,不填默认为2 |
-
-### 发送群消息
-
-终结点: `/send_group_msg_xml` 或者 `send_group_msg_xml_async`
-
-**参数**
-
-| 字段 | 类型 | 说明 |
-| -------- | ------ | ---- |
-| group_id | int64 | 群号 |
-| message | string | xml数据 |
-| serviceid | int | 服务Id,一般xml中也有,不填默认为2 |
-
-
-###一些xml样例
-#### qq音乐
-```xml
-- 十年陈奕迅
-```
-#### 网易音乐
-```xml
-- 十年黄梦之
-```
-
-#### 卡片消息1
-```xml
-
-
-- 生死8秒!女司机高速急刹,他一个操作救下一车性命
-
-
-```
-
-#### 卡片消息2
-```xml
-
-
--
-test title
-
-
-
-```
\ No newline at end of file
diff --git a/global/net.go b/global/net.go
index 40aeab8..d3cf1a7 100644
--- a/global/net.go
+++ b/global/net.go
@@ -3,9 +3,11 @@ package global
import (
"bytes"
"compress/gzip"
+ "github.com/Mrs4s/MiraiGo/message"
"github.com/tidwall/gjson"
"io/ioutil"
"net/http"
+ "strconv"
"strings"
)
@@ -41,3 +43,19 @@ func QQMusicSongInfo(id string) (gjson.Result, error) {
}
return gjson.ParseBytes(d).Get("songinfo.data"), nil
}
+
+func NewXmlMsg(template string,ResId int64) *message.ServiceElement{
+ var serviceid string
+ if ResId == 0{
+ serviceid ="2" //默认值2
+ }else{
+ serviceid = strconv.FormatInt(ResId,10)
+ }
+ //println(serviceid)
+ return &message.ServiceElement{
+ Id: int32(ResId),
+ Content: template,
+ ResId: serviceid,
+ SubType: "xml",
+ }
+}
diff --git a/server/http.go b/server/http.go
index ee13557..f6a229b 100644
--- a/server/http.go
+++ b/server/http.go
@@ -155,10 +155,6 @@ func (s *httpServer) Run(addr, authToken string, bot *coolq.CQBot) {
s.engine.Any("/get_version_info_async", s.GetVersionInfo)
s.engine.Any("/.handle_quick_operation", s.HandleQuickOperation)
- s.engine.Any("/send_private_msg_xml", s.Send_private_msg_xml)
- s.engine.Any("/send_private_msg_xml_async", s.Send_private_msg_xml)
- s.engine.Any("/send_group_msg_xml", s.SendGroupMessage_xml)
- s.engine.Any("/send_group_msg_xml_async", s.SendGroupMessage_xml)
go func() {
log.Infof("CQ HTTP 服务器已启动: %v", addr)
@@ -444,23 +440,3 @@ func getParamWithType(c *gin.Context, k string) (string, gjson.Type) {
}
return "", gjson.Null
}
-func (s *httpServer) Send_private_msg_xml(c *gin.Context) {
- uid, _ := strconv.ParseInt(getParam(c, "user_id"), 10, 64)
- msg, t := getParamWithType(c, "message")
- resId, _ := strconv.ParseInt(getParam(c, "serviceid"), 10, 64)
- if t == gjson.JSON {
- c.JSON(200, s.bot.Send_private_msg_xml(uid, gjson.Parse(msg), resId))
- return
- }
- c.JSON(200, s.bot.Send_private_msg_xml(uid, msg, resId))
-}
-func (s *httpServer) SendGroupMessage_xml(c *gin.Context) {
- gid, _ := strconv.ParseInt(getParam(c, "group_id"), 10, 64)
- msg, t := getParamWithType(c, "message")
- resId, _ := strconv.ParseInt(getParam(c, "serviceid"), 10, 64)
- if t == gjson.JSON {
- c.JSON(200, s.bot.CQSendGroupMessage_XML(gid, gjson.Parse(msg), resId))
- return
- }
- c.JSON(200, s.bot.CQSendGroupMessage_XML(gid, msg, resId))
-}