mirror of
https://github.com/Mrs4s/MiraiGo.git
synced 2025-05-04 11:07:40 +08:00
private long message supported.
This commit is contained in:
parent
cfe2585d84
commit
c0fadc3a4c
@ -425,14 +425,14 @@ func (c *QQClient) buildGroupSendingPacket(groupCode int64, r int32, forward boo
|
||||
}
|
||||
|
||||
// MessageSvc.PbSendMsg
|
||||
func (c *QQClient) buildFriendSendingPacket(target int64, msgSeq, r int32, time int64, m *message.SendingMessage) (uint16, []byte) {
|
||||
func (c *QQClient) buildFriendSendingPacket(target int64, msgSeq, r, pkgNum, pkgIndex, pkgDiv int32, time int64, m []message.IMessageElement) (uint16, []byte) {
|
||||
seq := c.nextSeq()
|
||||
req := &msg.SendMessageRequest{
|
||||
RoutingHead: &msg.RoutingHead{C2C: &msg.C2C{ToUin: target}},
|
||||
ContentHead: &msg.ContentHead{PkgNum: 1},
|
||||
ContentHead: &msg.ContentHead{PkgNum: pkgNum, PkgIndex: pkgIndex, DivSeq: pkgDiv},
|
||||
MsgBody: &msg.MessageBody{
|
||||
RichText: &msg.RichText{
|
||||
Elems: message.ToProtoElems(m.Elements, false),
|
||||
Elems: message.ToProtoElems(m, false),
|
||||
},
|
||||
},
|
||||
MsgSeq: msgSeq,
|
||||
|
@ -285,8 +285,32 @@ func (c *QQClient) SendPrivateMessage(target int64, m *message.SendingMessage) *
|
||||
mr := int32(rand.Uint32())
|
||||
seq := c.nextFriendSeq()
|
||||
t := time.Now().Unix()
|
||||
_, pkt := c.buildFriendSendingPacket(target, seq, mr, t, m)
|
||||
imgCount := m.Count(func(e message.IMessageElement) bool { return e.Type() == message.Image })
|
||||
msgLen := message.EstimateLength(m.Elements, 703)
|
||||
if msgLen > 5000 || imgCount > 50 {
|
||||
return nil
|
||||
}
|
||||
if msgLen > 300 || imgCount > 2 {
|
||||
div := int32(rand.Uint32())
|
||||
var fragmented [][]message.IMessageElement
|
||||
for _, elem := range m.Elements {
|
||||
switch o := elem.(type) {
|
||||
case *message.TextElement:
|
||||
for _, text := range utils.ChunkString(o.Content, 300) {
|
||||
fragmented = append(fragmented, []message.IMessageElement{message.NewText(text)})
|
||||
}
|
||||
default:
|
||||
fragmented = append(fragmented, []message.IMessageElement{o})
|
||||
}
|
||||
}
|
||||
for i, elems := range fragmented {
|
||||
_, pkt := c.buildFriendSendingPacket(target, c.nextFriendSeq(), mr, int32(len(fragmented)), int32(i), div, t, elems)
|
||||
_ = c.send(pkt)
|
||||
}
|
||||
} else {
|
||||
_, pkt := c.buildFriendSendingPacket(target, seq, mr, 1, 0, 0, t, m.Elements)
|
||||
_ = c.send(pkt)
|
||||
}
|
||||
return &message.PrivateMessage{
|
||||
Id: seq,
|
||||
InternalId: mr,
|
||||
|
@ -22,6 +22,24 @@ func RandomStringRange(len int, str string) string {
|
||||
return res
|
||||
}
|
||||
|
||||
func ChunkString(s string, chunkSize int) []string {
|
||||
var chunks []string
|
||||
runes := []rune(s)
|
||||
|
||||
if len(runes) == 0 {
|
||||
return []string{s}
|
||||
}
|
||||
|
||||
for i := 0; i < len(runes); i += chunkSize {
|
||||
nn := i + chunkSize
|
||||
if nn > len(runes) {
|
||||
nn = len(runes)
|
||||
}
|
||||
chunks = append(chunks, string(runes[i:nn]))
|
||||
}
|
||||
return chunks
|
||||
}
|
||||
|
||||
func ChineseLength(str string, limit int) int {
|
||||
sum := 0
|
||||
for _, r := range []rune(str) {
|
||||
|
Loading…
x
Reference in New Issue
Block a user