1
0
mirror of https://github.com/Mrs4s/MiraiGo.git synced 2025-05-04 02:57:40 +08:00
MiraiGo/message/message.go
2020-07-06 03:56:25 +08:00

117 lines
2.7 KiB
Go

package message
import (
"github.com/Mrs4s/MiraiGo/binary"
"github.com/Mrs4s/MiraiGo/client/pb/msg"
)
type PrivateMessage struct {
Id int32
Sender *Sender
Elements []IMessageElement
}
type GroupMessage struct {
Id int32
GroupUin int64
GroupName string
Sender *Sender
Elements []IMessageElement
IsAdministrator bool
}
type SendingMessage struct {
Elements []IMessageElement
}
type Sender struct {
Uin int64
Nickname string
CardName string
IsFriend bool
}
type IMessageElement interface {
Type() ElementType
}
type ElementType int
const (
Text ElementType = iota
Image
Face
)
func (s *Sender) IsAnonymous() bool {
return s.Uin == 80000000
}
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 + " ] "
case *FaceElement:
res += " [" + e.Name + "] "
}
}
return
}
func (msg *GroupMessage) ToString() (res string) {
for _, elem := range msg.Elements {
switch e := elem.(type) {
case *TextElement:
res += e.Content
case *ImageElement:
res += " [Image= " + e.Filename + " ] "
case *FaceElement:
res += " [" + e.Name + "] "
case *GroupImageElement:
res += "[Image= " + e.ImageId + " ]"
}
}
return
}
func (msg *SendingMessage) Append(e IMessageElement) *SendingMessage {
msg.Elements = append(msg.Elements, e)
return msg
}
func ToProtoElems(elems []IMessageElement) (r []*msg.Elem) {
for _, elem := range elems {
switch e := elem.(type) {
case *TextElement:
r = append(r, &msg.Elem{
Text: &msg.Text{
Str: e.Content,
},
})
case *FaceElement:
r = append(r, &msg.Elem{
Face: &msg.Face{
Index: e.Index,
Old: binary.ToBytes(int16(0x1445 - 4 + e.Index)),
Buf: []byte{0x00, 0x01, 0x00, 0x04, 0x52, 0xCC, 0xF5, 0xD0},
},
})
case *GroupImageElement:
r = append(r, &msg.Elem{
CustomFace: &msg.CustomFace{
FilePath: e.ImageId,
Md5: e.Md5[:],
Flag: make([]byte, 4),
OldData: []byte{0x15, 0x36, 0x20, 0x39, 0x32, 0x6B, 0x41, 0x31, 0x00, 0x38, 0x37, 0x32, 0x66, 0x30, 0x36, 0x36, 0x30, 0x33, 0x61, 0x65, 0x31, 0x30, 0x33, 0x62, 0x37, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x35, 0x30, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7B, 0x30, 0x31, 0x45, 0x39, 0x34, 0x35, 0x31, 0x42, 0x2D, 0x37, 0x30, 0x45, 0x44,
0x2D, 0x45, 0x41, 0x45, 0x33, 0x2D, 0x42, 0x33, 0x37, 0x43, 0x2D, 0x31, 0x30, 0x31, 0x46, 0x31, 0x45, 0x45, 0x42, 0x46, 0x35, 0x42, 0x35, 0x7D, 0x2E, 0x70, 0x6E, 0x67, 0x41},
},
})
}
}
return
}