mirror of
https://github.com/Mrs4s/MiraiGo.git
synced 2025-05-04 11:07:40 +08:00
At and Reply element supported.
fix typo.
This commit is contained in:
parent
85e7553b29
commit
414c770818
@ -2,6 +2,7 @@ package client
|
||||
|
||||
import (
|
||||
"crypto/md5"
|
||||
"github.com/Mrs4s/MiraiGo/binary"
|
||||
devinfo "github.com/Mrs4s/MiraiGo/client/pb"
|
||||
"github.com/Mrs4s/MiraiGo/client/pb/msg"
|
||||
"github.com/Mrs4s/MiraiGo/message"
|
||||
@ -177,8 +178,25 @@ func (c *QQClient) parseGroupMessage(m *msg.Message) *message.GroupMessage {
|
||||
func parseMessageElems(elems []*msg.Elem) []message.IMessageElement {
|
||||
var res []message.IMessageElement
|
||||
for _, elem := range elems {
|
||||
if elem.SrcMsg != nil {
|
||||
if len(elem.SrcMsg.OrigSeqs) != 0 {
|
||||
r := &message.ReplyElement{
|
||||
ReplySeq: elem.SrcMsg.OrigSeqs[0],
|
||||
Elements: parseMessageElems(elem.SrcMsg.Elems),
|
||||
}
|
||||
res = append(res, r)
|
||||
}
|
||||
continue
|
||||
}
|
||||
if elem.Text != nil {
|
||||
if len(elem.Text.Attr6Buf) == 0 {
|
||||
res = append(res, message.NewText(elem.Text.Str))
|
||||
} else {
|
||||
att6 := binary.NewReader(elem.Text.Attr6Buf)
|
||||
att6.ReadBytes(7)
|
||||
target := int64(uint32(att6.ReadInt32()))
|
||||
res = append(res, message.NewAt(target, elem.Text.Str))
|
||||
}
|
||||
}
|
||||
if elem.CustomFace != nil {
|
||||
res = append(res, message.NewNetImage(elem.CustomFace.FilePath, "http://gchat.qpic.cn"+elem.CustomFace.OrigUrl))
|
||||
|
File diff suppressed because it is too large
Load Diff
@ -170,7 +170,7 @@ message Elem {
|
||||
//ApolloActMsg? apolloMsg = 42;
|
||||
//GroupPubAccountInfo? groupPubAccInfo = 43;
|
||||
//BlessingMessage? blessMsg = 44;
|
||||
//SourceMsg? srcMsg = 45;
|
||||
SourceMsg srcMsg = 45;
|
||||
//LolaMsg? lolaMsg = 46;
|
||||
//GroupBusinessMsg? groupBusinessMsg = 47;
|
||||
//WorkflowNotifyMsg? msgWorkflowNotify = 48;
|
||||
@ -361,6 +361,20 @@ message VideoFile {
|
||||
bytes pbReserve = 24;
|
||||
}
|
||||
|
||||
message SourceMsg {
|
||||
repeated int32 origSeqs = 1;
|
||||
int64 senderUin = 2;
|
||||
int32 time = 3;
|
||||
int32 flag = 4;
|
||||
repeated Elem elems = 5;
|
||||
int32 type = 6;
|
||||
bytes richMsg = 7;
|
||||
bytes pbReserve = 8;
|
||||
bytes srcMsg = 9;
|
||||
int64 toUin = 10;
|
||||
bytes troopName = 11;
|
||||
}
|
||||
|
||||
message Face {
|
||||
int32 index = 1;
|
||||
bytes old = 2;
|
||||
|
@ -1,6 +1,9 @@
|
||||
package message
|
||||
|
||||
import "strings"
|
||||
import (
|
||||
"strconv"
|
||||
"strings"
|
||||
)
|
||||
|
||||
type TextElement struct {
|
||||
Content string
|
||||
@ -23,6 +26,16 @@ type FaceElement struct {
|
||||
Name string
|
||||
}
|
||||
|
||||
type AtElement struct {
|
||||
Target int64
|
||||
Display string
|
||||
}
|
||||
|
||||
type ReplyElement struct {
|
||||
ReplySeq int32
|
||||
Elements []IMessageElement
|
||||
}
|
||||
|
||||
func NewText(s string) *TextElement {
|
||||
return &TextElement{Content: s}
|
||||
}
|
||||
@ -59,6 +72,20 @@ func NewFace(index int32) *FaceElement {
|
||||
}
|
||||
}
|
||||
|
||||
func NewAt(target int64, display ...string) *AtElement {
|
||||
dis := "@" + strconv.FormatInt(target, 10)
|
||||
if target == 0 {
|
||||
dis = "@全体成员"
|
||||
}
|
||||
if len(display) != 0 {
|
||||
dis = display[0]
|
||||
}
|
||||
return &AtElement{
|
||||
Target: target,
|
||||
Display: dis,
|
||||
}
|
||||
}
|
||||
|
||||
func (e *TextElement) Type() ElementType {
|
||||
return Text
|
||||
}
|
||||
@ -75,6 +102,14 @@ func (e *GroupImageElement) Type() ElementType {
|
||||
return Image
|
||||
}
|
||||
|
||||
func (e *AtElement) Type() ElementType {
|
||||
return At
|
||||
}
|
||||
|
||||
func (e *ReplyElement) Type() ElementType {
|
||||
return Reply
|
||||
}
|
||||
|
||||
var faceMap = map[int]string{
|
||||
14: "微笑",
|
||||
1: "撇嘴",
|
||||
|
@ -3,6 +3,7 @@ package message
|
||||
import (
|
||||
"github.com/Mrs4s/MiraiGo/binary"
|
||||
"github.com/Mrs4s/MiraiGo/client/pb/msg"
|
||||
"strconv"
|
||||
)
|
||||
|
||||
type PrivateMessage struct {
|
||||
@ -40,21 +41,29 @@ const (
|
||||
Text ElementType = iota
|
||||
Image
|
||||
Face
|
||||
At
|
||||
Reply
|
||||
)
|
||||
|
||||
func (s *Sender) IsAnonymous() bool {
|
||||
return s.Uin == 80000000
|
||||
}
|
||||
|
||||
func NewSendingMessage() *SendingMessage {
|
||||
return &SendingMessage{}
|
||||
}
|
||||
|
||||
func (msg *PrivateMessage) ToString() (res string) {
|
||||
for _, elem := range msg.Elements {
|
||||
switch e := elem.(type) {
|
||||
case *TextElement:
|
||||
res += e.Content
|
||||
case *ImageElement:
|
||||
res += " [Image= " + e.Filename + " ] "
|
||||
res += "[Image:" + e.Filename + "]"
|
||||
case *FaceElement:
|
||||
res += " [" + e.Name + "] "
|
||||
res += "[" + e.Name + "]"
|
||||
case *AtElement:
|
||||
res += e.Display
|
||||
}
|
||||
}
|
||||
return
|
||||
@ -66,11 +75,15 @@ func (msg *GroupMessage) ToString() (res string) {
|
||||
case *TextElement:
|
||||
res += e.Content
|
||||
case *ImageElement:
|
||||
res += " [Image= " + e.Filename + " ] "
|
||||
res += "[Image:" + e.Filename + "]"
|
||||
case *FaceElement:
|
||||
res += " [" + e.Name + "] "
|
||||
res += "[" + e.Name + "]"
|
||||
case *GroupImageElement:
|
||||
res += "[Image= " + e.ImageId + " ]"
|
||||
res += "[Image: " + e.ImageId + "]"
|
||||
case *AtElement:
|
||||
res += e.Display
|
||||
case *ReplyElement:
|
||||
res += "[Reply:" + strconv.FormatInt(int64(e.ReplySeq), 10) + "]"
|
||||
}
|
||||
}
|
||||
return
|
||||
@ -98,6 +111,21 @@ func ToProtoElems(elems []IMessageElement) (r []*msg.Elem) {
|
||||
Buf: []byte{0x00, 0x01, 0x00, 0x04, 0x52, 0xCC, 0xF5, 0xD0},
|
||||
},
|
||||
})
|
||||
case *AtElement:
|
||||
r = append(r, &msg.Elem{
|
||||
Text: &msg.Text{
|
||||
Str: e.Display,
|
||||
Attr6Buf: binary.NewWriterF(func(w *binary.Writer) {
|
||||
w.WriteUInt16(1)
|
||||
w.WriteUInt16(0)
|
||||
w.WriteUInt16(uint16(len(e.Display)))
|
||||
w.WriteByte(0)
|
||||
w.WriteUInt32(uint32(e.Target))
|
||||
w.WriteUInt16(0)
|
||||
}),
|
||||
},
|
||||
})
|
||||
r = append(r, &msg.Elem{Text: &msg.Text{Str: " "}})
|
||||
case *GroupImageElement:
|
||||
r = append(r, &msg.Elem{
|
||||
CustomFace: &msg.CustomFace{
|
||||
|
Loading…
x
Reference in New Issue
Block a user