1
0
mirror of https://github.com/Mrs4s/go-cqhttp.git synced 2025-05-04 19:17:37 +08:00

Added unbreakable feature

- Reply message customizable
- Forward message able to customize time

Signed-off-by: Sam <lau.sam745033858@gmail.com>
This commit is contained in:
sam01101 2021-01-18 23:01:54 +08:00 committed by Sam
parent 19b6106c93
commit bdc2b03690
3 changed files with 69 additions and 8 deletions

View File

@ -260,10 +260,11 @@ func (bot *CQBot) CQSendGroupForwardMessage(groupId int64, m gjson.Result) MSG {
SenderId: sender.Uin, SenderId: sender.Uin,
SenderName: (&sender).DisplayName(), SenderName: (&sender).DisplayName(),
Time: func() int32 { Time: func() int32 {
if hasCustom { msgTime := m["time"].(int32)
if hasCustom && msgTime == 0 {
return int32(ts.Unix()) return int32(ts.Unix())
} }
return m["time"].(int32) return msgTime
}(), }(),
Message: bot.ConvertStringMessage(m["message"].(string), true), Message: bot.ConvertStringMessage(m["message"].(string), true),
}) })
@ -273,6 +274,8 @@ func (bot *CQBot) CQSendGroupForwardMessage(groupId int64, m gjson.Result) MSG {
return return
} }
uin, _ := strconv.ParseInt(e.Get("data.uin").Str, 10, 64) uin, _ := strconv.ParseInt(e.Get("data.uin").Str, 10, 64)
msgTime, err := strconv.ParseInt(e.Get("data.time").Str, 10, 64)
if err != nil { msgTime = ts.Unix()}
name := e.Get("data.name").Str name := e.Get("data.name").Str
c := e.Get("data.content") c := e.Get("data.content")
if c.IsArray() { if c.IsArray() {
@ -292,7 +295,7 @@ func (bot *CQBot) CQSendGroupForwardMessage(groupId int64, m gjson.Result) MSG {
nodes = append(nodes, &message.ForwardNode{ nodes = append(nodes, &message.ForwardNode{
SenderId: uin, SenderId: uin,
SenderName: name, SenderName: name,
Time: int32(ts.Unix()), Time: int32(msgTime),
Message: []message.IMessageElement{bot.Client.UploadGroupForwardMessage(groupId, &message.ForwardMessage{Nodes: taowa})}, Message: []message.IMessageElement{bot.Client.UploadGroupForwardMessage(groupId, &message.ForwardMessage{Nodes: taowa})},
}) })
return return
@ -325,7 +328,7 @@ func (bot *CQBot) CQSendGroupForwardMessage(groupId int64, m gjson.Result) MSG {
nodes = append(nodes, &message.ForwardNode{ nodes = append(nodes, &message.ForwardNode{
SenderId: uin, SenderId: uin,
SenderName: name, SenderName: name,
Time: int32(ts.Unix()), Time: int32(msgTime),
Message: newElem, Message: newElem,
}) })
return return
@ -343,7 +346,7 @@ func (bot *CQBot) CQSendGroupForwardMessage(groupId int64, m gjson.Result) MSG {
if len(sendNodes) > 0 { if len(sendNodes) > 0 {
gm := bot.Client.SendGroupForwardMessage(groupId, &message.ForwardMessage{Nodes: sendNodes}) gm := bot.Client.SendGroupForwardMessage(groupId, &message.ForwardMessage{Nodes: sendNodes})
return OK(MSG{ return OK(MSG{
"message_id": ToGlobalId(groupId, gm.Id), "message_id": bot.InsertGroupMessage(gm),
}) })
} }
return Failed(100) return Failed(100)

View File

@ -18,6 +18,7 @@ import (
"runtime" "runtime"
"strconv" "strconv"
"strings" "strings"
"time"
"github.com/Mrs4s/MiraiGo/binary" "github.com/Mrs4s/MiraiGo/binary"
"github.com/Mrs4s/MiraiGo/message" "github.com/Mrs4s/MiraiGo/message"
@ -411,6 +412,7 @@ func (bot *CQBot) ConvertStringMessage(msg string, group bool) (r []message.IMes
} }
} }
mid, err := strconv.Atoi(params["id"]) mid, err := strconv.Atoi(params["id"])
customText := params["text"]
if err == nil { if err == nil {
org := bot.GetMessage(int32(mid)) org := bot.GetMessage(int32(mid))
if org != nil { if org != nil {
@ -424,6 +426,25 @@ func (bot *CQBot) ConvertStringMessage(msg string, group bool) (r []message.IMes
}, r...) }, r...)
return return
} }
} else if customText != "" {
sender, err := strconv.ParseInt(params["qq"], 10, 64)
if err != nil {
log.Warnf("警告:自定义Reply 元素中必须包含QQ的Uin")
return
}
msgTime, err := strconv.ParseInt(params["time"], 10, 64)
if err != nil {
msgTime = time.Now().Unix()
}
r = append([]message.IMessageElement{
&message.ReplyElement{
ReplySeq: int32(0),
Sender: sender,
Time: int32(msgTime),
Elements: bot.ConvertStringMessage(customText, group),
},
}, r...)
return
} }
} }
if t == "forward" { // 单独处理转发 if t == "forward" { // 单独处理转发
@ -490,6 +511,7 @@ func (bot *CQBot) ConvertObjectMessage(m gjson.Result, group bool) (r []message.
} }
} }
mid, err := strconv.Atoi(e.Get("data").Get("id").String()) mid, err := strconv.Atoi(e.Get("data").Get("id").String())
customText := e.Get("data").Get("text").String()
if err == nil { if err == nil {
org := bot.GetMessage(int32(mid)) org := bot.GetMessage(int32(mid))
if org != nil { if org != nil {
@ -503,6 +525,25 @@ func (bot *CQBot) ConvertObjectMessage(m gjson.Result, group bool) (r []message.
}, r...) }, r...)
return return
} }
} else if customText != "" {
sender, err := strconv.ParseInt(e.Get("data").Get("qq").String(), 10, 64)
if err != nil {
log.Warnf("警告:自定义Reply 元素中必须包含QQ的Uin")
return
}
msgTime, err := strconv.ParseInt(e.Get("data").Get("time").String(), 10, 64)
if err != nil {
msgTime = time.Now().Unix()
}
r = append([]message.IMessageElement{
&message.ReplyElement{
ReplySeq: int32(0),
Sender: sender,
Time: int32(msgTime),
Elements: bot.ConvertStringMessage(customText, group),
},
}, r...)
return
} }
} }
if t == "forward" { if t == "forward" {

View File

@ -94,13 +94,23 @@ Type : `reply`
范围: **发送/接收** 范围: **发送/接收**
> 注意: 如果id存在则优先处理id
参数: 参数:
| 参数名 | 类型 | 说明 | | 参数名 | 类型 | 说明 |
| ------ | ---- | ------------------------------------- | | ------ | ---- | ------------------------------------- |
| `id` | int | 回复时所引用的消息id, 必须为本群消息. | | `id` | int | 回复时所引用的消息id, 必须为本群消息. |
| `text` | string | 自定义回复的信息 |
| `qq` | int64 | 自定义回复时的自定义QQ, 如果使用自定义信息必须指定. |
| `time` | int64 | 自定义回复时的时间, 格式为Unix时间 |
示例: `[CQ:reply,id=123456]`
\
自定义回复示例: `[CQ:reply,text=Hello World,qq=10086,time=3376656000]`
示例: `[CQ:reply,id=123456]`
### 红包 ### 红包
@ -197,7 +207,7 @@ Type: `node`
| `id` | int32 | 转发消息id | 直接引用他人的消息合并转发, 实际查看顺序为原消息发送顺序 **与下面的自定义消息二选一** | | `id` | int32 | 转发消息id | 直接引用他人的消息合并转发, 实际查看顺序为原消息发送顺序 **与下面的自定义消息二选一** |
| `name` | string | 发送者显示名字 | 用于自定义消息 (自定义消息并合并转发,实际查看顺序为自定义消息段顺序) | | `name` | string | 发送者显示名字 | 用于自定义消息 (自定义消息并合并转发,实际查看顺序为自定义消息段顺序) |
| `uin` | int64 | 发送者QQ号 | 用于自定义消息 | | `uin` | int64 | 发送者QQ号 | 用于自定义消息 |
| `content` | message | 具体消息 | 用于自定义消息 **不支持引用回复** | | `content` | message | 具体消息 | 用于自定义消息 |
特殊说明: **需要使用单独的API `/send_group_forward_msg` 发送并且由于消息段较为复杂仅支持Array形式入参。 如果引用消息和自定义消息同时出现,实际查看顺序将取消息段顺序. 另外按 [CQHTTP](https://cqhttp.cc/docs/4.15/#/Message?id=格式) 文档说明, `data` 应全为字符串, 但由于需要接收`message` 类型的消息, 所以 *仅限此Type的content字段* 支持Array套娃** 特殊说明: **需要使用单独的API `/send_group_forward_msg` 发送并且由于消息段较为复杂仅支持Array形式入参。 如果引用消息和自定义消息同时出现,实际查看顺序将取消息段顺序. 另外按 [CQHTTP](https://cqhttp.cc/docs/4.15/#/Message?id=格式) 文档说明, `data` 应全为字符串, 但由于需要接收`message` 类型的消息, 所以 *仅限此Type的content字段* 支持Array套娃**
@ -259,7 +269,8 @@ Type: `node`
"data": { "data": {
"name": "自定义发送者", "name": "自定义发送者",
"uin": "10086", "uin": "10086",
"content": "我是自定义消息" "content": "我是自定义消息",
"time": "3376656000"
} }
}, },
{ {
@ -539,6 +550,12 @@ Type: `tts`
| `group_id` | int64 | 群号 | | `group_id` | int64 | 群号 |
| `messages` | forward node[] | 自定义转发消息, 具体看CQCode | | `messages` | forward node[] | 自定义转发消息, 具体看CQCode |
响应数据
| 字段 | 类型 | 说明 |
| ------------ | ------ | ------ |
| `message_id` | string | 消息id |
### 获取中文分词 ### 获取中文分词
终结点: `/.get_word_slices` 终结点: `/.get_word_slices`