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
|
// 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()
|
seq := c.nextSeq()
|
||||||
req := &msg.SendMessageRequest{
|
req := &msg.SendMessageRequest{
|
||||||
RoutingHead: &msg.RoutingHead{C2C: &msg.C2C{ToUin: target}},
|
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{
|
MsgBody: &msg.MessageBody{
|
||||||
RichText: &msg.RichText{
|
RichText: &msg.RichText{
|
||||||
Elems: message.ToProtoElems(m.Elements, false),
|
Elems: message.ToProtoElems(m, false),
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
MsgSeq: msgSeq,
|
MsgSeq: msgSeq,
|
||||||
|
@ -285,8 +285,32 @@ func (c *QQClient) SendPrivateMessage(target int64, m *message.SendingMessage) *
|
|||||||
mr := int32(rand.Uint32())
|
mr := int32(rand.Uint32())
|
||||||
seq := c.nextFriendSeq()
|
seq := c.nextFriendSeq()
|
||||||
t := time.Now().Unix()
|
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)
|
_ = c.send(pkt)
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
_, pkt := c.buildFriendSendingPacket(target, seq, mr, 1, 0, 0, t, m.Elements)
|
||||||
|
_ = c.send(pkt)
|
||||||
|
}
|
||||||
return &message.PrivateMessage{
|
return &message.PrivateMessage{
|
||||||
Id: seq,
|
Id: seq,
|
||||||
InternalId: mr,
|
InternalId: mr,
|
||||||
|
@ -22,6 +22,24 @@ func RandomStringRange(len int, str string) string {
|
|||||||
return res
|
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 {
|
func ChineseLength(str string, limit int) int {
|
||||||
sum := 0
|
sum := 0
|
||||||
for _, r := range []rune(str) {
|
for _, r := range []rune(str) {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user