mirror of
https://github.com/Mrs4s/MiraiGo.git
synced 2025-05-04 19:17:38 +08:00
Merge pull request #49 from wdvxdr1123/master
feature support flash pic
This commit is contained in:
commit
94e56eff45
@ -1,7 +1,7 @@
|
|||||||
// Code generated by protoc-gen-go. DO NOT EDIT.
|
// Code generated by protoc-gen-go. DO NOT EDIT.
|
||||||
// versions:
|
// versions:
|
||||||
// protoc-gen-go v1.25.0
|
// protoc-gen-go v1.25.0
|
||||||
// protoc v3.11.4
|
// protoc v3.13.0
|
||||||
// source: msg.proto
|
// source: msg.proto
|
||||||
|
|
||||||
package msg
|
package msg
|
||||||
@ -6018,6 +6018,61 @@ func (x *PbMultiMsgTransmit) GetPbItemList() []*PbMultiMsgItem {
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
type MsgElemInfoServtype3 struct {
|
||||||
|
state protoimpl.MessageState
|
||||||
|
sizeCache protoimpl.SizeCache
|
||||||
|
unknownFields protoimpl.UnknownFields
|
||||||
|
|
||||||
|
FlashTroopPic *CustomFace `protobuf:"bytes,1,opt,name=flash_troop_pic,json=flashTroopPic,proto3" json:"flash_troop_pic,omitempty"`
|
||||||
|
FlashC2CPic *NotOnlineImage `protobuf:"bytes,2,opt,name=flash_c2c_pic,json=flashC2cPic,proto3" json:"flash_c2c_pic,omitempty"`
|
||||||
|
}
|
||||||
|
|
||||||
|
func (x *MsgElemInfoServtype3) Reset() {
|
||||||
|
*x = MsgElemInfoServtype3{}
|
||||||
|
if protoimpl.UnsafeEnabled {
|
||||||
|
mi := &file_msg_proto_msgTypes[56]
|
||||||
|
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
|
||||||
|
ms.StoreMessageInfo(mi)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func (x *MsgElemInfoServtype3) String() string {
|
||||||
|
return protoimpl.X.MessageStringOf(x)
|
||||||
|
}
|
||||||
|
|
||||||
|
func (*MsgElemInfoServtype3) ProtoMessage() {}
|
||||||
|
|
||||||
|
func (x *MsgElemInfoServtype3) ProtoReflect() protoreflect.Message {
|
||||||
|
mi := &file_msg_proto_msgTypes[56]
|
||||||
|
if protoimpl.UnsafeEnabled && x != nil {
|
||||||
|
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
|
||||||
|
if ms.LoadMessageInfo() == nil {
|
||||||
|
ms.StoreMessageInfo(mi)
|
||||||
|
}
|
||||||
|
return ms
|
||||||
|
}
|
||||||
|
return mi.MessageOf(x)
|
||||||
|
}
|
||||||
|
|
||||||
|
// Deprecated: Use MsgElemInfoServtype3.ProtoReflect.Descriptor instead.
|
||||||
|
func (*MsgElemInfoServtype3) Descriptor() ([]byte, []int) {
|
||||||
|
return file_msg_proto_rawDescGZIP(), []int{56}
|
||||||
|
}
|
||||||
|
|
||||||
|
func (x *MsgElemInfoServtype3) GetFlashTroopPic() *CustomFace {
|
||||||
|
if x != nil {
|
||||||
|
return x.FlashTroopPic
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (x *MsgElemInfoServtype3) GetFlashC2CPic() *NotOnlineImage {
|
||||||
|
if x != nil {
|
||||||
|
return x.FlashC2CPic
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
var File_msg_proto protoreflect.FileDescriptor
|
var File_msg_proto protoreflect.FileDescriptor
|
||||||
|
|
||||||
var file_msg_proto_rawDesc = []byte{
|
var file_msg_proto_rawDesc = []byte{
|
||||||
@ -6969,11 +7024,19 @@ var file_msg_proto_rawDesc = []byte{
|
|||||||
0x73, 0x73, 0x61, 0x67, 0x65, 0x52, 0x03, 0x6d, 0x73, 0x67, 0x12, 0x2f, 0x0a, 0x0a, 0x70, 0x62,
|
0x73, 0x73, 0x61, 0x67, 0x65, 0x52, 0x03, 0x6d, 0x73, 0x67, 0x12, 0x2f, 0x0a, 0x0a, 0x70, 0x62,
|
||||||
0x49, 0x74, 0x65, 0x6d, 0x4c, 0x69, 0x73, 0x74, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0f,
|
0x49, 0x74, 0x65, 0x6d, 0x4c, 0x69, 0x73, 0x74, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0f,
|
||||||
0x2e, 0x50, 0x62, 0x4d, 0x75, 0x6c, 0x74, 0x69, 0x4d, 0x73, 0x67, 0x49, 0x74, 0x65, 0x6d, 0x52,
|
0x2e, 0x50, 0x62, 0x4d, 0x75, 0x6c, 0x74, 0x69, 0x4d, 0x73, 0x67, 0x49, 0x74, 0x65, 0x6d, 0x52,
|
||||||
0x0a, 0x70, 0x62, 0x49, 0x74, 0x65, 0x6d, 0x4c, 0x69, 0x73, 0x74, 0x2a, 0x2e, 0x0a, 0x08, 0x53,
|
0x0a, 0x70, 0x62, 0x49, 0x74, 0x65, 0x6d, 0x4c, 0x69, 0x73, 0x74, 0x22, 0x81, 0x01, 0x0a, 0x15,
|
||||||
0x79, 0x6e, 0x63, 0x46, 0x6c, 0x61, 0x67, 0x12, 0x09, 0x0a, 0x05, 0x53, 0x54, 0x41, 0x52, 0x54,
|
0x4d, 0x73, 0x67, 0x45, 0x6c, 0x65, 0x6d, 0x49, 0x6e, 0x66, 0x6f, 0x5f, 0x73, 0x65, 0x72, 0x76,
|
||||||
0x10, 0x00, 0x12, 0x0d, 0x0a, 0x09, 0x43, 0x4f, 0x4e, 0x54, 0x49, 0x4e, 0x55, 0x4d, 0x45, 0x10,
|
0x74, 0x79, 0x70, 0x65, 0x33, 0x12, 0x33, 0x0a, 0x0f, 0x66, 0x6c, 0x61, 0x73, 0x68, 0x5f, 0x74,
|
||||||
0x01, 0x12, 0x08, 0x0a, 0x04, 0x53, 0x54, 0x4f, 0x50, 0x10, 0x02, 0x42, 0x07, 0x5a, 0x05, 0x2e,
|
0x72, 0x6f, 0x6f, 0x70, 0x5f, 0x70, 0x69, 0x63, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0b,
|
||||||
0x3b, 0x6d, 0x73, 0x67, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
|
0x2e, 0x43, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x46, 0x61, 0x63, 0x65, 0x52, 0x0d, 0x66, 0x6c, 0x61,
|
||||||
|
0x73, 0x68, 0x54, 0x72, 0x6f, 0x6f, 0x70, 0x50, 0x69, 0x63, 0x12, 0x33, 0x0a, 0x0d, 0x66, 0x6c,
|
||||||
|
0x61, 0x73, 0x68, 0x5f, 0x63, 0x32, 0x63, 0x5f, 0x70, 0x69, 0x63, 0x18, 0x02, 0x20, 0x01, 0x28,
|
||||||
|
0x0b, 0x32, 0x0f, 0x2e, 0x4e, 0x6f, 0x74, 0x4f, 0x6e, 0x6c, 0x69, 0x6e, 0x65, 0x49, 0x6d, 0x61,
|
||||||
|
0x67, 0x65, 0x52, 0x0b, 0x66, 0x6c, 0x61, 0x73, 0x68, 0x43, 0x32, 0x63, 0x50, 0x69, 0x63, 0x2a,
|
||||||
|
0x2e, 0x0a, 0x08, 0x53, 0x79, 0x6e, 0x63, 0x46, 0x6c, 0x61, 0x67, 0x12, 0x09, 0x0a, 0x05, 0x53,
|
||||||
|
0x54, 0x41, 0x52, 0x54, 0x10, 0x00, 0x12, 0x0d, 0x0a, 0x09, 0x43, 0x4f, 0x4e, 0x54, 0x49, 0x4e,
|
||||||
|
0x55, 0x4d, 0x45, 0x10, 0x01, 0x12, 0x08, 0x0a, 0x04, 0x53, 0x54, 0x4f, 0x50, 0x10, 0x02, 0x42,
|
||||||
|
0x07, 0x5a, 0x05, 0x2e, 0x3b, 0x6d, 0x73, 0x67, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
|
||||||
}
|
}
|
||||||
|
|
||||||
var (
|
var (
|
||||||
@ -6989,7 +7052,7 @@ func file_msg_proto_rawDescGZIP() []byte {
|
|||||||
}
|
}
|
||||||
|
|
||||||
var file_msg_proto_enumTypes = make([]protoimpl.EnumInfo, 1)
|
var file_msg_proto_enumTypes = make([]protoimpl.EnumInfo, 1)
|
||||||
var file_msg_proto_msgTypes = make([]protoimpl.MessageInfo, 56)
|
var file_msg_proto_msgTypes = make([]protoimpl.MessageInfo, 57)
|
||||||
var file_msg_proto_goTypes = []interface{}{
|
var file_msg_proto_goTypes = []interface{}{
|
||||||
(SyncFlag)(0), // 0: SyncFlag
|
(SyncFlag)(0), // 0: SyncFlag
|
||||||
(*GetMessageRequest)(nil), // 1: GetMessageRequest
|
(*GetMessageRequest)(nil), // 1: GetMessageRequest
|
||||||
@ -7048,6 +7111,7 @@ var file_msg_proto_goTypes = []interface{}{
|
|||||||
(*PbMultiMsgItem)(nil), // 54: PbMultiMsgItem
|
(*PbMultiMsgItem)(nil), // 54: PbMultiMsgItem
|
||||||
(*PbMultiMsgNew)(nil), // 55: PbMultiMsgNew
|
(*PbMultiMsgNew)(nil), // 55: PbMultiMsgNew
|
||||||
(*PbMultiMsgTransmit)(nil), // 56: PbMultiMsgTransmit
|
(*PbMultiMsgTransmit)(nil), // 56: PbMultiMsgTransmit
|
||||||
|
(*MsgElemInfoServtype3)(nil), // 57: MsgElemInfo_servtype3
|
||||||
}
|
}
|
||||||
var file_msg_proto_depIdxs = []int32{
|
var file_msg_proto_depIdxs = []int32{
|
||||||
0, // 0: GetMessageRequest.syncFlag:type_name -> SyncFlag
|
0, // 0: GetMessageRequest.syncFlag:type_name -> SyncFlag
|
||||||
@ -7109,11 +7173,13 @@ var file_msg_proto_depIdxs = []int32{
|
|||||||
17, // 56: PbMultiMsgNew.msg:type_name -> Message
|
17, // 56: PbMultiMsgNew.msg:type_name -> Message
|
||||||
17, // 57: PbMultiMsgTransmit.msg:type_name -> Message
|
17, // 57: PbMultiMsgTransmit.msg:type_name -> Message
|
||||||
54, // 58: PbMultiMsgTransmit.pbItemList:type_name -> PbMultiMsgItem
|
54, // 58: PbMultiMsgTransmit.pbItemList:type_name -> PbMultiMsgItem
|
||||||
59, // [59:59] is the sub-list for method output_type
|
41, // 59: MsgElemInfo_servtype3.flash_troop_pic:type_name -> CustomFace
|
||||||
59, // [59:59] is the sub-list for method input_type
|
31, // 60: MsgElemInfo_servtype3.flash_c2c_pic:type_name -> NotOnlineImage
|
||||||
59, // [59:59] is the sub-list for extension type_name
|
61, // [61:61] is the sub-list for method output_type
|
||||||
59, // [59:59] is the sub-list for extension extendee
|
61, // [61:61] is the sub-list for method input_type
|
||||||
0, // [0:59] is the sub-list for field type_name
|
61, // [61:61] is the sub-list for extension type_name
|
||||||
|
61, // [61:61] is the sub-list for extension extendee
|
||||||
|
0, // [0:61] is the sub-list for field type_name
|
||||||
}
|
}
|
||||||
|
|
||||||
func init() { file_msg_proto_init() }
|
func init() { file_msg_proto_init() }
|
||||||
@ -7794,6 +7860,18 @@ func file_msg_proto_init() {
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
file_msg_proto_msgTypes[56].Exporter = func(v interface{}, i int) interface{} {
|
||||||
|
switch v := v.(*MsgElemInfoServtype3); i {
|
||||||
|
case 0:
|
||||||
|
return &v.state
|
||||||
|
case 1:
|
||||||
|
return &v.sizeCache
|
||||||
|
case 2:
|
||||||
|
return &v.unknownFields
|
||||||
|
default:
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
type x struct{}
|
type x struct{}
|
||||||
out := protoimpl.TypeBuilder{
|
out := protoimpl.TypeBuilder{
|
||||||
@ -7801,7 +7879,7 @@ func file_msg_proto_init() {
|
|||||||
GoPackagePath: reflect.TypeOf(x{}).PkgPath(),
|
GoPackagePath: reflect.TypeOf(x{}).PkgPath(),
|
||||||
RawDescriptor: file_msg_proto_rawDesc,
|
RawDescriptor: file_msg_proto_rawDesc,
|
||||||
NumEnums: 1,
|
NumEnums: 1,
|
||||||
NumMessages: 56,
|
NumMessages: 57,
|
||||||
NumExtensions: 0,
|
NumExtensions: 0,
|
||||||
NumServices: 0,
|
NumServices: 0,
|
||||||
},
|
},
|
||||||
|
@ -698,6 +698,11 @@ message PbMultiMsgTransmit {
|
|||||||
repeated PbMultiMsgItem pbItemList = 2;
|
repeated PbMultiMsgItem pbItemList = 2;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
message MsgElemInfo_servtype3{
|
||||||
|
CustomFace flash_troop_pic = 1;
|
||||||
|
NotOnlineImage flash_c2c_pic = 2;
|
||||||
|
}
|
||||||
|
|
||||||
enum SyncFlag {
|
enum SyncFlag {
|
||||||
START = 0;
|
START = 0;
|
||||||
CONTINUME = 1;
|
CONTINUME = 1;
|
||||||
|
@ -107,6 +107,14 @@ type RedBagElement struct {
|
|||||||
Title string
|
Title string
|
||||||
}
|
}
|
||||||
|
|
||||||
|
type GroupFlashPicElement struct {
|
||||||
|
GroupImageElement
|
||||||
|
}
|
||||||
|
|
||||||
|
type FriendFlashPicElement struct{
|
||||||
|
FriendImageElement
|
||||||
|
}
|
||||||
|
|
||||||
type RedBagMessageType int
|
type RedBagMessageType int
|
||||||
|
|
||||||
const (
|
const (
|
||||||
|
@ -78,6 +78,10 @@ type (
|
|||||||
Type() ElementType
|
Type() ElementType
|
||||||
}
|
}
|
||||||
|
|
||||||
|
IRichMessageElement interface {
|
||||||
|
Pack() []*msg.Elem
|
||||||
|
}
|
||||||
|
|
||||||
ElementType int
|
ElementType int
|
||||||
|
|
||||||
GroupGift int
|
GroupGift int
|
||||||
@ -271,123 +275,9 @@ func ToProtoElems(elems []IMessageElement, generalFlags bool) (r []*msg.Elem) {
|
|||||||
})
|
})
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
imgOld := []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}
|
|
||||||
for _, elem := range elems {
|
for _, elem := range elems {
|
||||||
switch e := elem.(type) {
|
if e,ok := elem.(IRichMessageElement);ok{
|
||||||
case *TextElement:
|
r = append(r, e.Pack()...)
|
||||||
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 *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([]rune(e.Display))))
|
|
||||||
w.WriteByte(func() byte {
|
|
||||||
if e.Target == 0 {
|
|
||||||
return 1
|
|
||||||
}
|
|
||||||
return 0
|
|
||||||
}())
|
|
||||||
w.WriteUInt32(uint32(e.Target))
|
|
||||||
w.WriteUInt16(0)
|
|
||||||
}),
|
|
||||||
},
|
|
||||||
})
|
|
||||||
r = append(r, &msg.Elem{Text: &msg.Text{Str: " "}})
|
|
||||||
case *ImageElement:
|
|
||||||
r = append(r, &msg.Elem{
|
|
||||||
CustomFace: &msg.CustomFace{
|
|
||||||
FilePath: e.Filename,
|
|
||||||
Md5: e.Md5,
|
|
||||||
Size: e.Size,
|
|
||||||
Flag: make([]byte, 4),
|
|
||||||
OldData: imgOld,
|
|
||||||
},
|
|
||||||
})
|
|
||||||
case *GroupImageElement:
|
|
||||||
r = append(r, &msg.Elem{
|
|
||||||
CustomFace: &msg.CustomFace{
|
|
||||||
FileType: 66,
|
|
||||||
Useful: 1,
|
|
||||||
Origin: 1,
|
|
||||||
FileId: int32(e.FileId),
|
|
||||||
FilePath: e.ImageId,
|
|
||||||
Size: e.Size,
|
|
||||||
Md5: e.Md5[:],
|
|
||||||
Flag: make([]byte, 4),
|
|
||||||
//OldData: imgOld,
|
|
||||||
},
|
|
||||||
})
|
|
||||||
case *FriendImageElement:
|
|
||||||
r = append(r, &msg.Elem{
|
|
||||||
NotOnlineImage: &msg.NotOnlineImage{
|
|
||||||
FilePath: e.ImageId,
|
|
||||||
ResId: e.ImageId,
|
|
||||||
OldPicMd5: false,
|
|
||||||
PicMd5: e.Md5,
|
|
||||||
DownloadPath: e.ImageId,
|
|
||||||
Original: 1,
|
|
||||||
PbReserve: []byte{0x78, 0x02},
|
|
||||||
},
|
|
||||||
})
|
|
||||||
case *ServiceElement:
|
|
||||||
if e.Id == 35 {
|
|
||||||
r = append(r, &msg.Elem{
|
|
||||||
RichMsg: &msg.RichMsg{
|
|
||||||
Template1: append([]byte{1}, binary.ZlibCompress([]byte(e.Content))...),
|
|
||||||
ServiceId: e.Id,
|
|
||||||
MsgResId: []byte{},
|
|
||||||
},
|
|
||||||
})
|
|
||||||
r = append(r, &msg.Elem{
|
|
||||||
Text: &msg.Text{
|
|
||||||
Str: "你的QQ暂不支持查看[转发多条消息],请期待后续版本。",
|
|
||||||
},
|
|
||||||
})
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
if e.Id == 33 {
|
|
||||||
r = append(r, &msg.Elem{
|
|
||||||
Text: &msg.Text{Str: e.ResId},
|
|
||||||
})
|
|
||||||
r = append(r, &msg.Elem{
|
|
||||||
RichMsg: &msg.RichMsg{
|
|
||||||
Template1: append([]byte{1}, binary.ZlibCompress([]byte(e.Content))...),
|
|
||||||
ServiceId: e.Id,
|
|
||||||
MsgResId: []byte{},
|
|
||||||
},
|
|
||||||
})
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
r = append(r, &msg.Elem{
|
|
||||||
RichMsg: &msg.RichMsg{
|
|
||||||
Template1: append([]byte{1}, binary.ZlibCompress([]byte(e.Content))...),
|
|
||||||
ServiceId: e.Id,
|
|
||||||
},
|
|
||||||
})
|
|
||||||
case *LightAppElement:
|
|
||||||
r = append(r, &msg.Elem{
|
|
||||||
LightApp: &msg.LightAppElem{
|
|
||||||
Data: append([]byte{1}, binary.ZlibCompress([]byte(e.Content))...),
|
|
||||||
MsgResid: []byte{1},
|
|
||||||
},
|
|
||||||
})
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if generalFlags {
|
if generalFlags {
|
||||||
@ -584,6 +474,29 @@ func ParseMessageElems(elems []*msg.Elem) []IMessageElement {
|
|||||||
if elem.Face != nil {
|
if elem.Face != nil {
|
||||||
res = append(res, NewFace(elem.Face.Index))
|
res = append(res, NewFace(elem.Face.Index))
|
||||||
}
|
}
|
||||||
|
if elem.CommonElem != nil {
|
||||||
|
switch elem.CommonElem.ServiceType {
|
||||||
|
case 3:
|
||||||
|
flash := &msg.MsgElemInfoServtype3{}
|
||||||
|
_ = proto.Unmarshal(elem.CommonElem.PbElem, flash)
|
||||||
|
if flash.FlashTroopPic != nil {
|
||||||
|
res = append(res, &ImageElement{
|
||||||
|
Filename: flash.FlashTroopPic.FilePath,
|
||||||
|
Size: flash.FlashTroopPic.Size,
|
||||||
|
Width: flash.FlashTroopPic.Width,
|
||||||
|
Height: flash.FlashTroopPic.Height,
|
||||||
|
Md5: flash.FlashTroopPic.Md5,
|
||||||
|
})
|
||||||
|
}
|
||||||
|
if flash.FlashC2CPic != nil {
|
||||||
|
res = append(res, &ImageElement{
|
||||||
|
Filename: flash.FlashC2CPic.FilePath,
|
||||||
|
Size: flash.FlashC2CPic.FileLen,
|
||||||
|
Md5: flash.FlashC2CPic.PicMd5,
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
return res
|
return res
|
||||||
}
|
}
|
||||||
|
211
message/pack.go
Normal file
211
message/pack.go
Normal file
@ -0,0 +1,211 @@
|
|||||||
|
package message
|
||||||
|
|
||||||
|
import (
|
||||||
|
"github.com/Mrs4s/MiraiGo/binary"
|
||||||
|
"github.com/Mrs4s/MiraiGo/client/pb/msg"
|
||||||
|
"github.com/golang/protobuf/proto"
|
||||||
|
)
|
||||||
|
|
||||||
|
var imgOld = []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}
|
||||||
|
|
||||||
|
func (e *TextElement) Pack() (r []*msg.Elem) {
|
||||||
|
r = append(r, &msg.Elem{
|
||||||
|
Text: &msg.Text{
|
||||||
|
Str: e.Content,
|
||||||
|
},
|
||||||
|
})
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
func (e *FaceElement) Pack() (r []*msg.Elem) {
|
||||||
|
r = []*msg.Elem{}
|
||||||
|
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},
|
||||||
|
},
|
||||||
|
})
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
func (e *AtElement) Pack() (r []*msg.Elem) {
|
||||||
|
r = []*msg.Elem{}
|
||||||
|
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([]rune(e.Display))))
|
||||||
|
w.WriteByte(func() byte {
|
||||||
|
if e.Target == 0 {
|
||||||
|
return 1
|
||||||
|
}
|
||||||
|
return 0
|
||||||
|
}())
|
||||||
|
w.WriteUInt32(uint32(e.Target))
|
||||||
|
w.WriteUInt16(0)
|
||||||
|
}),
|
||||||
|
},
|
||||||
|
})
|
||||||
|
r = append(r, &msg.Elem{Text: &msg.Text{Str: " "}})
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
func (e *ImageElement) Pack() (r []*msg.Elem) {
|
||||||
|
r = []*msg.Elem{}
|
||||||
|
r = append(r, &msg.Elem{
|
||||||
|
CustomFace: &msg.CustomFace{
|
||||||
|
FilePath: e.Filename,
|
||||||
|
Md5: e.Md5,
|
||||||
|
Size: e.Size,
|
||||||
|
Flag: make([]byte, 4),
|
||||||
|
OldData: imgOld,
|
||||||
|
},
|
||||||
|
})
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
func (e *GroupImageElement) Pack(r []*msg.Elem) {
|
||||||
|
r = []*msg.Elem{}
|
||||||
|
r = append(r, &msg.Elem{
|
||||||
|
CustomFace: &msg.CustomFace{
|
||||||
|
FileType: 66,
|
||||||
|
Useful: 1,
|
||||||
|
Origin: 1,
|
||||||
|
FileId: int32(e.FileId),
|
||||||
|
FilePath: e.ImageId,
|
||||||
|
Size: e.Size,
|
||||||
|
Md5: e.Md5[:],
|
||||||
|
Flag: make([]byte, 4),
|
||||||
|
//OldData: imgOld,
|
||||||
|
},
|
||||||
|
})
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
func (e *FriendImageElement) Pack() (r []*msg.Elem) {
|
||||||
|
r = []*msg.Elem{}
|
||||||
|
r = append(r, &msg.Elem{
|
||||||
|
NotOnlineImage: &msg.NotOnlineImage{
|
||||||
|
FilePath: e.ImageId,
|
||||||
|
ResId: e.ImageId,
|
||||||
|
OldPicMd5: false,
|
||||||
|
PicMd5: e.Md5,
|
||||||
|
DownloadPath: e.ImageId,
|
||||||
|
Original: 1,
|
||||||
|
PbReserve: []byte{0x78, 0x02},
|
||||||
|
},
|
||||||
|
})
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
func (e *ServiceElement) Pack() (r []*msg.Elem) {
|
||||||
|
r = []*msg.Elem{}
|
||||||
|
if e.Id == 35 {
|
||||||
|
r = append(r, &msg.Elem{
|
||||||
|
RichMsg: &msg.RichMsg{
|
||||||
|
Template1: append([]byte{1}, binary.ZlibCompress([]byte(e.Content))...),
|
||||||
|
ServiceId: e.Id,
|
||||||
|
MsgResId: []byte{},
|
||||||
|
},
|
||||||
|
})
|
||||||
|
r = append(r, &msg.Elem{
|
||||||
|
Text: &msg.Text{
|
||||||
|
Str: "你的QQ暂不支持查看[转发多条消息],请期待后续版本。",
|
||||||
|
},
|
||||||
|
})
|
||||||
|
return
|
||||||
|
}
|
||||||
|
if e.Id == 33 {
|
||||||
|
r = append(r, &msg.Elem{
|
||||||
|
Text: &msg.Text{Str: e.ResId},
|
||||||
|
})
|
||||||
|
r = append(r, &msg.Elem{
|
||||||
|
RichMsg: &msg.RichMsg{
|
||||||
|
Template1: append([]byte{1}, binary.ZlibCompress([]byte(e.Content))...),
|
||||||
|
ServiceId: e.Id,
|
||||||
|
MsgResId: []byte{},
|
||||||
|
},
|
||||||
|
})
|
||||||
|
return
|
||||||
|
}
|
||||||
|
r = append(r, &msg.Elem{
|
||||||
|
RichMsg: &msg.RichMsg{
|
||||||
|
Template1: append([]byte{1}, binary.ZlibCompress([]byte(e.Content))...),
|
||||||
|
ServiceId: e.Id,
|
||||||
|
},
|
||||||
|
})
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
func (e *LightAppElement) Pack() (r []*msg.Elem) {
|
||||||
|
r = []*msg.Elem{}
|
||||||
|
r = append(r, &msg.Elem{
|
||||||
|
LightApp: &msg.LightAppElem{
|
||||||
|
Data: append([]byte{1}, binary.ZlibCompress([]byte(e.Content))...),
|
||||||
|
MsgResid: []byte{1},
|
||||||
|
},
|
||||||
|
})
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
func (e *FriendFlashPicElement) Pack() (r []*msg.Elem) {
|
||||||
|
r = []*msg.Elem{}
|
||||||
|
flash := &msg.MsgElemInfoServtype3{
|
||||||
|
FlashC2CPic: &msg.NotOnlineImage{
|
||||||
|
FilePath: e.ImageId,
|
||||||
|
ResId: e.ImageId,
|
||||||
|
OldPicMd5: false,
|
||||||
|
PicMd5: e.Md5,
|
||||||
|
DownloadPath: e.ImageId,
|
||||||
|
Original: 1,
|
||||||
|
PbReserve: []byte{0x78, 0x02},
|
||||||
|
},
|
||||||
|
}
|
||||||
|
data, _ := proto.Marshal(flash)
|
||||||
|
r = append(r, &msg.Elem{
|
||||||
|
CommonElem: &msg.CommonElem{
|
||||||
|
ServiceType: 3,
|
||||||
|
PbElem: data,
|
||||||
|
},
|
||||||
|
})
|
||||||
|
r = append(r, &msg.Elem{
|
||||||
|
Text: &msg.Text{
|
||||||
|
Str: "[闪照]请使用新版手机QQ查看闪照。",
|
||||||
|
},
|
||||||
|
})
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
func (e *GroupFlashPicElement) Pack() (r []*msg.Elem) {
|
||||||
|
r = []*msg.Elem{}
|
||||||
|
flash := &msg.MsgElemInfoServtype3{
|
||||||
|
FlashTroopPic: &msg.CustomFace{
|
||||||
|
FileType: 66,
|
||||||
|
Useful: 1,
|
||||||
|
Origin: 1,
|
||||||
|
FileId: int32(e.FileId),
|
||||||
|
FilePath: e.ImageId,
|
||||||
|
Size: e.Size,
|
||||||
|
Md5: e.Md5[:],
|
||||||
|
Flag: make([]byte, 4),
|
||||||
|
},
|
||||||
|
}
|
||||||
|
data, _ := proto.Marshal(flash)
|
||||||
|
r = append(r, &msg.Elem{
|
||||||
|
CommonElem: &msg.CommonElem{
|
||||||
|
ServiceType: 3,
|
||||||
|
PbElem: data,
|
||||||
|
},
|
||||||
|
})
|
||||||
|
r = append(r, &msg.Elem{
|
||||||
|
Text: &msg.Text{
|
||||||
|
Str: "[闪照]请使用新版手机QQ查看闪照。",
|
||||||
|
},
|
||||||
|
})
|
||||||
|
return
|
||||||
|
}
|
Loading…
x
Reference in New Issue
Block a user