1
0
mirror of https://github.com/Mrs4s/MiraiGo.git synced 2025-05-04 19:17:38 +08:00

Merge pull request #1 from Mrs4s/master

1
This commit is contained in:
wdvxdr1123 2020-09-13 12:20:17 +08:00 committed by GitHub
commit 8716a0b913
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
24 changed files with 3084 additions and 1386 deletions

View File

@ -42,6 +42,7 @@ qq-android协议的golang实现 移植于mirai
- [x] 新好友 - [x] 新好友
- [x] 新好友请求 - [x] 新好友请求
- [x] 客户端离线 - [x] 客户端离线
- [x] 群提示 (戳一戳/运气王等)
#### 主动操作 #### 主动操作
> 为防止滥用,将不支持主动邀请新成员进群 > 为防止滥用,将不支持主动邀请新成员进群
@ -57,7 +58,7 @@ qq-android协议的golang实现 移植于mirai
- [x] 处理被邀请加群请求 - [x] 处理被邀请加群请求
- [x] 处理好友请求 - [x] 处理好友请求
- [x] 撤回群消息 - [x] 撤回群消息
- [ ] 群公告设置 - [x] 群公告设置
- [x] 获取群文件下载链接 - [x] 获取群文件下载链接
- [x] 群设置 (全体禁言/群名) - [x] 群设置 (全体禁言/群名)
- [x] 修改群成员Card - [x] 修改群成员Card
@ -65,3 +66,4 @@ qq-android协议的golang实现 移植于mirai
- [ ] ~~群成员邀请~~ - [ ] ~~群成员邀请~~
- [x] 群成员禁言/解除禁言 - [x] 群成员禁言/解除禁言
- [x] T出群成员 - [x] T出群成员
- [x] 戳一戳群友

View File

@ -27,6 +27,12 @@ type (
Map map[string]map[string][]byte `jceId:"0"` Map map[string]map[string][]byte `jceId:"0"`
} }
SsoServerInfo struct {
Server string `jceId:"1"`
Port int32 `jceId:"2"`
Location string `jceId:"8"`
}
SvcReqRegister struct { SvcReqRegister struct {
IJceStruct IJceStruct
Uin int64 `jceId:"0"` Uin int64 `jceId:"0"`
@ -358,6 +364,12 @@ func (pkt *RequestDataVersion2) ReadFrom(r *JceReader) {
}) })
} }
func (pkt *SsoServerInfo) ReadFrom(r *JceReader) {
pkt.Server = r.ReadString(1)
pkt.Port = r.ReadInt32(2)
pkt.Location = r.ReadString(8)
}
func (pkt *SvcReqRegister) ToBytes() []byte { func (pkt *SvcReqRegister) ToBytes() []byte {
w := NewJceWriter() w := NewJceWriter()
w.WriteJceStructRaw(pkt) w.WriteJceStructRaw(pkt)

View File

@ -37,9 +37,9 @@ func (c *QQClient) buildLoginPacket() (uint16, []byte) {
w.Write(tlv.T18(16, uint32(c.Uin))) w.Write(tlv.T18(16, uint32(c.Uin)))
w.Write(tlv.T1(uint32(c.Uin), SystemDeviceInfo.IpAddress)) w.Write(tlv.T1(uint32(c.Uin), SystemDeviceInfo.IpAddress))
w.Write(tlv.T106(uint32(c.Uin), 0, c.PasswordMd5, true, SystemDeviceInfo.Guid, SystemDeviceInfo.TgtgtKey)) w.Write(tlv.T106(uint32(c.Uin), 0, uint32(SystemDeviceInfo.Protocol), c.PasswordMd5, true, SystemDeviceInfo.Guid, SystemDeviceInfo.TgtgtKey))
w.Write(tlv.T116(184024956, 0x10400)) w.Write(tlv.T116(184024956, 0x10400))
w.Write(tlv.T100()) w.Write(tlv.T100(uint32(SystemDeviceInfo.Protocol)))
w.Write(tlv.T107(0)) w.Write(tlv.T107(0))
w.Write(tlv.T142("com.tencent.mobileqq")) w.Write(tlv.T142("com.tencent.mobileqq"))
w.Write(tlv.T144( w.Write(tlv.T144(
@ -86,7 +86,7 @@ func (c *QQClient) buildLoginPacket() (uint16, []byte) {
w.Write(tlv.T521()) w.Write(tlv.T521())
w.Write(tlv.T525(tlv.T536([]byte{0x01, 0x00}))) w.Write(tlv.T525(tlv.T536([]byte{0x01, 0x00})))
}) })
sso := packets.BuildSsoPacket(seq, "wtlogin.login", SystemDeviceInfo.IMEI, []byte{}, c.OutGoingPacketSessionId, req, c.ksid) sso := packets.BuildSsoPacket(seq, uint32(SystemDeviceInfo.Protocol), "wtlogin.login", SystemDeviceInfo.IMEI, []byte{}, c.OutGoingPacketSessionId, req, c.ksid)
packet := packets.BuildLoginPacket(c.Uin, 2, make([]byte, 16), sso, []byte{}) packet := packets.BuildLoginPacket(c.Uin, 2, make([]byte, 16), sso, []byte{})
return seq, packet return seq, packet
} }
@ -103,7 +103,7 @@ func (c *QQClient) buildDeviceLockLoginPacket(t402 []byte) (uint16, []byte) {
h := md5.Sum(append(append(SystemDeviceInfo.Guid, []byte("stMNokHgxZUGhsYp")...), t402...)) h := md5.Sum(append(append(SystemDeviceInfo.Guid, []byte("stMNokHgxZUGhsYp")...), t402...))
w.Write(tlv.T401(h[:])) w.Write(tlv.T401(h[:]))
}) })
sso := packets.BuildSsoPacket(seq, "wtlogin.login", SystemDeviceInfo.IMEI, []byte{}, c.OutGoingPacketSessionId, req, c.ksid) sso := packets.BuildSsoPacket(seq, uint32(SystemDeviceInfo.Protocol), "wtlogin.login", SystemDeviceInfo.IMEI, []byte{}, c.OutGoingPacketSessionId, req, c.ksid)
packet := packets.BuildLoginPacket(c.Uin, 2, make([]byte, 16), sso, []byte{}) packet := packets.BuildLoginPacket(c.Uin, 2, make([]byte, 16), sso, []byte{})
return seq, packet return seq, packet
} }
@ -118,7 +118,7 @@ func (c *QQClient) buildCaptchaPacket(result string, sign []byte) (uint16, []byt
w.Write(tlv.T104(c.t104)) w.Write(tlv.T104(c.t104))
w.Write(tlv.T116(150470524, 66560)) w.Write(tlv.T116(150470524, 66560))
}) })
sso := packets.BuildSsoPacket(seq, "wtlogin.login", SystemDeviceInfo.IMEI, []byte{}, c.OutGoingPacketSessionId, req, c.ksid) sso := packets.BuildSsoPacket(seq, uint32(SystemDeviceInfo.Protocol), "wtlogin.login", SystemDeviceInfo.IMEI, []byte{}, c.OutGoingPacketSessionId, req, c.ksid)
packet := packets.BuildLoginPacket(c.Uin, 2, make([]byte, 16), sso, []byte{}) packet := packets.BuildLoginPacket(c.Uin, 2, make([]byte, 16), sso, []byte{})
return seq, packet return seq, packet
} }
@ -166,7 +166,7 @@ func (c *QQClient) buildClientRegisterPacket() (uint16, []byte) {
Context: make(map[string]string), Context: make(map[string]string),
Status: make(map[string]string), Status: make(map[string]string),
} }
sso := packets.BuildSsoPacket(seq, "StatSvc.register", SystemDeviceInfo.IMEI, c.sigInfo.tgt, c.OutGoingPacketSessionId, pkt.ToBytes(), c.ksid) sso := packets.BuildSsoPacket(seq, uint32(SystemDeviceInfo.Protocol), "StatSvc.register", SystemDeviceInfo.IMEI, c.sigInfo.tgt, c.OutGoingPacketSessionId, pkt.ToBytes(), c.ksid)
packet := packets.BuildLoginPacket(c.Uin, 1, c.sigInfo.d2Key, sso, c.sigInfo.d2) packet := packets.BuildLoginPacket(c.Uin, 1, c.sigInfo.d2Key, sso, c.sigInfo.d2)
return seq, packet return seq, packet
} }
@ -252,12 +252,12 @@ func (c *QQClient) buildFriendGroupListRequestPacket(friendStartIndex, friendLis
} }
// friendlist.GetTroopListReqV2 // friendlist.GetTroopListReqV2
func (c *QQClient) buildGroupListRequestPacket() (uint16, []byte) { func (c *QQClient) buildGroupListRequestPacket(vecCookie []byte) (uint16, []byte) {
seq := c.nextSeq() seq := c.nextSeq()
req := &jce.TroopListRequest{ req := &jce.TroopListRequest{
Uin: c.Uin, Uin: c.Uin,
GetMSFMsgFlag: 1, GetMSFMsgFlag: 1,
Cookies: []byte{}, Cookies: vecCookie,
GroupInfo: []int64{}, GroupInfo: []int64{},
GroupFlagExt: 1, GroupFlagExt: 1,
Version: 7, Version: 7,
@ -569,7 +569,7 @@ func (c *QQClient) buildImageUploadPacket(data, updKey []byte, commandId int32,
} }
return c.nextGroupDataTransSeq() return c.nextGroupDataTransSeq()
}(), }(),
Appid: 537062409, Appid: int32(SystemDeviceInfo.Protocol),
Dataflag: 4096, Dataflag: 4096,
CommandId: commandId, CommandId: commandId,
LocaleId: 2052, LocaleId: 2052,
@ -915,6 +915,46 @@ func (c *QQClient) buildGroupMutePacket(groupCode, memberUin int64, time uint32)
return seq, packet return seq, packet
} }
// OidbSvc.0xed3
func (c *QQClient) buildGroupPokePacket(groupCode, target int64) (uint16, []byte) {
seq := c.nextSeq()
body := &oidb.DED3ReqBody{
ToUin: target,
GroupCode: groupCode,
}
b, _ := proto.Marshal(body)
req := &oidb.OIDBSSOPkg{
Command: 3795,
ServiceType: 1,
Bodybuffer: b,
}
payload, _ := proto.Marshal(req)
packet := packets.BuildUniPacket(c.Uin, seq, "OidbSvc.0xed3", 1, c.OutGoingPacketSessionId, EmptyBytes, c.sigInfo.d2Key, payload)
return seq, packet
}
// OidbSvc.0x55c_1
func (c *QQClient) buildGroupAdminSetPacket(groupCode, member int64, flag bool) (uint16, []byte) {
seq := c.nextSeq()
req := &oidb.OIDBSSOPkg{
Command: 1372,
ServiceType: 1,
Bodybuffer: binary.NewWriterF(func(w *binary.Writer) {
w.WriteUInt32(uint32(groupCode))
w.WriteUInt32(uint32(member))
w.WriteByte(func() byte {
if flag {
return 1
}
return 0
}())
}),
}
payload, _ := proto.Marshal(req)
packet := packets.BuildUniPacket(c.Uin, seq, "OidbSvc.0x55c_1", 1, c.OutGoingPacketSessionId, EmptyBytes, c.sigInfo.d2Key, payload)
return seq, packet
}
// MultiMsg.ApplyUp // MultiMsg.ApplyUp
func (c *QQClient) buildMultiApplyUpPacket(data, hash []byte, buType int32, groupUin int64) (uint16, []byte) { func (c *QQClient) buildMultiApplyUpPacket(data, hash []byte, buType int32, groupUin int64) (uint16, []byte) {
seq := c.nextSeq() seq := c.nextSeq()

View File

@ -13,10 +13,10 @@ import (
"math/rand" "math/rand"
"net" "net"
"strconv" "strconv"
"strings"
"sync" "sync"
"sync/atomic" "sync/atomic"
"time" "time"
"strings"
"github.com/golang/protobuf/proto" "github.com/golang/protobuf/proto"
@ -30,8 +30,9 @@ import (
) )
type QQClient struct { type QQClient struct {
Uin int64 Uin int64
PasswordMd5 [16]byte PasswordMd5 [16]byte
CustomServer *net.TCPAddr
Nickname string Nickname string
Age uint16 Age uint16
@ -44,6 +45,7 @@ type QQClient struct {
OutGoingPacketSessionId []byte OutGoingPacketSessionId []byte
RandomKey []byte RandomKey []byte
Conn net.Conn Conn net.Conn
ConnectTime time.Time
decoders map[string]func(*QQClient, uint16, []byte) (interface{}, error) decoders map[string]func(*QQClient, uint16, []byte) (interface{}, error)
handlers sync.Map handlers sync.Map
@ -180,13 +182,13 @@ func (c *QQClient) Login() (*LoginResponse, error) {
} }
func (c *QQClient) GetVipInfo(target int64) (*VipInfo, error) { func (c *QQClient) GetVipInfo(target int64) (*VipInfo, error) {
b, err := utils.HttpGetBytes(fmt.Sprintf("https://h5.vip.qq.com/p/mc/cardv2/other?platform=1&qq=%d&adtag=geren&aid=mvip.pingtai.mobileqq.androidziliaoka.fromqita",target),c.getCookiesWithDomain("h5.vip.qq.com")) b, err := utils.HttpGetBytes(fmt.Sprintf("https://h5.vip.qq.com/p/mc/cardv2/other?platform=1&qq=%d&adtag=geren&aid=mvip.pingtai.mobileqq.androidziliaoka.fromqita", target), c.getCookiesWithDomain("h5.vip.qq.com"))
if err != nil { if err != nil {
return nil, err return nil, err
} }
ret := VipInfo{Uin: target}; ret := VipInfo{Uin: target}
b = b[bytes.Index(b, []byte(`<span class="ui-nowrap">`))+24:] b = b[bytes.Index(b, []byte(`<span class="ui-nowrap">`))+24:]
t := b[:bytes.Index(b,[]byte(`</span>`))] t := b[:bytes.Index(b, []byte(`</span>`))]
ret.Name = string(t) ret.Name = string(t)
b = b[bytes.Index(b, []byte(`<small>LV</small>`))+17:] b = b[bytes.Index(b, []byte(`<small>LV</small>`))+17:]
t = b[:bytes.Index(b, []byte(`</p>`))] t = b[:bytes.Index(b, []byte(`</p>`))]
@ -194,7 +196,7 @@ func (c *QQClient) GetVipInfo(target int64) (*VipInfo, error) {
b = b[bytes.Index(b, []byte(`<div class="pk-line pk-line-guest">`))+35:] b = b[bytes.Index(b, []byte(`<div class="pk-line pk-line-guest">`))+35:]
b = b[bytes.Index(b, []byte(`<p>`))+3:] b = b[bytes.Index(b, []byte(`<p>`))+3:]
t = b[:bytes.Index(b, []byte(`<small>倍`))] t = b[:bytes.Index(b, []byte(`<small>倍`))]
ret.LevelSpeed, _ = strconv.ParseFloat(string(t),64) ret.LevelSpeed, _ = strconv.ParseFloat(string(t), 64)
b = b[bytes.Index(b, []byte(`<div class="pk-line pk-line-guest">`))+35:] b = b[bytes.Index(b, []byte(`<div class="pk-line pk-line-guest">`))+35:]
b = b[bytes.Index(b, []byte(`<p>`))+3:] b = b[bytes.Index(b, []byte(`<p>`))+3:]
st := string(b[:bytes.Index(b, []byte(`</p>`))]) st := string(b[:bytes.Index(b, []byte(`</p>`))])
@ -209,7 +211,7 @@ func (c *QQClient) GetVipInfo(target int64) (*VipInfo, error) {
b = b[bytes.Index(b, []byte(`<p>`))+3:] b = b[bytes.Index(b, []byte(`<p>`))+3:]
t = b[:bytes.Index(b, []byte(`</p>`))] t = b[:bytes.Index(b, []byte(`</p>`))]
ret.VipGrowthTotal, _ = strconv.Atoi(string(t)) ret.VipGrowthTotal, _ = strconv.Atoi(string(t))
return &ret,nil return &ret, nil
} }
func (c *QQClient) GetGroupHonorInfo(groupCode int64, honorType HonorType) (*GroupHonorInfo, error) { func (c *QQClient) GetGroupHonorInfo(groupCode int64, honorType HonorType) (*GroupHonorInfo, error) {
@ -296,6 +298,11 @@ func (c *QQClient) SendGroupMessage(groupCode int64, m *message.SendingMessage,
useFram = f[0] useFram = f[0]
} }
imgCount := m.Count(func(e message.IMessageElement) bool { return e.Type() == message.Image }) imgCount := m.Count(func(e message.IMessageElement) bool { return e.Type() == message.Image })
if useFram {
if m.Any(func(e message.IMessageElement) bool { return e.Type() == message.Reply }) {
useFram = false
}
}
msgLen := message.EstimateLength(m.Elements, 703) msgLen := message.EstimateLength(m.Elements, 703)
if msgLen > 5000 || imgCount > 50 { if msgLen > 5000 || imgCount > 50 {
return nil return nil
@ -445,7 +452,7 @@ func (c *QQClient) GetForwardMessage(resId string) *message.ForwardMessage {
ret.Nodes = append(ret.Nodes, &message.ForwardNode{ ret.Nodes = append(ret.Nodes, &message.ForwardNode{
SenderId: m.Head.FromUin, SenderId: m.Head.FromUin,
SenderName: func() string { SenderName: func() string {
if m.Head.MsgType == 82 { if m.Head.MsgType == 82 && m.Head.GroupInfo != nil {
return m.Head.GroupInfo.GroupCard return m.Head.GroupInfo.GroupCard
} }
return m.Head.FromNick return m.Head.FromNick
@ -519,6 +526,10 @@ func (c *QQClient) sendGroupLongOrForwardMessage(groupCode int64, isLong bool, m
return nil return nil
} }
func (c *QQClient) sendGroupPoke(groupCode, target int64) {
_, _ = c.sendAndWait(c.buildGroupPokePacket(groupCode, target))
}
func (c *QQClient) RecallGroupMessage(groupCode int64, msgId, msgInternalId int32) { func (c *QQClient) RecallGroupMessage(groupCode int64, msgId, msgInternalId int32) {
_, pkt := c.buildGroupRecallPacket(groupCode, msgId, msgInternalId) _, pkt := c.buildGroupRecallPacket(groupCode, msgId, msgInternalId)
_ = c.send(pkt) _ = c.send(pkt)
@ -653,7 +664,7 @@ func (c *QQClient) ReloadGroupList() error {
} }
func (c *QQClient) GetGroupList() ([]*GroupInfo, error) { func (c *QQClient) GetGroupList() ([]*GroupInfo, error) {
rsp, err := c.sendAndWait(c.buildGroupListRequestPacket()) rsp, err := c.sendAndWait(c.buildGroupListRequestPacket(EmptyBytes))
if err != nil { if err != nil {
return nil, err return nil, err
} }
@ -803,6 +814,10 @@ func (c *QQClient) editMemberSpecialTitle(groupCode, memberUin int64, title stri
_, _ = c.sendAndWait(c.buildEditSpecialTitlePacket(groupCode, memberUin, title)) _, _ = c.sendAndWait(c.buildEditSpecialTitlePacket(groupCode, memberUin, title))
} }
func (c *QQClient) setGroupAdmin(groupCode, memberUin int64, flag bool) {
_, _ = c.sendAndWait(c.buildGroupAdminSetPacket(groupCode, memberUin, flag))
}
func (c *QQClient) updateGroupName(groupCode int64, newName string) { func (c *QQClient) updateGroupName(groupCode int64, newName string) {
_, _ = c.sendAndWait(c.buildGroupNameUpdatePacket(groupCode, newName)) _, _ = c.sendAndWait(c.buildGroupNameUpdatePacket(groupCode, newName))
} }
@ -853,21 +868,30 @@ var servers = []*net.TCPAddr{
func (c *QQClient) connect() error { func (c *QQClient) connect() error {
if c.server == nil { if c.server == nil {
addrs, err := net.LookupIP("msfwifi.3g.qq.com") if c.CustomServer != nil {
if err == nil && len(addrs) > 0 { c.server = c.CustomServer
c.server = &net.TCPAddr{
IP: addrs[rand.Intn(len(addrs))],
Port: 8080,
}
} else { } else {
c.server = servers[rand.Intn(len(servers))] addrs, err := net.LookupIP("msfwifi.3g.qq.com")
if err == nil && len(addrs) > 0 {
c.server = &net.TCPAddr{
IP: addrs[rand.Intn(len(addrs))],
Port: 8080,
}
} else {
c.server = servers[rand.Intn(len(servers))]
}
} }
} }
c.Info("connect to server: %v", c.server.String()) c.Info("connect to server: %v", c.server.String())
conn, err := net.DialTCP("tcp", nil, c.server) conn, err := net.DialTCP("tcp", nil, c.server)
if err != nil { if err != nil {
if c.CustomServer != nil {
c.CustomServer = nil
return c.connect()
}
return err return err
} }
c.ConnectTime = time.Now()
c.Conn = conn c.Conn = conn
c.onlinePushCache = []int16{} c.onlinePushCache = []int16{}
return nil return nil
@ -932,6 +956,7 @@ func (c *QQClient) sendAndWait(seq uint16, pkt []byte) (interface{}, error) {
case <-time.After(time.Second * 30): case <-time.After(time.Second * 30):
retry++ retry++
if retry < 2 { if retry < 2 {
c.Error("packet %v timed out. retry.", seq)
_ = c.send(pkt) _ = c.send(pkt)
continue continue
} }
@ -950,6 +975,12 @@ func (c *QQClient) netLoop() {
for c.Online { for c.Online {
l, err := reader.ReadInt32() l, err := reader.ReadInt32()
if err == io.EOF || err == io.ErrClosedPipe { if err == io.EOF || err == io.ErrClosedPipe {
c.Error("connection dropped by server: %v", err)
if c.ConnectTime.Sub(time.Now()) < time.Minute && c.CustomServer != nil {
c.Error("custom server error.")
c.CustomServer = nil
c.server = nil
}
err = c.connect() err = c.connect()
if err != nil { if err != nil {
break break
@ -1021,9 +1052,11 @@ func (c *QQClient) startHeartbeat() {
func (c *QQClient) doHeartbeat() { func (c *QQClient) doHeartbeat() {
if c.Online { if c.Online {
seq := c.nextSeq() seq := c.nextSeq()
sso := packets.BuildSsoPacket(seq, "Heartbeat.Alive", SystemDeviceInfo.IMEI, []byte{}, c.OutGoingPacketSessionId, []byte{}, c.ksid) sso := packets.BuildSsoPacket(seq, uint32(SystemDeviceInfo.Protocol), "Heartbeat.Alive", SystemDeviceInfo.IMEI, []byte{}, c.OutGoingPacketSessionId, []byte{}, c.ksid)
packet := packets.BuildLoginPacket(c.Uin, 0, []byte{}, sso, []byte{}) packet := packets.BuildLoginPacket(c.Uin, 0, []byte{}, sso, []byte{})
_, _ = c.sendAndWait(seq, packet) _, _ = c.sendAndWait(seq, packet)
_, pkt := c.buildGetMessageRequestPacket(msg.SyncFlag_START, time.Now().Unix())
c.send(pkt)
time.AfterFunc(30*time.Second, c.doHeartbeat) time.AfterFunc(30*time.Second, c.doHeartbeat)
} }
} }

View File

@ -4,8 +4,10 @@ import (
"encoding/hex" "encoding/hex"
"errors" "errors"
"fmt" "fmt"
"github.com/Mrs4s/MiraiGo/client/pb/notify"
"github.com/Mrs4s/MiraiGo/client/pb/pttcenter" "github.com/Mrs4s/MiraiGo/client/pb/pttcenter"
"log" "log"
"net"
"strconv" "strconv"
"sync" "sync"
"sync/atomic" "sync/atomic"
@ -130,6 +132,24 @@ func decodePushReqPacket(c *QQClient, _ uint16, payload []byte) (interface{}, er
jceBuf := []byte{} jceBuf := []byte{}
t := r.ReadInt32(1) t := r.ReadInt32(1)
r.ReadSlice(&jceBuf, 2) r.ReadSlice(&jceBuf, 2)
if t == 1 && len(jceBuf) > 0 {
ssoPkt := jce.NewJceReader(jceBuf)
servers := []jce.SsoServerInfo{}
ssoPkt.ReadSlice(&servers, 1)
if len(servers) > 0 {
c.server = &net.TCPAddr{
IP: net.ParseIP(servers[0].Server),
Port: int(servers[0].Port),
}
c.Debug("got new server addr: %v location: %v", c.server.String(), servers[0].Location)
for _, e := range c.eventHandlers.serverUpdatedHandlers {
cover(func() {
e(c, &ServerUpdatedEvent{Servers: servers})
})
}
return nil, nil
}
}
seq := r.ReadInt64(3) seq := r.ReadInt64(3)
_, pkt := c.buildConfPushRespPacket(t, seq, jceBuf) _, pkt := c.buildConfPushRespPacket(t, seq, jceBuf)
return nil, c.send(pkt) return nil, c.send(pkt)
@ -243,6 +263,7 @@ func decodeMessageSvcPacket(c *QQClient, _ uint16, payload []byte) (interface{},
} }
_, _ = c.sendAndWait(c.buildDeleteMessageRequestPacket(delItems)) _, _ = c.sendAndWait(c.buildDeleteMessageRequestPacket(delItems))
if rsp.SyncFlag != msg.SyncFlag_STOP { if rsp.SyncFlag != msg.SyncFlag_STOP {
c.Debug("continue sync with flag: %v", rsp.SyncFlag.String())
_, _ = c.sendAndWait(c.buildGetMessageRequestPacket(rsp.SyncFlag, time.Now().Unix())) _, _ = c.sendAndWait(c.buildGetMessageRequestPacket(rsp.SyncFlag, time.Now().Unix()))
} }
return nil, err return nil, err
@ -333,7 +354,9 @@ func decodeGroupListResponse(c *QQClient, _ uint16, payload []byte) (interface{}
data := &jce.RequestDataVersion3{} data := &jce.RequestDataVersion3{}
data.ReadFrom(jce.NewJceReader(request.SBuffer)) data.ReadFrom(jce.NewJceReader(request.SBuffer))
r := jce.NewJceReader(data.Map["GetTroopListRespV2"][1:]) r := jce.NewJceReader(data.Map["GetTroopListRespV2"][1:])
vecCookie := []byte{}
groups := []jce.TroopNumber{} groups := []jce.TroopNumber{}
r.ReadSlice(&vecCookie, 4)
r.ReadSlice(&groups, 5) r.ReadSlice(&groups, 5)
var l []*GroupInfo var l []*GroupInfo
for _, g := range groups { for _, g := range groups {
@ -348,6 +371,13 @@ func decodeGroupListResponse(c *QQClient, _ uint16, payload []byte) (interface{}
client: c, client: c,
}) })
} }
if len(vecCookie) > 0 {
rsp, err := c.sendAndWait(c.buildGroupListRequestPacket(vecCookie))
if err != nil {
return nil, err
}
l = append(l, rsp.([]*GroupInfo)...)
}
return l, nil return l, nil
} }
@ -513,21 +543,49 @@ func decodeOnlinePushReqPacket(c *QQClient, seq uint16, payload []byte) (interfa
TargetUin: target, TargetUin: target,
Time: t, Time: t,
}) })
case 0x11: // 撤回消息 case 0x10, 0x11, 0x14: // group notify msg
r.ReadByte() r.ReadByte()
b := pb.NotifyMsgBody{} b := notify.NotifyMsgBody{}
_ = proto.Unmarshal(r.ReadAvailable(), &b) _ = proto.Unmarshal(r.ReadAvailable(), &b)
if b.OptMsgRecall == nil { if b.OptMsgRecall != nil {
continue for _, rm := range b.OptMsgRecall.RecalledMsgList {
c.dispatchGroupMessageRecalledEvent(&GroupMessageRecalledEvent{
GroupCode: groupId,
OperatorUin: b.OptMsgRecall.Uin,
AuthorUin: rm.AuthorUin,
MessageId: rm.Seq,
Time: rm.Time,
})
}
} }
for _, rm := range b.OptMsgRecall.RecalledMsgList { if b.OptGeneralGrayTip != nil {
c.dispatchGroupMessageRecalledEvent(&GroupMessageRecalledEvent{ switch b.OptGeneralGrayTip.TemplId {
GroupCode: groupId, case 10043, 1136: // 戳一戳
OperatorUin: b.OptMsgRecall.Uin, var sender int64 = 0
AuthorUin: rm.AuthorUin, receiver := c.Uin
MessageId: rm.Seq, for _, templ := range b.OptGeneralGrayTip.MsgTemplParam {
Time: rm.Time, if templ.Name == "uin_str1" {
}) sender, _ = strconv.ParseInt(templ.Value, 10, 64)
}
if templ.Name == "uin_str2" {
receiver, _ = strconv.ParseInt(templ.Value, 10, 64)
}
}
c.dispatchGroupNotifyEvent(&GroupPokeNotifyEvent{
GroupCode: groupId,
Sender: sender,
Receiver: receiver,
})
}
}
if b.OptMsgRedTips != nil {
if b.OptMsgRedTips.LuckyFlag == 1 { // 运气王提示
c.dispatchGroupNotifyEvent(&GroupRedBagLuckyKingNotifyEvent{
GroupCode: groupId,
Sender: int64(b.OptMsgRedTips.SenderUin),
LuckyKing: int64(b.OptMsgRedTips.ReceiverUin),
})
}
} }
} }
} }

View File

@ -2,6 +2,7 @@ package client
import ( import (
"errors" "errors"
"github.com/Mrs4s/MiraiGo/binary/jce"
"strings" "strings"
"sync" "sync"
) )
@ -15,6 +16,8 @@ type (
MemberPermission int MemberPermission int
ClientProtocol int
LoginResponse struct { LoginResponse struct {
Success bool Success bool
Error LoginError Error LoginError
@ -102,6 +105,12 @@ type (
Member *GroupMemberInfo Member *GroupMemberInfo
} }
IGroupNotifyEvent interface {
From() int64
Name() string
Content() string
}
MemberLeaveGroupEvent struct { MemberLeaveGroupEvent struct {
Group *GroupInfo Group *GroupInfo
Member *GroupMemberInfo Member *GroupMemberInfo
@ -154,6 +163,10 @@ type (
Message string Message string
} }
ServerUpdatedEvent struct {
Servers []jce.SsoServerInfo
}
NewFriendEvent struct { NewFriendEvent struct {
Friend *FriendInfo Friend *FriendInfo
} }
@ -204,6 +217,10 @@ const (
Owner MemberPermission = iota Owner MemberPermission = iota
Administrator Administrator
Member Member
AndroidPhone ClientProtocol = 537062845
AndroidPad ClientProtocol = 537062409
AndroidWatch ClientProtocol = 537061176
) )
func (g *GroupInfo) UpdateName(newName string) { func (g *GroupInfo) UpdateName(newName string) {
@ -246,6 +263,16 @@ func (m *GroupMemberInfo) EditCard(card string) {
} }
} }
func (m *GroupMemberInfo) Poke() {
m.Group.client.sendGroupPoke(m.Group.Code, m.Uin)
}
func (m *GroupMemberInfo) SetAdmin(flag bool) {
if m.Group.OwnerUin == m.Group.client.Uin {
m.Group.client.setGroupAdmin(m.Group.Code, m.Uin, flag)
}
}
func (m *GroupMemberInfo) EditSpecialTitle(title string) { func (m *GroupMemberInfo) EditSpecialTitle(title string) {
if m.Group.SelfPermission() == Owner && len(title) <= 18 { if m.Group.SelfPermission() == Owner && len(title) <= 18 {
m.Group.client.editMemberSpecialTitle(m.Group.Code, m.Uin, title) m.Group.client.editMemberSpecialTitle(m.Group.Code, m.Uin, title)

View File

@ -24,6 +24,8 @@ type eventHandlers struct {
newFriendHandlers []func(*QQClient, *NewFriendEvent) newFriendHandlers []func(*QQClient, *NewFriendEvent)
disconnectHandlers []func(*QQClient, *ClientDisconnectedEvent) disconnectHandlers []func(*QQClient, *ClientDisconnectedEvent)
logHandlers []func(*QQClient, *LogEvent) logHandlers []func(*QQClient, *LogEvent)
serverUpdatedHandlers []func(*QQClient, *ServerUpdatedEvent)
notifyHandlers []func(*QQClient, IGroupNotifyEvent)
groupMessageReceiptHandlers sync.Map groupMessageReceiptHandlers sync.Map
} }
@ -99,10 +101,18 @@ func (c *QQClient) OnDisconnected(f func(*QQClient, *ClientDisconnectedEvent)) {
c.eventHandlers.disconnectHandlers = append(c.eventHandlers.disconnectHandlers, f) c.eventHandlers.disconnectHandlers = append(c.eventHandlers.disconnectHandlers, f)
} }
func (c *QQClient) OnServerUpdated(f func(*QQClient, *ServerUpdatedEvent)) {
c.eventHandlers.serverUpdatedHandlers = append(c.eventHandlers.serverUpdatedHandlers, f)
}
func (c *QQClient) OnLog(f func(*QQClient, *LogEvent)) { func (c *QQClient) OnLog(f func(*QQClient, *LogEvent)) {
c.eventHandlers.logHandlers = append(c.eventHandlers.logHandlers, f) c.eventHandlers.logHandlers = append(c.eventHandlers.logHandlers, f)
} }
func (c *QQClient) OnGroupNotify(f func(*QQClient, IGroupNotifyEvent)) {
c.eventHandlers.notifyHandlers = append(c.eventHandlers.notifyHandlers, f)
}
func NewUinFilterPrivate(uin int64) func(*message.PrivateMessage) bool { func NewUinFilterPrivate(uin int64) func(*message.PrivateMessage) bool {
return func(msg *message.PrivateMessage) bool { return func(msg *message.PrivateMessage) bool {
return msg.Sender.Uin == uin return msg.Sender.Uin == uin
@ -289,6 +299,17 @@ func (c *QQClient) dispatchNewFriendEvent(e *NewFriendEvent) {
} }
} }
func (c *QQClient) dispatchGroupNotifyEvent(e IGroupNotifyEvent) {
if e == nil {
return
}
for _, f := range c.eventHandlers.notifyHandlers {
cover(func() {
f(c, e)
})
}
}
func (c *QQClient) dispatchDisconnectEvent(e *ClientDisconnectedEvent) { func (c *QQClient) dispatchDisconnectEvent(e *ClientDisconnectedEvent) {
if e == nil { if e == nil {
return return

View File

@ -38,6 +38,7 @@ type DeviceInfo struct {
APN []byte APN []byte
Guid []byte Guid []byte
TgtgtKey []byte TgtgtKey []byte
Protocol ClientProtocol
Version *Version Version *Version
} }
@ -57,6 +58,7 @@ type DeviceInfoFile struct {
FingerPrint string `json:"finger_print"` FingerPrint string `json:"finger_print"`
BootId string `json:"boot_id"` BootId string `json:"boot_id"`
ProcVersion string `json:"proc_version"` ProcVersion string `json:"proc_version"`
Protocol int `json:"protocol"` // 0: Pad 1: Phone 2: Watch
IMEI string `json:"imei"` IMEI string `json:"imei"`
} }
@ -88,6 +90,7 @@ var SystemDeviceInfo = &DeviceInfo{
IMEI: "468356291846738", IMEI: "468356291846738",
AndroidId: []byte("MIRAI.123456.001"), AndroidId: []byte("MIRAI.123456.001"),
APN: []byte("wifi"), APN: []byte("wifi"),
Protocol: AndroidPad,
Version: &Version{ Version: &Version{
Incremental: []byte("5891938"), Incremental: []byte("5891938"),
Release: []byte("10"), Release: []byte("10"),
@ -135,6 +138,17 @@ func (info *DeviceInfo) ToJson() []byte {
BootId: string(info.BootId), BootId: string(info.BootId),
ProcVersion: string(info.ProcVersion), ProcVersion: string(info.ProcVersion),
IMEI: info.IMEI, IMEI: info.IMEI,
Protocol: func() int {
switch info.Protocol {
case AndroidPad:
return 0
case AndroidPhone:
return 1
case AndroidWatch:
return 2
}
return 0
}(),
} }
d, _ := json.Marshal(f) d, _ := json.Marshal(f)
return d return d
@ -157,6 +171,14 @@ func (info *DeviceInfo) ReadJson(d []byte) error {
info.ProcVersion = []byte(f.ProcVersion) info.ProcVersion = []byte(f.ProcVersion)
info.IMEI = f.IMEI info.IMEI = f.IMEI
info.AndroidId = SystemDeviceInfo.Display info.AndroidId = SystemDeviceInfo.Display
switch f.Protocol {
case 1:
info.Protocol = AndroidPhone
case 2:
info.Protocol = AndroidWatch
default:
info.Protocol = AndroidPad
}
SystemDeviceInfo.GenNewGuid() SystemDeviceInfo.GenNewGuid()
SystemDeviceInfo.GenNewTgtgtKey() SystemDeviceInfo.GenNewTgtgtKey()
return nil return nil
@ -274,15 +296,19 @@ func (c *QQClient) parseGroupMessage(m *msg.Message) *message.GroupMessage {
} }
var g *message.GroupMessage var g *message.GroupMessage
g = &message.GroupMessage{ g = &message.GroupMessage{
Id: m.Head.MsgSeq, Id: m.Head.MsgSeq,
GroupCode: group.Code, GroupCode: group.Code,
GroupName: string(m.Head.GroupInfo.GroupName), GroupName: string(m.Head.GroupInfo.GroupName),
Sender: sender, Sender: sender,
Time: m.Head.MsgTime, Time: m.Head.MsgTime,
Elements: message.ParseMessageElems(m.Body.RichText.Elems), Elements: message.ParseMessageElems(m.Body.RichText.Elems),
} }
// pre parse // pre parse
for _, elem := range m.Body.RichText.Elems { for _, elem := range m.Body.RichText.Elems {
// 为什么小程序会同时通过RichText和long text发送
if elem.LightApp != nil {
break
}
// is rich long msg // is rich long msg
if elem.GeneralFlags != nil && elem.GeneralFlags.LongTextResid != "" { if elem.GeneralFlags != nil && elem.GeneralFlags.LongTextResid != "" {
if f := c.GetForwardMessage(elem.GeneralFlags.LongTextResid); f != nil && len(f.Nodes) == 1 { if f := c.GetForwardMessage(elem.GeneralFlags.LongTextResid); f != nil && len(f.Nodes) == 1 {

43
client/notify.go Normal file
View File

@ -0,0 +1,43 @@
package client
import "fmt"
type (
// GroupPokeNotifyEvent 群内戳一戳提示事件
GroupPokeNotifyEvent struct {
GroupCode int64
Sender int64
Receiver int64
}
// GroupRedBagLuckyKingNotifyEvent 群内抢红包运气王提示事件
GroupRedBagLuckyKingNotifyEvent struct {
GroupCode int64
Sender int64
LuckyKing int64
}
)
func (e *GroupPokeNotifyEvent) From() int64 {
return e.GroupCode
}
func (e *GroupPokeNotifyEvent) Name() string {
return "戳一戳"
}
func (e *GroupPokeNotifyEvent) Content() string {
return fmt.Sprintf("%d戳了戳%d", e.Sender, e.Receiver)
}
func (e *GroupRedBagLuckyKingNotifyEvent) From() int64 {
return e.GroupCode
}
func (e *GroupRedBagLuckyKingNotifyEvent) Name() string {
return "运气王"
}
func (e *GroupRedBagLuckyKingNotifyEvent) Content() string {
return fmt.Sprintf("%d发的红包被领完, %d是运气王", e.Sender, e.LuckyKing)
}

View File

@ -2098,243 +2098,6 @@ func (x *MessageItem) GetSig() []byte {
return nil return nil
} }
type NotifyMsgBody struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
OptMsgRecall *MessageRecallReminder `protobuf:"bytes,11,opt,name=optMsgRecall,proto3" json:"optMsgRecall,omitempty"`
ServiceType int32 `protobuf:"varint,13,opt,name=serviceType,proto3" json:"serviceType,omitempty"`
}
func (x *NotifyMsgBody) Reset() {
*x = NotifyMsgBody{}
if protoimpl.UnsafeEnabled {
mi := &file_data_proto_msgTypes[19]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
}
func (x *NotifyMsgBody) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*NotifyMsgBody) ProtoMessage() {}
func (x *NotifyMsgBody) ProtoReflect() protoreflect.Message {
mi := &file_data_proto_msgTypes[19]
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 NotifyMsgBody.ProtoReflect.Descriptor instead.
func (*NotifyMsgBody) Descriptor() ([]byte, []int) {
return file_data_proto_rawDescGZIP(), []int{19}
}
func (x *NotifyMsgBody) GetOptMsgRecall() *MessageRecallReminder {
if x != nil {
return x.OptMsgRecall
}
return nil
}
func (x *NotifyMsgBody) GetServiceType() int32 {
if x != nil {
return x.ServiceType
}
return 0
}
type MessageRecallReminder struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
Uin int64 `protobuf:"varint,1,opt,name=uin,proto3" json:"uin,omitempty"`
Nickname []byte `protobuf:"bytes,2,opt,name=nickname,proto3" json:"nickname,omitempty"`
RecalledMsgList []*RecalledMessageMeta `protobuf:"bytes,3,rep,name=recalledMsgList,proto3" json:"recalledMsgList,omitempty"`
ReminderContent []byte `protobuf:"bytes,4,opt,name=reminderContent,proto3" json:"reminderContent,omitempty"`
Userdef []byte `protobuf:"bytes,5,opt,name=userdef,proto3" json:"userdef,omitempty"`
GroupType int32 `protobuf:"varint,6,opt,name=groupType,proto3" json:"groupType,omitempty"`
OpType int32 `protobuf:"varint,7,opt,name=opType,proto3" json:"opType,omitempty"`
}
func (x *MessageRecallReminder) Reset() {
*x = MessageRecallReminder{}
if protoimpl.UnsafeEnabled {
mi := &file_data_proto_msgTypes[20]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
}
func (x *MessageRecallReminder) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*MessageRecallReminder) ProtoMessage() {}
func (x *MessageRecallReminder) ProtoReflect() protoreflect.Message {
mi := &file_data_proto_msgTypes[20]
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 MessageRecallReminder.ProtoReflect.Descriptor instead.
func (*MessageRecallReminder) Descriptor() ([]byte, []int) {
return file_data_proto_rawDescGZIP(), []int{20}
}
func (x *MessageRecallReminder) GetUin() int64 {
if x != nil {
return x.Uin
}
return 0
}
func (x *MessageRecallReminder) GetNickname() []byte {
if x != nil {
return x.Nickname
}
return nil
}
func (x *MessageRecallReminder) GetRecalledMsgList() []*RecalledMessageMeta {
if x != nil {
return x.RecalledMsgList
}
return nil
}
func (x *MessageRecallReminder) GetReminderContent() []byte {
if x != nil {
return x.ReminderContent
}
return nil
}
func (x *MessageRecallReminder) GetUserdef() []byte {
if x != nil {
return x.Userdef
}
return nil
}
func (x *MessageRecallReminder) GetGroupType() int32 {
if x != nil {
return x.GroupType
}
return 0
}
func (x *MessageRecallReminder) GetOpType() int32 {
if x != nil {
return x.OpType
}
return 0
}
type RecalledMessageMeta struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
Seq int32 `protobuf:"varint,1,opt,name=seq,proto3" json:"seq,omitempty"`
Time int32 `protobuf:"varint,2,opt,name=time,proto3" json:"time,omitempty"`
MsgRandom int32 `protobuf:"varint,3,opt,name=msgRandom,proto3" json:"msgRandom,omitempty"`
MsgType int32 `protobuf:"varint,4,opt,name=msgType,proto3" json:"msgType,omitempty"`
MsgFlag int32 `protobuf:"varint,5,opt,name=msgFlag,proto3" json:"msgFlag,omitempty"`
AuthorUin int64 `protobuf:"varint,6,opt,name=authorUin,proto3" json:"authorUin,omitempty"`
}
func (x *RecalledMessageMeta) Reset() {
*x = RecalledMessageMeta{}
if protoimpl.UnsafeEnabled {
mi := &file_data_proto_msgTypes[21]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
}
func (x *RecalledMessageMeta) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*RecalledMessageMeta) ProtoMessage() {}
func (x *RecalledMessageMeta) ProtoReflect() protoreflect.Message {
mi := &file_data_proto_msgTypes[21]
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 RecalledMessageMeta.ProtoReflect.Descriptor instead.
func (*RecalledMessageMeta) Descriptor() ([]byte, []int) {
return file_data_proto_rawDescGZIP(), []int{21}
}
func (x *RecalledMessageMeta) GetSeq() int32 {
if x != nil {
return x.Seq
}
return 0
}
func (x *RecalledMessageMeta) GetTime() int32 {
if x != nil {
return x.Time
}
return 0
}
func (x *RecalledMessageMeta) GetMsgRandom() int32 {
if x != nil {
return x.MsgRandom
}
return 0
}
func (x *RecalledMessageMeta) GetMsgType() int32 {
if x != nil {
return x.MsgType
}
return 0
}
func (x *RecalledMessageMeta) GetMsgFlag() int32 {
if x != nil {
return x.MsgFlag
}
return 0
}
func (x *RecalledMessageMeta) GetAuthorUin() int64 {
if x != nil {
return x.AuthorUin
}
return 0
}
type SubD4 struct { type SubD4 struct {
state protoimpl.MessageState state protoimpl.MessageState
sizeCache protoimpl.SizeCache sizeCache protoimpl.SizeCache
@ -2346,7 +2109,7 @@ type SubD4 struct {
func (x *SubD4) Reset() { func (x *SubD4) Reset() {
*x = SubD4{} *x = SubD4{}
if protoimpl.UnsafeEnabled { if protoimpl.UnsafeEnabled {
mi := &file_data_proto_msgTypes[22] mi := &file_data_proto_msgTypes[19]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi) ms.StoreMessageInfo(mi)
} }
@ -2359,7 +2122,7 @@ func (x *SubD4) String() string {
func (*SubD4) ProtoMessage() {} func (*SubD4) ProtoMessage() {}
func (x *SubD4) ProtoReflect() protoreflect.Message { func (x *SubD4) ProtoReflect() protoreflect.Message {
mi := &file_data_proto_msgTypes[22] mi := &file_data_proto_msgTypes[19]
if protoimpl.UnsafeEnabled && x != nil { if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil { if ms.LoadMessageInfo() == nil {
@ -2372,7 +2135,7 @@ func (x *SubD4) ProtoReflect() protoreflect.Message {
// Deprecated: Use SubD4.ProtoReflect.Descriptor instead. // Deprecated: Use SubD4.ProtoReflect.Descriptor instead.
func (*SubD4) Descriptor() ([]byte, []int) { func (*SubD4) Descriptor() ([]byte, []int) {
return file_data_proto_rawDescGZIP(), []int{22} return file_data_proto_rawDescGZIP(), []int{19}
} }
func (x *SubD4) GetUin() int64 { func (x *SubD4) GetUin() int64 {
@ -2397,7 +2160,7 @@ type Sub8A struct {
func (x *Sub8A) Reset() { func (x *Sub8A) Reset() {
*x = Sub8A{} *x = Sub8A{}
if protoimpl.UnsafeEnabled { if protoimpl.UnsafeEnabled {
mi := &file_data_proto_msgTypes[23] mi := &file_data_proto_msgTypes[20]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi) ms.StoreMessageInfo(mi)
} }
@ -2410,7 +2173,7 @@ func (x *Sub8A) String() string {
func (*Sub8A) ProtoMessage() {} func (*Sub8A) ProtoMessage() {}
func (x *Sub8A) ProtoReflect() protoreflect.Message { func (x *Sub8A) ProtoReflect() protoreflect.Message {
mi := &file_data_proto_msgTypes[23] mi := &file_data_proto_msgTypes[20]
if protoimpl.UnsafeEnabled && x != nil { if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil { if ms.LoadMessageInfo() == nil {
@ -2423,7 +2186,7 @@ func (x *Sub8A) ProtoReflect() protoreflect.Message {
// Deprecated: Use Sub8A.ProtoReflect.Descriptor instead. // Deprecated: Use Sub8A.ProtoReflect.Descriptor instead.
func (*Sub8A) Descriptor() ([]byte, []int) { func (*Sub8A) Descriptor() ([]byte, []int) {
return file_data_proto_rawDescGZIP(), []int{23} return file_data_proto_rawDescGZIP(), []int{20}
} }
func (x *Sub8A) GetMsgInfo() []*Sub8AMsgInfo { func (x *Sub8A) GetMsgInfo() []*Sub8AMsgInfo {
@ -2480,7 +2243,7 @@ type Sub8AMsgInfo struct {
func (x *Sub8AMsgInfo) Reset() { func (x *Sub8AMsgInfo) Reset() {
*x = Sub8AMsgInfo{} *x = Sub8AMsgInfo{}
if protoimpl.UnsafeEnabled { if protoimpl.UnsafeEnabled {
mi := &file_data_proto_msgTypes[24] mi := &file_data_proto_msgTypes[21]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi) ms.StoreMessageInfo(mi)
} }
@ -2493,7 +2256,7 @@ func (x *Sub8AMsgInfo) String() string {
func (*Sub8AMsgInfo) ProtoMessage() {} func (*Sub8AMsgInfo) ProtoMessage() {}
func (x *Sub8AMsgInfo) ProtoReflect() protoreflect.Message { func (x *Sub8AMsgInfo) ProtoReflect() protoreflect.Message {
mi := &file_data_proto_msgTypes[24] mi := &file_data_proto_msgTypes[21]
if protoimpl.UnsafeEnabled && x != nil { if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil { if ms.LoadMessageInfo() == nil {
@ -2506,7 +2269,7 @@ func (x *Sub8AMsgInfo) ProtoReflect() protoreflect.Message {
// Deprecated: Use Sub8AMsgInfo.ProtoReflect.Descriptor instead. // Deprecated: Use Sub8AMsgInfo.ProtoReflect.Descriptor instead.
func (*Sub8AMsgInfo) Descriptor() ([]byte, []int) { func (*Sub8AMsgInfo) Descriptor() ([]byte, []int) {
return file_data_proto_rawDescGZIP(), []int{24} return file_data_proto_rawDescGZIP(), []int{21}
} }
func (x *Sub8AMsgInfo) GetFromUin() int64 { func (x *Sub8AMsgInfo) GetFromUin() int64 {
@ -2584,7 +2347,7 @@ type SubB3 struct {
func (x *SubB3) Reset() { func (x *SubB3) Reset() {
*x = SubB3{} *x = SubB3{}
if protoimpl.UnsafeEnabled { if protoimpl.UnsafeEnabled {
mi := &file_data_proto_msgTypes[25] mi := &file_data_proto_msgTypes[22]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi) ms.StoreMessageInfo(mi)
} }
@ -2597,7 +2360,7 @@ func (x *SubB3) String() string {
func (*SubB3) ProtoMessage() {} func (*SubB3) ProtoMessage() {}
func (x *SubB3) ProtoReflect() protoreflect.Message { func (x *SubB3) ProtoReflect() protoreflect.Message {
mi := &file_data_proto_msgTypes[25] mi := &file_data_proto_msgTypes[22]
if protoimpl.UnsafeEnabled && x != nil { if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil { if ms.LoadMessageInfo() == nil {
@ -2610,7 +2373,7 @@ func (x *SubB3) ProtoReflect() protoreflect.Message {
// Deprecated: Use SubB3.ProtoReflect.Descriptor instead. // Deprecated: Use SubB3.ProtoReflect.Descriptor instead.
func (*SubB3) Descriptor() ([]byte, []int) { func (*SubB3) Descriptor() ([]byte, []int) {
return file_data_proto_rawDescGZIP(), []int{25} return file_data_proto_rawDescGZIP(), []int{22}
} }
func (x *SubB3) GetType() int32 { func (x *SubB3) GetType() int32 {
@ -2639,7 +2402,7 @@ type SubB3AddFrdNotify struct {
func (x *SubB3AddFrdNotify) Reset() { func (x *SubB3AddFrdNotify) Reset() {
*x = SubB3AddFrdNotify{} *x = SubB3AddFrdNotify{}
if protoimpl.UnsafeEnabled { if protoimpl.UnsafeEnabled {
mi := &file_data_proto_msgTypes[26] mi := &file_data_proto_msgTypes[23]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi) ms.StoreMessageInfo(mi)
} }
@ -2652,7 +2415,7 @@ func (x *SubB3AddFrdNotify) String() string {
func (*SubB3AddFrdNotify) ProtoMessage() {} func (*SubB3AddFrdNotify) ProtoMessage() {}
func (x *SubB3AddFrdNotify) ProtoReflect() protoreflect.Message { func (x *SubB3AddFrdNotify) ProtoReflect() protoreflect.Message {
mi := &file_data_proto_msgTypes[26] mi := &file_data_proto_msgTypes[23]
if protoimpl.UnsafeEnabled && x != nil { if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil { if ms.LoadMessageInfo() == nil {
@ -2665,7 +2428,7 @@ func (x *SubB3AddFrdNotify) ProtoReflect() protoreflect.Message {
// Deprecated: Use SubB3AddFrdNotify.ProtoReflect.Descriptor instead. // Deprecated: Use SubB3AddFrdNotify.ProtoReflect.Descriptor instead.
func (*SubB3AddFrdNotify) Descriptor() ([]byte, []int) { func (*SubB3AddFrdNotify) Descriptor() ([]byte, []int) {
return file_data_proto_rawDescGZIP(), []int{26} return file_data_proto_rawDescGZIP(), []int{23}
} }
func (x *SubB3AddFrdNotify) GetUin() int64 { func (x *SubB3AddFrdNotify) GetUin() int64 {
@ -2694,7 +2457,7 @@ type Sub44 struct {
func (x *Sub44) Reset() { func (x *Sub44) Reset() {
*x = Sub44{} *x = Sub44{}
if protoimpl.UnsafeEnabled { if protoimpl.UnsafeEnabled {
mi := &file_data_proto_msgTypes[27] mi := &file_data_proto_msgTypes[24]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi) ms.StoreMessageInfo(mi)
} }
@ -2707,7 +2470,7 @@ func (x *Sub44) String() string {
func (*Sub44) ProtoMessage() {} func (*Sub44) ProtoMessage() {}
func (x *Sub44) ProtoReflect() protoreflect.Message { func (x *Sub44) ProtoReflect() protoreflect.Message {
mi := &file_data_proto_msgTypes[27] mi := &file_data_proto_msgTypes[24]
if protoimpl.UnsafeEnabled && x != nil { if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil { if ms.LoadMessageInfo() == nil {
@ -2720,7 +2483,7 @@ func (x *Sub44) ProtoReflect() protoreflect.Message {
// Deprecated: Use Sub44.ProtoReflect.Descriptor instead. // Deprecated: Use Sub44.ProtoReflect.Descriptor instead.
func (*Sub44) Descriptor() ([]byte, []int) { func (*Sub44) Descriptor() ([]byte, []int) {
return file_data_proto_rawDescGZIP(), []int{27} return file_data_proto_rawDescGZIP(), []int{24}
} }
func (x *Sub44) GetFriendSyncMsg() *Sub44FriendSyncMsg { func (x *Sub44) GetFriendSyncMsg() *Sub44FriendSyncMsg {
@ -2755,7 +2518,7 @@ type Sub44FriendSyncMsg struct {
func (x *Sub44FriendSyncMsg) Reset() { func (x *Sub44FriendSyncMsg) Reset() {
*x = Sub44FriendSyncMsg{} *x = Sub44FriendSyncMsg{}
if protoimpl.UnsafeEnabled { if protoimpl.UnsafeEnabled {
mi := &file_data_proto_msgTypes[28] mi := &file_data_proto_msgTypes[25]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi) ms.StoreMessageInfo(mi)
} }
@ -2768,7 +2531,7 @@ func (x *Sub44FriendSyncMsg) String() string {
func (*Sub44FriendSyncMsg) ProtoMessage() {} func (*Sub44FriendSyncMsg) ProtoMessage() {}
func (x *Sub44FriendSyncMsg) ProtoReflect() protoreflect.Message { func (x *Sub44FriendSyncMsg) ProtoReflect() protoreflect.Message {
mi := &file_data_proto_msgTypes[28] mi := &file_data_proto_msgTypes[25]
if protoimpl.UnsafeEnabled && x != nil { if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil { if ms.LoadMessageInfo() == nil {
@ -2781,7 +2544,7 @@ func (x *Sub44FriendSyncMsg) ProtoReflect() protoreflect.Message {
// Deprecated: Use Sub44FriendSyncMsg.ProtoReflect.Descriptor instead. // Deprecated: Use Sub44FriendSyncMsg.ProtoReflect.Descriptor instead.
func (*Sub44FriendSyncMsg) Descriptor() ([]byte, []int) { func (*Sub44FriendSyncMsg) Descriptor() ([]byte, []int) {
return file_data_proto_rawDescGZIP(), []int{28} return file_data_proto_rawDescGZIP(), []int{25}
} }
func (x *Sub44FriendSyncMsg) GetUin() int64 { func (x *Sub44FriendSyncMsg) GetUin() int64 {
@ -2869,7 +2632,7 @@ type Sub44GroupSyncMsg struct {
func (x *Sub44GroupSyncMsg) Reset() { func (x *Sub44GroupSyncMsg) Reset() {
*x = Sub44GroupSyncMsg{} *x = Sub44GroupSyncMsg{}
if protoimpl.UnsafeEnabled { if protoimpl.UnsafeEnabled {
mi := &file_data_proto_msgTypes[29] mi := &file_data_proto_msgTypes[26]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi) ms.StoreMessageInfo(mi)
} }
@ -2882,7 +2645,7 @@ func (x *Sub44GroupSyncMsg) String() string {
func (*Sub44GroupSyncMsg) ProtoMessage() {} func (*Sub44GroupSyncMsg) ProtoMessage() {}
func (x *Sub44GroupSyncMsg) ProtoReflect() protoreflect.Message { func (x *Sub44GroupSyncMsg) ProtoReflect() protoreflect.Message {
mi := &file_data_proto_msgTypes[29] mi := &file_data_proto_msgTypes[26]
if protoimpl.UnsafeEnabled && x != nil { if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil { if ms.LoadMessageInfo() == nil {
@ -2895,7 +2658,7 @@ func (x *Sub44GroupSyncMsg) ProtoReflect() protoreflect.Message {
// Deprecated: Use Sub44GroupSyncMsg.ProtoReflect.Descriptor instead. // Deprecated: Use Sub44GroupSyncMsg.ProtoReflect.Descriptor instead.
func (*Sub44GroupSyncMsg) Descriptor() ([]byte, []int) { func (*Sub44GroupSyncMsg) Descriptor() ([]byte, []int) {
return file_data_proto_rawDescGZIP(), []int{29} return file_data_proto_rawDescGZIP(), []int{26}
} }
func (x *Sub44GroupSyncMsg) GetMsgType() int32 { func (x *Sub44GroupSyncMsg) GetMsgType() int32 {
@ -3371,139 +3134,105 @@ var file_data_proto_rawDesc = []byte{
0x6d, 0x73, 0x67, 0x53, 0x65, 0x71, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x6d, 0x73, 0x6d, 0x73, 0x67, 0x53, 0x65, 0x71, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x6d, 0x73,
0x67, 0x53, 0x65, 0x71, 0x12, 0x16, 0x0a, 0x06, 0x6d, 0x73, 0x67, 0x55, 0x69, 0x64, 0x18, 0x05, 0x67, 0x53, 0x65, 0x71, 0x12, 0x16, 0x0a, 0x06, 0x6d, 0x73, 0x67, 0x55, 0x69, 0x64, 0x18, 0x05,
0x20, 0x01, 0x28, 0x03, 0x52, 0x06, 0x6d, 0x73, 0x67, 0x55, 0x69, 0x64, 0x12, 0x10, 0x0a, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x06, 0x6d, 0x73, 0x67, 0x55, 0x69, 0x64, 0x12, 0x10, 0x0a, 0x03,
0x73, 0x69, 0x67, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x03, 0x73, 0x69, 0x67, 0x22, 0x6d, 0x73, 0x69, 0x67, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x03, 0x73, 0x69, 0x67, 0x22, 0x19,
0x0a, 0x0d, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x4d, 0x73, 0x67, 0x42, 0x6f, 0x64, 0x79, 0x12, 0x0a, 0x05, 0x53, 0x75, 0x62, 0x44, 0x34, 0x12, 0x10, 0x0a, 0x03, 0x75, 0x69, 0x6e, 0x18, 0x01,
0x3a, 0x0a, 0x0c, 0x6f, 0x70, 0x74, 0x4d, 0x73, 0x67, 0x52, 0x65, 0x63, 0x61, 0x6c, 0x6c, 0x18, 0x20, 0x01, 0x28, 0x03, 0x52, 0x03, 0x75, 0x69, 0x6e, 0x22, 0xa5, 0x01, 0x0a, 0x05, 0x53, 0x75,
0x0b, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x52, 0x62, 0x38, 0x41, 0x12, 0x28, 0x0a, 0x08, 0x6d, 0x73, 0x67, 0x5f, 0x69, 0x6e, 0x66, 0x6f, 0x18,
0x65, 0x63, 0x61, 0x6c, 0x6c, 0x52, 0x65, 0x6d, 0x69, 0x6e, 0x64, 0x65, 0x72, 0x52, 0x0c, 0x6f, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0d, 0x2e, 0x53, 0x75, 0x62, 0x38, 0x41, 0x4d, 0x73, 0x67,
0x70, 0x74, 0x4d, 0x73, 0x67, 0x52, 0x65, 0x63, 0x61, 0x6c, 0x6c, 0x12, 0x20, 0x0a, 0x0b, 0x73, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x07, 0x6d, 0x73, 0x67, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x14, 0x0a,
0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x05, 0x05, 0x61, 0x70, 0x70, 0x49, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x61, 0x70,
0x52, 0x0b, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x22, 0xff, 0x01, 0x70, 0x49, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x69, 0x6e, 0x73, 0x74, 0x49, 0x64, 0x18, 0x03, 0x20,
0x0a, 0x15, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x52, 0x65, 0x63, 0x61, 0x6c, 0x6c, 0x52, 0x01, 0x28, 0x05, 0x52, 0x06, 0x69, 0x6e, 0x73, 0x74, 0x49, 0x64, 0x12, 0x28, 0x0a, 0x0f, 0x6c,
0x65, 0x6d, 0x69, 0x6e, 0x64, 0x65, 0x72, 0x12, 0x10, 0x0a, 0x03, 0x75, 0x69, 0x6e, 0x18, 0x01, 0x6f, 0x6e, 0x67, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x46, 0x6c, 0x61, 0x67, 0x18, 0x04,
0x20, 0x01, 0x28, 0x03, 0x52, 0x03, 0x75, 0x69, 0x6e, 0x12, 0x1a, 0x0a, 0x08, 0x6e, 0x69, 0x63, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0f, 0x6c, 0x6f, 0x6e, 0x67, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67,
0x6b, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x08, 0x6e, 0x69, 0x63, 0x65, 0x46, 0x6c, 0x61, 0x67, 0x12, 0x1a, 0x0a, 0x08, 0x72, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65,
0x6b, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x3e, 0x0a, 0x0f, 0x72, 0x65, 0x63, 0x61, 0x6c, 0x6c, 0x65, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x08, 0x72, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65,
0x64, 0x4d, 0x73, 0x67, 0x4c, 0x69, 0x73, 0x74, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x14, 0x64, 0x22, 0xf2, 0x01, 0x0a, 0x0c, 0x53, 0x75, 0x62, 0x38, 0x41, 0x4d, 0x73, 0x67, 0x49, 0x6e,
0x2e, 0x52, 0x65, 0x63, 0x61, 0x6c, 0x6c, 0x65, 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x66, 0x6f, 0x12, 0x18, 0x0a, 0x07, 0x66, 0x72, 0x6f, 0x6d, 0x55, 0x69, 0x6e, 0x18, 0x01, 0x20,
0x4d, 0x65, 0x74, 0x61, 0x52, 0x0f, 0x72, 0x65, 0x63, 0x61, 0x6c, 0x6c, 0x65, 0x64, 0x4d, 0x73, 0x01, 0x28, 0x03, 0x52, 0x07, 0x66, 0x72, 0x6f, 0x6d, 0x55, 0x69, 0x6e, 0x12, 0x14, 0x0a, 0x05,
0x67, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x28, 0x0a, 0x0f, 0x72, 0x65, 0x6d, 0x69, 0x6e, 0x64, 0x65, 0x74, 0x6f, 0x55, 0x69, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x05, 0x74, 0x6f, 0x55,
0x72, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0f, 0x69, 0x6e, 0x12, 0x16, 0x0a, 0x06, 0x6d, 0x73, 0x67, 0x53, 0x65, 0x71, 0x18, 0x03, 0x20, 0x01,
0x72, 0x65, 0x6d, 0x69, 0x6e, 0x64, 0x65, 0x72, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x12, 0x28, 0x05, 0x52, 0x06, 0x6d, 0x73, 0x67, 0x53, 0x65, 0x71, 0x12, 0x16, 0x0a, 0x06, 0x6d, 0x73,
0x18, 0x0a, 0x07, 0x75, 0x73, 0x65, 0x72, 0x64, 0x65, 0x66, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0c, 0x67, 0x55, 0x69, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x06, 0x6d, 0x73, 0x67, 0x55,
0x52, 0x07, 0x75, 0x73, 0x65, 0x72, 0x64, 0x65, 0x66, 0x12, 0x1c, 0x0a, 0x09, 0x67, 0x72, 0x6f, 0x69, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x6d, 0x73, 0x67, 0x54, 0x69, 0x6d, 0x65, 0x18, 0x05, 0x20,
0x75, 0x70, 0x54, 0x79, 0x70, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x05, 0x52, 0x09, 0x67, 0x72, 0x01, 0x28, 0x03, 0x52, 0x07, 0x6d, 0x73, 0x67, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x1c, 0x0a, 0x09,
0x6f, 0x75, 0x70, 0x54, 0x79, 0x70, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x6f, 0x70, 0x54, 0x79, 0x70, 0x6d, 0x73, 0x67, 0x52, 0x61, 0x6e, 0x64, 0x6f, 0x6d, 0x18, 0x06, 0x20, 0x01, 0x28, 0x05, 0x52,
0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x6f, 0x70, 0x54, 0x79, 0x70, 0x65, 0x22, 0x09, 0x6d, 0x73, 0x67, 0x52, 0x61, 0x6e, 0x64, 0x6f, 0x6d, 0x12, 0x16, 0x0a, 0x06, 0x70, 0x6b,
0xab, 0x01, 0x0a, 0x13, 0x52, 0x65, 0x63, 0x61, 0x6c, 0x6c, 0x65, 0x64, 0x4d, 0x65, 0x73, 0x73, 0x67, 0x4e, 0x75, 0x6d, 0x18, 0x07, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x70, 0x6b, 0x67, 0x4e,
0x61, 0x67, 0x65, 0x4d, 0x65, 0x74, 0x61, 0x12, 0x10, 0x0a, 0x03, 0x73, 0x65, 0x71, 0x18, 0x01, 0x75, 0x6d, 0x12, 0x1a, 0x0a, 0x08, 0x70, 0x6b, 0x67, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x18, 0x08,
0x20, 0x01, 0x28, 0x05, 0x52, 0x03, 0x73, 0x65, 0x71, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x69, 0x6d, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x70, 0x6b, 0x67, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x12, 0x16,
0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x74, 0x69, 0x6d, 0x65, 0x12, 0x1c, 0x0a, 0x0a, 0x06, 0x64, 0x65, 0x76, 0x53, 0x65, 0x71, 0x18, 0x09, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06,
0x09, 0x6d, 0x73, 0x67, 0x52, 0x61, 0x6e, 0x64, 0x6f, 0x6d, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x64, 0x65, 0x76, 0x53, 0x65, 0x71, 0x22, 0x59, 0x0a, 0x05, 0x53, 0x75, 0x62, 0x42, 0x33, 0x12,
0x52, 0x09, 0x6d, 0x73, 0x67, 0x52, 0x61, 0x6e, 0x64, 0x6f, 0x6d, 0x12, 0x18, 0x0a, 0x07, 0x6d, 0x12, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x74,
0x73, 0x67, 0x54, 0x79, 0x70, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x6d, 0x73, 0x79, 0x70, 0x65, 0x12, 0x3c, 0x0a, 0x0f, 0x6d, 0x73, 0x67, 0x41, 0x64, 0x64, 0x46, 0x72, 0x64,
0x67, 0x54, 0x79, 0x70, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x6d, 0x73, 0x67, 0x46, 0x6c, 0x61, 0x67, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x53,
0x18, 0x05, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x6d, 0x73, 0x67, 0x46, 0x6c, 0x61, 0x67, 0x12, 0x75, 0x62, 0x42, 0x33, 0x41, 0x64, 0x64, 0x46, 0x72, 0x64, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x79,
0x1c, 0x0a, 0x09, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x55, 0x69, 0x6e, 0x18, 0x06, 0x20, 0x01, 0x52, 0x0f, 0x6d, 0x73, 0x67, 0x41, 0x64, 0x64, 0x46, 0x72, 0x64, 0x4e, 0x6f, 0x74, 0x69, 0x66,
0x28, 0x03, 0x52, 0x09, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x55, 0x69, 0x6e, 0x22, 0x19, 0x0a, 0x79, 0x22, 0x39, 0x0a, 0x11, 0x53, 0x75, 0x62, 0x42, 0x33, 0x41, 0x64, 0x64, 0x46, 0x72, 0x64,
0x05, 0x53, 0x75, 0x62, 0x44, 0x34, 0x12, 0x10, 0x0a, 0x03, 0x75, 0x69, 0x6e, 0x18, 0x01, 0x20, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x75, 0x69, 0x6e, 0x18, 0x01, 0x20,
0x01, 0x28, 0x03, 0x52, 0x03, 0x75, 0x69, 0x6e, 0x22, 0xa5, 0x01, 0x0a, 0x05, 0x53, 0x75, 0x62, 0x01, 0x28, 0x03, 0x52, 0x03, 0x75, 0x69, 0x6e, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x69, 0x63, 0x6b,
0x38, 0x41, 0x12, 0x28, 0x0a, 0x08, 0x6d, 0x73, 0x67, 0x5f, 0x69, 0x6e, 0x66, 0x6f, 0x18, 0x01, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x69, 0x63, 0x6b, 0x22, 0x7a, 0x0a, 0x05,
0x20, 0x03, 0x28, 0x0b, 0x32, 0x0d, 0x2e, 0x53, 0x75, 0x62, 0x38, 0x41, 0x4d, 0x73, 0x67, 0x49, 0x53, 0x75, 0x62, 0x34, 0x34, 0x12, 0x39, 0x0a, 0x0d, 0x66, 0x72, 0x69, 0x65, 0x6e, 0x64, 0x53,
0x6e, 0x66, 0x6f, 0x52, 0x07, 0x6d, 0x73, 0x67, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x14, 0x0a, 0x05, 0x79, 0x6e, 0x63, 0x4d, 0x73, 0x67, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x53,
0x61, 0x70, 0x70, 0x49, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x61, 0x70, 0x70, 0x75, 0x62, 0x34, 0x34, 0x46, 0x72, 0x69, 0x65, 0x6e, 0x64, 0x53, 0x79, 0x6e, 0x63, 0x4d, 0x73,
0x49, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x69, 0x6e, 0x73, 0x74, 0x49, 0x64, 0x18, 0x03, 0x20, 0x01, 0x67, 0x52, 0x0d, 0x66, 0x72, 0x69, 0x65, 0x6e, 0x64, 0x53, 0x79, 0x6e, 0x63, 0x4d, 0x73, 0x67,
0x28, 0x05, 0x52, 0x06, 0x69, 0x6e, 0x73, 0x74, 0x49, 0x64, 0x12, 0x28, 0x0a, 0x0f, 0x6c, 0x6f, 0x12, 0x36, 0x0a, 0x0c, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x53, 0x79, 0x6e, 0x63, 0x4d, 0x73, 0x67,
0x6e, 0x67, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x46, 0x6c, 0x61, 0x67, 0x18, 0x04, 0x20, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x53, 0x75, 0x62, 0x34, 0x34, 0x47, 0x72,
0x01, 0x28, 0x05, 0x52, 0x0f, 0x6c, 0x6f, 0x6e, 0x67, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x6f, 0x75, 0x70, 0x53, 0x79, 0x6e, 0x63, 0x4d, 0x73, 0x67, 0x52, 0x0c, 0x67, 0x72, 0x6f, 0x75,
0x46, 0x6c, 0x61, 0x67, 0x12, 0x1a, 0x0a, 0x08, 0x72, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x64, 0x70, 0x53, 0x79, 0x6e, 0x63, 0x4d, 0x73, 0x67, 0x22, 0xf0, 0x01, 0x0a, 0x12, 0x53, 0x75, 0x62,
0x18, 0x05, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x08, 0x72, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x64, 0x34, 0x34, 0x46, 0x72, 0x69, 0x65, 0x6e, 0x64, 0x53, 0x79, 0x6e, 0x63, 0x4d, 0x73, 0x67, 0x12,
0x22, 0xf2, 0x01, 0x0a, 0x0c, 0x53, 0x75, 0x62, 0x38, 0x41, 0x4d, 0x73, 0x67, 0x49, 0x6e, 0x66, 0x10, 0x0a, 0x03, 0x75, 0x69, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x03, 0x75, 0x69,
0x6f, 0x12, 0x18, 0x0a, 0x07, 0x66, 0x72, 0x6f, 0x6d, 0x55, 0x69, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x6e, 0x12, 0x12, 0x0a, 0x04, 0x66, 0x55, 0x69, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52,
0x28, 0x03, 0x52, 0x07, 0x66, 0x72, 0x6f, 0x6d, 0x55, 0x69, 0x6e, 0x12, 0x14, 0x0a, 0x05, 0x74, 0x04, 0x66, 0x55, 0x69, 0x6e, 0x12, 0x20, 0x0a, 0x0b, 0x70, 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73,
0x6f, 0x55, 0x69, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x05, 0x74, 0x6f, 0x55, 0x69, 0x54, 0x79, 0x70, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0b, 0x70, 0x72, 0x6f, 0x63,
0x6e, 0x12, 0x16, 0x0a, 0x06, 0x6d, 0x73, 0x67, 0x53, 0x65, 0x71, 0x18, 0x03, 0x20, 0x01, 0x28, 0x65, 0x73, 0x73, 0x54, 0x79, 0x70, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x69, 0x6d, 0x65, 0x18,
0x05, 0x52, 0x06, 0x6d, 0x73, 0x67, 0x53, 0x65, 0x71, 0x12, 0x16, 0x0a, 0x06, 0x6d, 0x73, 0x67, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x74, 0x69, 0x6d, 0x65, 0x12, 0x20, 0x0a, 0x0b, 0x70,
0x55, 0x69, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x06, 0x6d, 0x73, 0x67, 0x55, 0x69, 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, 0x46, 0x6c, 0x61, 0x67, 0x18, 0x05, 0x20, 0x01, 0x28, 0x05,
0x64, 0x12, 0x18, 0x0a, 0x07, 0x6d, 0x73, 0x67, 0x54, 0x69, 0x6d, 0x65, 0x18, 0x05, 0x20, 0x01, 0x52, 0x0b, 0x70, 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, 0x46, 0x6c, 0x61, 0x67, 0x12, 0x1a, 0x0a,
0x28, 0x03, 0x52, 0x07, 0x6d, 0x73, 0x67, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x6d, 0x08, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x49, 0x64, 0x18, 0x06, 0x20, 0x01, 0x28, 0x05, 0x52,
0x73, 0x67, 0x52, 0x61, 0x6e, 0x64, 0x6f, 0x6d, 0x18, 0x06, 0x20, 0x01, 0x28, 0x05, 0x52, 0x09, 0x08, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x49, 0x64, 0x12, 0x20, 0x0a, 0x0b, 0x73, 0x6f, 0x75,
0x6d, 0x73, 0x67, 0x52, 0x61, 0x6e, 0x64, 0x6f, 0x6d, 0x12, 0x16, 0x0a, 0x06, 0x70, 0x6b, 0x67, 0x72, 0x63, 0x65, 0x53, 0x75, 0x62, 0x49, 0x64, 0x18, 0x07, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0b,
0x4e, 0x75, 0x6d, 0x18, 0x07, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x70, 0x6b, 0x67, 0x4e, 0x75, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x53, 0x75, 0x62, 0x49, 0x64, 0x12, 0x1e, 0x0a, 0x0a, 0x73,
0x6d, 0x12, 0x1a, 0x0a, 0x08, 0x70, 0x6b, 0x67, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x18, 0x08, 0x20, 0x74, 0x72, 0x57, 0x6f, 0x72, 0x64, 0x69, 0x6e, 0x67, 0x18, 0x08, 0x20, 0x03, 0x28, 0x09, 0x52,
0x01, 0x28, 0x05, 0x52, 0x08, 0x70, 0x6b, 0x67, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x12, 0x16, 0x0a, 0x0a, 0x73, 0x74, 0x72, 0x57, 0x6f, 0x72, 0x64, 0x69, 0x6e, 0x67, 0x22, 0xd1, 0x04, 0x0a, 0x11,
0x06, 0x64, 0x65, 0x76, 0x53, 0x65, 0x71, 0x18, 0x09, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x64, 0x53, 0x75, 0x62, 0x34, 0x34, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x53, 0x79, 0x6e, 0x63, 0x4d, 0x73,
0x65, 0x76, 0x53, 0x65, 0x71, 0x22, 0x59, 0x0a, 0x05, 0x53, 0x75, 0x62, 0x42, 0x33, 0x12, 0x12, 0x67, 0x12, 0x18, 0x0a, 0x07, 0x6d, 0x73, 0x67, 0x54, 0x79, 0x70, 0x65, 0x18, 0x01, 0x20, 0x01,
0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x74, 0x79, 0x28, 0x05, 0x52, 0x07, 0x6d, 0x73, 0x67, 0x54, 0x79, 0x70, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x6d,
0x70, 0x65, 0x12, 0x3c, 0x0a, 0x0f, 0x6d, 0x73, 0x67, 0x41, 0x64, 0x64, 0x46, 0x72, 0x64, 0x4e, 0x73, 0x67, 0x53, 0x65, 0x71, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x06, 0x6d, 0x73, 0x67,
0x6f, 0x74, 0x69, 0x66, 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x53, 0x75, 0x53, 0x65, 0x71, 0x12, 0x18, 0x0a, 0x07, 0x67, 0x72, 0x70, 0x43, 0x6f, 0x64, 0x65, 0x18, 0x03,
0x62, 0x42, 0x33, 0x41, 0x64, 0x64, 0x46, 0x72, 0x64, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x52, 0x20, 0x01, 0x28, 0x03, 0x52, 0x07, 0x67, 0x72, 0x70, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x16, 0x0a,
0x0f, 0x6d, 0x73, 0x67, 0x41, 0x64, 0x64, 0x46, 0x72, 0x64, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x06, 0x67, 0x61, 0x43, 0x6f, 0x64, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x06, 0x67,
0x22, 0x39, 0x0a, 0x11, 0x53, 0x75, 0x62, 0x42, 0x33, 0x41, 0x64, 0x64, 0x46, 0x72, 0x64, 0x4e, 0x61, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x6f, 0x70, 0x74, 0x55, 0x69, 0x6e, 0x31,
0x6f, 0x74, 0x69, 0x66, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x75, 0x69, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x18, 0x05, 0x20, 0x01, 0x28, 0x03, 0x52, 0x07, 0x6f, 0x70, 0x74, 0x55, 0x69, 0x6e, 0x31, 0x12,
0x28, 0x03, 0x52, 0x03, 0x75, 0x69, 0x6e, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x69, 0x63, 0x6b, 0x18, 0x18, 0x0a, 0x07, 0x6f, 0x70, 0x74, 0x55, 0x69, 0x6e, 0x32, 0x18, 0x06, 0x20, 0x01, 0x28, 0x03,
0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x69, 0x63, 0x6b, 0x22, 0x7a, 0x0a, 0x05, 0x53, 0x52, 0x07, 0x6f, 0x70, 0x74, 0x55, 0x69, 0x6e, 0x32, 0x12, 0x16, 0x0a, 0x06, 0x6d, 0x73, 0x67,
0x75, 0x62, 0x34, 0x34, 0x12, 0x39, 0x0a, 0x0d, 0x66, 0x72, 0x69, 0x65, 0x6e, 0x64, 0x53, 0x79, 0x42, 0x75, 0x66, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x06, 0x6d, 0x73, 0x67, 0x42, 0x75,
0x6e, 0x63, 0x4d, 0x73, 0x67, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x53, 0x75, 0x66, 0x12, 0x18, 0x0a, 0x07, 0x61, 0x75, 0x74, 0x68, 0x4b, 0x65, 0x79, 0x18, 0x08, 0x20, 0x01,
0x62, 0x34, 0x34, 0x46, 0x72, 0x69, 0x65, 0x6e, 0x64, 0x53, 0x79, 0x6e, 0x63, 0x4d, 0x73, 0x67, 0x28, 0x0c, 0x52, 0x07, 0x61, 0x75, 0x74, 0x68, 0x4b, 0x65, 0x79, 0x12, 0x1c, 0x0a, 0x09, 0x6d,
0x52, 0x0d, 0x66, 0x72, 0x69, 0x65, 0x6e, 0x64, 0x53, 0x79, 0x6e, 0x63, 0x4d, 0x73, 0x67, 0x12, 0x73, 0x67, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x09, 0x20, 0x01, 0x28, 0x05, 0x52, 0x09,
0x36, 0x0a, 0x0c, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x53, 0x79, 0x6e, 0x63, 0x4d, 0x73, 0x67, 0x18, 0x6d, 0x73, 0x67, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x1c, 0x0a, 0x09, 0x61, 0x63, 0x74,
0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x53, 0x75, 0x62, 0x34, 0x34, 0x47, 0x72, 0x6f, 0x69, 0x6f, 0x6e, 0x55, 0x69, 0x6e, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x61, 0x63,
0x75, 0x70, 0x53, 0x79, 0x6e, 0x63, 0x4d, 0x73, 0x67, 0x52, 0x0c, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x55, 0x69, 0x6e, 0x12, 0x1e, 0x0a, 0x0a, 0x61, 0x63, 0x74, 0x69, 0x6f,
0x53, 0x79, 0x6e, 0x63, 0x4d, 0x73, 0x67, 0x22, 0xf0, 0x01, 0x0a, 0x12, 0x53, 0x75, 0x62, 0x34, 0x6e, 0x54, 0x69, 0x6d, 0x65, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0a, 0x61, 0x63, 0x74,
0x34, 0x46, 0x72, 0x69, 0x65, 0x6e, 0x64, 0x53, 0x79, 0x6e, 0x63, 0x4d, 0x73, 0x67, 0x12, 0x10, 0x69, 0x6f, 0x6e, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x26, 0x0a, 0x0e, 0x63, 0x75, 0x72, 0x4d, 0x61,
0x0a, 0x03, 0x75, 0x69, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x03, 0x75, 0x69, 0x6e, 0x78, 0x4d, 0x65, 0x6d, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x05, 0x52,
0x12, 0x12, 0x0a, 0x04, 0x66, 0x55, 0x69, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x04, 0x0e, 0x63, 0x75, 0x72, 0x4d, 0x61, 0x78, 0x4d, 0x65, 0x6d, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x12,
0x66, 0x55, 0x69, 0x6e, 0x12, 0x20, 0x0a, 0x0b, 0x70, 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, 0x54, 0x28, 0x0a, 0x0f, 0x6e, 0x65, 0x78, 0x74, 0x4d, 0x61, 0x78, 0x4d, 0x65, 0x6d, 0x43, 0x6f, 0x75,
0x79, 0x70, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0b, 0x70, 0x72, 0x6f, 0x63, 0x65, 0x6e, 0x74, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0f, 0x6e, 0x65, 0x78, 0x74, 0x4d, 0x61,
0x73, 0x73, 0x54, 0x79, 0x70, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x04, 0x78, 0x4d, 0x65, 0x6d, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x20, 0x0a, 0x0b, 0x63, 0x75, 0x72,
0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x74, 0x69, 0x6d, 0x65, 0x12, 0x20, 0x0a, 0x0b, 0x70, 0x72, 0x4d, 0x65, 0x6d, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0b,
0x6f, 0x63, 0x65, 0x73, 0x73, 0x46, 0x6c, 0x61, 0x67, 0x18, 0x05, 0x20, 0x01, 0x28, 0x05, 0x52, 0x63, 0x75, 0x72, 0x4d, 0x65, 0x6d, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x1a, 0x0a, 0x08, 0x72,
0x0b, 0x70, 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, 0x46, 0x6c, 0x61, 0x67, 0x12, 0x1a, 0x0a, 0x08, 0x65, 0x71, 0x53, 0x72, 0x63, 0x49, 0x64, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x72,
0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x49, 0x64, 0x18, 0x06, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x65, 0x71, 0x53, 0x72, 0x63, 0x49, 0x64, 0x12, 0x20, 0x0a, 0x0b, 0x72, 0x65, 0x71, 0x53, 0x72,
0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x49, 0x64, 0x12, 0x20, 0x0a, 0x0b, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x53, 0x75, 0x62, 0x49, 0x64, 0x18, 0x10, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0b, 0x72, 0x65,
0x63, 0x65, 0x53, 0x75, 0x62, 0x49, 0x64, 0x18, 0x07, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0b, 0x73, 0x71, 0x53, 0x72, 0x63, 0x53, 0x75, 0x62, 0x49, 0x64, 0x12, 0x20, 0x0a, 0x0b, 0x69, 0x6e, 0x76,
0x6f, 0x75, 0x72, 0x63, 0x65, 0x53, 0x75, 0x62, 0x49, 0x64, 0x12, 0x1e, 0x0a, 0x0a, 0x73, 0x74, 0x69, 0x74, 0x65, 0x72, 0x52, 0x6f, 0x6c, 0x65, 0x18, 0x11, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0b,
0x72, 0x57, 0x6f, 0x72, 0x64, 0x69, 0x6e, 0x67, 0x18, 0x08, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0a, 0x69, 0x6e, 0x76, 0x69, 0x74, 0x65, 0x72, 0x52, 0x6f, 0x6c, 0x65, 0x12, 0x20, 0x0a, 0x0b, 0x65,
0x73, 0x74, 0x72, 0x57, 0x6f, 0x72, 0x64, 0x69, 0x6e, 0x67, 0x22, 0xd1, 0x04, 0x0a, 0x11, 0x53, 0x78, 0x74, 0x41, 0x64, 0x6d, 0x69, 0x6e, 0x4e, 0x75, 0x6d, 0x18, 0x12, 0x20, 0x01, 0x28, 0x05,
0x75, 0x62, 0x34, 0x34, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x53, 0x79, 0x6e, 0x63, 0x4d, 0x73, 0x67, 0x52, 0x0b, 0x65, 0x78, 0x74, 0x41, 0x64, 0x6d, 0x69, 0x6e, 0x4e, 0x75, 0x6d, 0x12, 0x20, 0x0a,
0x12, 0x18, 0x0a, 0x07, 0x6d, 0x73, 0x67, 0x54, 0x79, 0x70, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x70, 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, 0x46, 0x6c, 0x61, 0x67, 0x18, 0x13, 0x20, 0x01,
0x05, 0x52, 0x07, 0x6d, 0x73, 0x67, 0x54, 0x79, 0x70, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x6d, 0x73, 0x28, 0x05, 0x52, 0x0b, 0x70, 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, 0x46, 0x6c, 0x61, 0x67, 0x42,
0x67, 0x53, 0x65, 0x71, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x06, 0x6d, 0x73, 0x67, 0x53, 0x06, 0x5a, 0x04, 0x2e, 0x3b, 0x70, 0x62, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
0x65, 0x71, 0x12, 0x18, 0x0a, 0x07, 0x67, 0x72, 0x70, 0x43, 0x6f, 0x64, 0x65, 0x18, 0x03, 0x20,
0x01, 0x28, 0x03, 0x52, 0x07, 0x67, 0x72, 0x70, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x16, 0x0a, 0x06,
0x67, 0x61, 0x43, 0x6f, 0x64, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x06, 0x67, 0x61,
0x43, 0x6f, 0x64, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x6f, 0x70, 0x74, 0x55, 0x69, 0x6e, 0x31, 0x18,
0x05, 0x20, 0x01, 0x28, 0x03, 0x52, 0x07, 0x6f, 0x70, 0x74, 0x55, 0x69, 0x6e, 0x31, 0x12, 0x18,
0x0a, 0x07, 0x6f, 0x70, 0x74, 0x55, 0x69, 0x6e, 0x32, 0x18, 0x06, 0x20, 0x01, 0x28, 0x03, 0x52,
0x07, 0x6f, 0x70, 0x74, 0x55, 0x69, 0x6e, 0x32, 0x12, 0x16, 0x0a, 0x06, 0x6d, 0x73, 0x67, 0x42,
0x75, 0x66, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x06, 0x6d, 0x73, 0x67, 0x42, 0x75, 0x66,
0x12, 0x18, 0x0a, 0x07, 0x61, 0x75, 0x74, 0x68, 0x4b, 0x65, 0x79, 0x18, 0x08, 0x20, 0x01, 0x28,
0x0c, 0x52, 0x07, 0x61, 0x75, 0x74, 0x68, 0x4b, 0x65, 0x79, 0x12, 0x1c, 0x0a, 0x09, 0x6d, 0x73,
0x67, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x09, 0x20, 0x01, 0x28, 0x05, 0x52, 0x09, 0x6d,
0x73, 0x67, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x1c, 0x0a, 0x09, 0x61, 0x63, 0x74, 0x69,
0x6f, 0x6e, 0x55, 0x69, 0x6e, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x61, 0x63, 0x74,
0x69, 0x6f, 0x6e, 0x55, 0x69, 0x6e, 0x12, 0x1e, 0x0a, 0x0a, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e,
0x54, 0x69, 0x6d, 0x65, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0a, 0x61, 0x63, 0x74, 0x69,
0x6f, 0x6e, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x26, 0x0a, 0x0e, 0x63, 0x75, 0x72, 0x4d, 0x61, 0x78,
0x4d, 0x65, 0x6d, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0e,
0x63, 0x75, 0x72, 0x4d, 0x61, 0x78, 0x4d, 0x65, 0x6d, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x28,
0x0a, 0x0f, 0x6e, 0x65, 0x78, 0x74, 0x4d, 0x61, 0x78, 0x4d, 0x65, 0x6d, 0x43, 0x6f, 0x75, 0x6e,
0x74, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0f, 0x6e, 0x65, 0x78, 0x74, 0x4d, 0x61, 0x78,
0x4d, 0x65, 0x6d, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x20, 0x0a, 0x0b, 0x63, 0x75, 0x72, 0x4d,
0x65, 0x6d, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0b, 0x63,
0x75, 0x72, 0x4d, 0x65, 0x6d, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x1a, 0x0a, 0x08, 0x72, 0x65,
0x71, 0x53, 0x72, 0x63, 0x49, 0x64, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x72, 0x65,
0x71, 0x53, 0x72, 0x63, 0x49, 0x64, 0x12, 0x20, 0x0a, 0x0b, 0x72, 0x65, 0x71, 0x53, 0x72, 0x63,
0x53, 0x75, 0x62, 0x49, 0x64, 0x18, 0x10, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0b, 0x72, 0x65, 0x71,
0x53, 0x72, 0x63, 0x53, 0x75, 0x62, 0x49, 0x64, 0x12, 0x20, 0x0a, 0x0b, 0x69, 0x6e, 0x76, 0x69,
0x74, 0x65, 0x72, 0x52, 0x6f, 0x6c, 0x65, 0x18, 0x11, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0b, 0x69,
0x6e, 0x76, 0x69, 0x74, 0x65, 0x72, 0x52, 0x6f, 0x6c, 0x65, 0x12, 0x20, 0x0a, 0x0b, 0x65, 0x78,
0x74, 0x41, 0x64, 0x6d, 0x69, 0x6e, 0x4e, 0x75, 0x6d, 0x18, 0x12, 0x20, 0x01, 0x28, 0x05, 0x52,
0x0b, 0x65, 0x78, 0x74, 0x41, 0x64, 0x6d, 0x69, 0x6e, 0x4e, 0x75, 0x6d, 0x12, 0x20, 0x0a, 0x0b,
0x70, 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, 0x46, 0x6c, 0x61, 0x67, 0x18, 0x13, 0x20, 0x01, 0x28,
0x05, 0x52, 0x0b, 0x70, 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, 0x46, 0x6c, 0x61, 0x67, 0x42, 0x06,
0x5a, 0x04, 0x2e, 0x3b, 0x70, 0x62, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
} }
var ( var (
@ -3518,38 +3247,35 @@ func file_data_proto_rawDescGZIP() []byte {
return file_data_proto_rawDescData return file_data_proto_rawDescData
} }
var file_data_proto_msgTypes = make([]protoimpl.MessageInfo, 30) var file_data_proto_msgTypes = make([]protoimpl.MessageInfo, 27)
var file_data_proto_goTypes = []interface{}{ var file_data_proto_goTypes = []interface{}{
(*DeviceInfo)(nil), // 0: DeviceInfo (*DeviceInfo)(nil), // 0: DeviceInfo
(*RequestBody)(nil), // 1: RequestBody (*RequestBody)(nil), // 1: RequestBody
(*ConfigSeq)(nil), // 2: ConfigSeq (*ConfigSeq)(nil), // 2: ConfigSeq
(*D50ReqBody)(nil), // 3: D50ReqBody (*D50ReqBody)(nil), // 3: D50ReqBody
(*D388ReqBody)(nil), // 4: D388ReqBody (*D388ReqBody)(nil), // 4: D388ReqBody
(*D388RespBody)(nil), // 5: D388RespBody (*D388RespBody)(nil), // 5: D388RespBody
(*GetPttUrlReq)(nil), // 6: GetPttUrlReq (*GetPttUrlReq)(nil), // 6: GetPttUrlReq
(*GetPttUrlRsp)(nil), // 7: GetPttUrlRsp (*GetPttUrlRsp)(nil), // 7: GetPttUrlRsp
(*ReqDataHighwayHead)(nil), // 8: ReqDataHighwayHead (*ReqDataHighwayHead)(nil), // 8: ReqDataHighwayHead
(*RspDataHighwayHead)(nil), // 9: RspDataHighwayHead (*RspDataHighwayHead)(nil), // 9: RspDataHighwayHead
(*DataHighwayHead)(nil), // 10: DataHighwayHead (*DataHighwayHead)(nil), // 10: DataHighwayHead
(*SegHead)(nil), // 11: SegHead (*SegHead)(nil), // 11: SegHead
(*TryUpImgReq)(nil), // 12: TryUpImgReq (*TryUpImgReq)(nil), // 12: TryUpImgReq
(*TryUpImgResp)(nil), // 13: TryUpImgResp (*TryUpImgResp)(nil), // 13: TryUpImgResp
(*TryUpPttReq)(nil), // 14: TryUpPttReq (*TryUpPttReq)(nil), // 14: TryUpPttReq
(*TryUpPttResp)(nil), // 15: TryUpPttResp (*TryUpPttResp)(nil), // 15: TryUpPttResp
(*ImgInfo)(nil), // 16: ImgInfo (*ImgInfo)(nil), // 16: ImgInfo
(*DeleteMessageRequest)(nil), // 17: DeleteMessageRequest (*DeleteMessageRequest)(nil), // 17: DeleteMessageRequest
(*MessageItem)(nil), // 18: MessageItem (*MessageItem)(nil), // 18: MessageItem
(*NotifyMsgBody)(nil), // 19: NotifyMsgBody (*SubD4)(nil), // 19: SubD4
(*MessageRecallReminder)(nil), // 20: MessageRecallReminder (*Sub8A)(nil), // 20: Sub8A
(*RecalledMessageMeta)(nil), // 21: RecalledMessageMeta (*Sub8AMsgInfo)(nil), // 21: Sub8AMsgInfo
(*SubD4)(nil), // 22: SubD4 (*SubB3)(nil), // 22: SubB3
(*Sub8A)(nil), // 23: Sub8A (*SubB3AddFrdNotify)(nil), // 23: SubB3AddFrdNotify
(*Sub8AMsgInfo)(nil), // 24: Sub8AMsgInfo (*Sub44)(nil), // 24: Sub44
(*SubB3)(nil), // 25: SubB3 (*Sub44FriendSyncMsg)(nil), // 25: Sub44FriendSyncMsg
(*SubB3AddFrdNotify)(nil), // 26: SubB3AddFrdNotify (*Sub44GroupSyncMsg)(nil), // 26: Sub44GroupSyncMsg
(*Sub44)(nil), // 27: Sub44
(*Sub44FriendSyncMsg)(nil), // 28: Sub44FriendSyncMsg
(*Sub44GroupSyncMsg)(nil), // 29: Sub44GroupSyncMsg
} }
var file_data_proto_depIdxs = []int32{ var file_data_proto_depIdxs = []int32{
2, // 0: RequestBody.rpt_config_list:type_name -> ConfigSeq 2, // 0: RequestBody.rpt_config_list:type_name -> ConfigSeq
@ -3565,17 +3291,15 @@ var file_data_proto_depIdxs = []int32{
11, // 10: RspDataHighwayHead.msgSeghead:type_name -> SegHead 11, // 10: RspDataHighwayHead.msgSeghead:type_name -> SegHead
16, // 11: TryUpImgResp.msgImgInfo:type_name -> ImgInfo 16, // 11: TryUpImgResp.msgImgInfo:type_name -> ImgInfo
18, // 12: DeleteMessageRequest.items:type_name -> MessageItem 18, // 12: DeleteMessageRequest.items:type_name -> MessageItem
20, // 13: NotifyMsgBody.optMsgRecall:type_name -> MessageRecallReminder 21, // 13: Sub8A.msg_info:type_name -> Sub8AMsgInfo
21, // 14: MessageRecallReminder.recalledMsgList:type_name -> RecalledMessageMeta 23, // 14: SubB3.msgAddFrdNotify:type_name -> SubB3AddFrdNotify
24, // 15: Sub8A.msg_info:type_name -> Sub8AMsgInfo 25, // 15: Sub44.friendSyncMsg:type_name -> Sub44FriendSyncMsg
26, // 16: SubB3.msgAddFrdNotify:type_name -> SubB3AddFrdNotify 26, // 16: Sub44.groupSyncMsg:type_name -> Sub44GroupSyncMsg
28, // 17: Sub44.friendSyncMsg:type_name -> Sub44FriendSyncMsg 17, // [17:17] is the sub-list for method output_type
29, // 18: Sub44.groupSyncMsg:type_name -> Sub44GroupSyncMsg 17, // [17:17] is the sub-list for method input_type
19, // [19:19] is the sub-list for method output_type 17, // [17:17] is the sub-list for extension type_name
19, // [19:19] is the sub-list for method input_type 17, // [17:17] is the sub-list for extension extendee
19, // [19:19] is the sub-list for extension type_name 0, // [0:17] is the sub-list for field type_name
19, // [19:19] is the sub-list for extension extendee
0, // [0:19] is the sub-list for field type_name
} }
func init() { file_data_proto_init() } func init() { file_data_proto_init() }
@ -3813,42 +3537,6 @@ func file_data_proto_init() {
} }
} }
file_data_proto_msgTypes[19].Exporter = func(v interface{}, i int) interface{} { file_data_proto_msgTypes[19].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*NotifyMsgBody); i {
case 0:
return &v.state
case 1:
return &v.sizeCache
case 2:
return &v.unknownFields
default:
return nil
}
}
file_data_proto_msgTypes[20].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*MessageRecallReminder); i {
case 0:
return &v.state
case 1:
return &v.sizeCache
case 2:
return &v.unknownFields
default:
return nil
}
}
file_data_proto_msgTypes[21].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*RecalledMessageMeta); i {
case 0:
return &v.state
case 1:
return &v.sizeCache
case 2:
return &v.unknownFields
default:
return nil
}
}
file_data_proto_msgTypes[22].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*SubD4); i { switch v := v.(*SubD4); i {
case 0: case 0:
return &v.state return &v.state
@ -3860,7 +3548,7 @@ func file_data_proto_init() {
return nil return nil
} }
} }
file_data_proto_msgTypes[23].Exporter = func(v interface{}, i int) interface{} { file_data_proto_msgTypes[20].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*Sub8A); i { switch v := v.(*Sub8A); i {
case 0: case 0:
return &v.state return &v.state
@ -3872,7 +3560,7 @@ func file_data_proto_init() {
return nil return nil
} }
} }
file_data_proto_msgTypes[24].Exporter = func(v interface{}, i int) interface{} { file_data_proto_msgTypes[21].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*Sub8AMsgInfo); i { switch v := v.(*Sub8AMsgInfo); i {
case 0: case 0:
return &v.state return &v.state
@ -3884,7 +3572,7 @@ func file_data_proto_init() {
return nil return nil
} }
} }
file_data_proto_msgTypes[25].Exporter = func(v interface{}, i int) interface{} { file_data_proto_msgTypes[22].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*SubB3); i { switch v := v.(*SubB3); i {
case 0: case 0:
return &v.state return &v.state
@ -3896,7 +3584,7 @@ func file_data_proto_init() {
return nil return nil
} }
} }
file_data_proto_msgTypes[26].Exporter = func(v interface{}, i int) interface{} { file_data_proto_msgTypes[23].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*SubB3AddFrdNotify); i { switch v := v.(*SubB3AddFrdNotify); i {
case 0: case 0:
return &v.state return &v.state
@ -3908,7 +3596,7 @@ func file_data_proto_init() {
return nil return nil
} }
} }
file_data_proto_msgTypes[27].Exporter = func(v interface{}, i int) interface{} { file_data_proto_msgTypes[24].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*Sub44); i { switch v := v.(*Sub44); i {
case 0: case 0:
return &v.state return &v.state
@ -3920,7 +3608,7 @@ func file_data_proto_init() {
return nil return nil
} }
} }
file_data_proto_msgTypes[28].Exporter = func(v interface{}, i int) interface{} { file_data_proto_msgTypes[25].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*Sub44FriendSyncMsg); i { switch v := v.(*Sub44FriendSyncMsg); i {
case 0: case 0:
return &v.state return &v.state
@ -3932,7 +3620,7 @@ func file_data_proto_init() {
return nil return nil
} }
} }
file_data_proto_msgTypes[29].Exporter = func(v interface{}, i int) interface{} { file_data_proto_msgTypes[26].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*Sub44GroupSyncMsg); i { switch v := v.(*Sub44GroupSyncMsg); i {
case 0: case 0:
return &v.state return &v.state
@ -3951,7 +3639,7 @@ func file_data_proto_init() {
GoPackagePath: reflect.TypeOf(x{}).PkgPath(), GoPackagePath: reflect.TypeOf(x{}).PkgPath(),
RawDescriptor: file_data_proto_rawDesc, RawDescriptor: file_data_proto_rawDesc,
NumEnums: 0, NumEnums: 0,
NumMessages: 30, NumMessages: 27,
NumExtensions: 0, NumExtensions: 0,
NumServices: 0, NumServices: 0,
}, },

View File

@ -235,31 +235,6 @@ message MessageItem {
bytes sig = 7; bytes sig = 7;
} }
message NotifyMsgBody {
MessageRecallReminder optMsgRecall = 11;
int32 serviceType = 13;
}
message MessageRecallReminder {
int64 uin = 1;
bytes nickname = 2;
repeated RecalledMessageMeta recalledMsgList = 3;
bytes reminderContent = 4;
bytes userdef = 5;
int32 groupType = 6;
int32 opType = 7;
}
message RecalledMessageMeta {
int32 seq = 1;
int32 time = 2;
int32 msgRandom = 3;
int32 msgType = 4;
int32 msgFlag = 5;
int64 authorUin = 6;
}
message SubD4 { message SubD4 {
int64 uin = 1; int64 uin = 1;
} }

File diff suppressed because it is too large Load Diff

View File

@ -194,7 +194,7 @@ message Elem {
AnonymousGroupMessage anonGroupMsg = 21; AnonymousGroupMessage anonGroupMsg = 21;
//QQLiveOld? qqLiveOld = 22; //QQLiveOld? qqLiveOld = 22;
//LifeOnlineAccount? lifeOnline = 23; //LifeOnlineAccount? lifeOnline = 23;
//QQWalletMsg? qqwalletMsg = 24; QQWalletMsg QQWalletMsg = 24;
//CrmElem? crmElem = 25; //CrmElem? crmElem = 25;
//ConferenceTipsInfo? conferenceTipsInfo = 26; //ConferenceTipsInfo? conferenceTipsInfo = 26;
//RedBagInfo? redbagInfo = 27; //RedBagInfo? redbagInfo = 27;
@ -232,6 +232,58 @@ message CommonElem {
int32 businessType = 3; int32 businessType = 3;
} }
message QQWalletMsg {
QQWalletAioBody aioBody = 1;
}
message QQWalletAioBody {
uint64 sendUin = 1;
QQWalletAioElem sender = 2;
QQWalletAioElem receiver = 3;
sint32 ChannelId = 4;
sint32 templateId = 5;
uint32 resend = 6;
uint32 msgPriority = 7;
sint32 redType = 8;
bytes billNo = 9;
bytes authKey = 10;
sint32 sessionType = 11;
sint32 msgType = 12;
sint32 envelOpeId = 13;
bytes name = 14;
sint32 confType = 15;
sint32 msgFrom = 16;
bytes pcBody = 17;
bytes index = 18;
uint32 redChannel = 19;
repeated uint64 grapUin = 20;
bytes pbReserve = 21;
}
message QQWalletAioElem{
uint32 background = 1;
uint32 icon = 2;
string title = 3;
string subtitle = 4;
string content = 5;
bytes linkUrl = 6;
bytes blackStripe = 7;
bytes notice = 8;
uint32 titleColor = 9;
uint32 subtitleColor = 10;
bytes actionsPriority = 11;
bytes jumpUrl = 12;
bytes nativeIos = 13;
bytes nativeAndroid = 14;
bytes iconUrl = 15;
uint32 contentColor = 16;
uint32 contentBgColor = 17;
bytes aioImageLeft = 18;
bytes aioImageRight = 19;
bytes cftImage = 20;
bytes pbReserve = 21;
}
message RichMsg { message RichMsg {
bytes template1 = 1; bytes template1 = 1;
int32 serviceId = 2; int32 serviceId = 2;

View File

@ -0,0 +1,896 @@
// Code generated by protoc-gen-go. DO NOT EDIT.
// versions:
// protoc-gen-go v1.25.0
// protoc v3.11.4
// source: group0x857.proto
package notify
import (
proto "github.com/golang/protobuf/proto"
protoreflect "google.golang.org/protobuf/reflect/protoreflect"
protoimpl "google.golang.org/protobuf/runtime/protoimpl"
reflect "reflect"
sync "sync"
)
const (
// Verify that this generated code is sufficiently up-to-date.
_ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion)
// Verify that runtime/protoimpl is sufficiently up-to-date.
_ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20)
)
// This is a compile-time assertion that a sufficiently up-to-date version
// of the legacy proto package is being used.
const _ = proto.ProtoPackageIsVersion4
type NotifyMsgBody struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
OptMsgGrayTips *AIOGrayTipsInfo `protobuf:"bytes,5,opt,name=optMsgGrayTips,proto3" json:"optMsgGrayTips,omitempty"`
OptMsgRedTips *RedGrayTipsInfo `protobuf:"bytes,9,opt,name=optMsgRedTips,proto3" json:"optMsgRedTips,omitempty"`
OptMsgRecall *MessageRecallReminder `protobuf:"bytes,11,opt,name=optMsgRecall,proto3" json:"optMsgRecall,omitempty"`
OptGeneralGrayTip *GeneralGrayTipInfo `protobuf:"bytes,26,opt,name=optGeneralGrayTip,proto3" json:"optGeneralGrayTip,omitempty"`
ServiceType int32 `protobuf:"varint,13,opt,name=serviceType,proto3" json:"serviceType,omitempty"`
}
func (x *NotifyMsgBody) Reset() {
*x = NotifyMsgBody{}
if protoimpl.UnsafeEnabled {
mi := &file_group0x857_proto_msgTypes[0]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
}
func (x *NotifyMsgBody) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*NotifyMsgBody) ProtoMessage() {}
func (x *NotifyMsgBody) ProtoReflect() protoreflect.Message {
mi := &file_group0x857_proto_msgTypes[0]
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 NotifyMsgBody.ProtoReflect.Descriptor instead.
func (*NotifyMsgBody) Descriptor() ([]byte, []int) {
return file_group0x857_proto_rawDescGZIP(), []int{0}
}
func (x *NotifyMsgBody) GetOptMsgGrayTips() *AIOGrayTipsInfo {
if x != nil {
return x.OptMsgGrayTips
}
return nil
}
func (x *NotifyMsgBody) GetOptMsgRedTips() *RedGrayTipsInfo {
if x != nil {
return x.OptMsgRedTips
}
return nil
}
func (x *NotifyMsgBody) GetOptMsgRecall() *MessageRecallReminder {
if x != nil {
return x.OptMsgRecall
}
return nil
}
func (x *NotifyMsgBody) GetOptGeneralGrayTip() *GeneralGrayTipInfo {
if x != nil {
return x.OptGeneralGrayTip
}
return nil
}
func (x *NotifyMsgBody) GetServiceType() int32 {
if x != nil {
return x.ServiceType
}
return 0
}
type AIOGrayTipsInfo struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
ShowLatest uint32 `protobuf:"varint,1,opt,name=showLatest,proto3" json:"showLatest,omitempty"`
Content []byte `protobuf:"bytes,2,opt,name=content,proto3" json:"content,omitempty"`
Remind uint32 `protobuf:"varint,3,opt,name=remind,proto3" json:"remind,omitempty"`
Brief []byte `protobuf:"bytes,4,opt,name=brief,proto3" json:"brief,omitempty"`
ReceiverUin uint64 `protobuf:"varint,5,opt,name=receiverUin,proto3" json:"receiverUin,omitempty"`
ReliaoAdminOpt uint32 `protobuf:"varint,6,opt,name=reliaoAdminOpt,proto3" json:"reliaoAdminOpt,omitempty"`
}
func (x *AIOGrayTipsInfo) Reset() {
*x = AIOGrayTipsInfo{}
if protoimpl.UnsafeEnabled {
mi := &file_group0x857_proto_msgTypes[1]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
}
func (x *AIOGrayTipsInfo) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*AIOGrayTipsInfo) ProtoMessage() {}
func (x *AIOGrayTipsInfo) ProtoReflect() protoreflect.Message {
mi := &file_group0x857_proto_msgTypes[1]
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 AIOGrayTipsInfo.ProtoReflect.Descriptor instead.
func (*AIOGrayTipsInfo) Descriptor() ([]byte, []int) {
return file_group0x857_proto_rawDescGZIP(), []int{1}
}
func (x *AIOGrayTipsInfo) GetShowLatest() uint32 {
if x != nil {
return x.ShowLatest
}
return 0
}
func (x *AIOGrayTipsInfo) GetContent() []byte {
if x != nil {
return x.Content
}
return nil
}
func (x *AIOGrayTipsInfo) GetRemind() uint32 {
if x != nil {
return x.Remind
}
return 0
}
func (x *AIOGrayTipsInfo) GetBrief() []byte {
if x != nil {
return x.Brief
}
return nil
}
func (x *AIOGrayTipsInfo) GetReceiverUin() uint64 {
if x != nil {
return x.ReceiverUin
}
return 0
}
func (x *AIOGrayTipsInfo) GetReliaoAdminOpt() uint32 {
if x != nil {
return x.ReliaoAdminOpt
}
return 0
}
type GeneralGrayTipInfo struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
BusiType uint64 `protobuf:"varint,1,opt,name=busiType,proto3" json:"busiType,omitempty"`
BusiId uint64 `protobuf:"varint,2,opt,name=busiId,proto3" json:"busiId,omitempty"`
CtrlFlag uint32 `protobuf:"varint,3,opt,name=ctrlFlag,proto3" json:"ctrlFlag,omitempty"`
C2CType uint32 `protobuf:"varint,4,opt,name=c2cType,proto3" json:"c2cType,omitempty"`
ServiceType uint32 `protobuf:"varint,5,opt,name=serviceType,proto3" json:"serviceType,omitempty"`
TemplId uint64 `protobuf:"varint,6,opt,name=templId,proto3" json:"templId,omitempty"`
MsgTemplParam []*TemplParam `protobuf:"bytes,7,rep,name=msgTemplParam,proto3" json:"msgTemplParam,omitempty"`
Content string `protobuf:"bytes,8,opt,name=content,proto3" json:"content,omitempty"`
}
func (x *GeneralGrayTipInfo) Reset() {
*x = GeneralGrayTipInfo{}
if protoimpl.UnsafeEnabled {
mi := &file_group0x857_proto_msgTypes[2]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
}
func (x *GeneralGrayTipInfo) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*GeneralGrayTipInfo) ProtoMessage() {}
func (x *GeneralGrayTipInfo) ProtoReflect() protoreflect.Message {
mi := &file_group0x857_proto_msgTypes[2]
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 GeneralGrayTipInfo.ProtoReflect.Descriptor instead.
func (*GeneralGrayTipInfo) Descriptor() ([]byte, []int) {
return file_group0x857_proto_rawDescGZIP(), []int{2}
}
func (x *GeneralGrayTipInfo) GetBusiType() uint64 {
if x != nil {
return x.BusiType
}
return 0
}
func (x *GeneralGrayTipInfo) GetBusiId() uint64 {
if x != nil {
return x.BusiId
}
return 0
}
func (x *GeneralGrayTipInfo) GetCtrlFlag() uint32 {
if x != nil {
return x.CtrlFlag
}
return 0
}
func (x *GeneralGrayTipInfo) GetC2CType() uint32 {
if x != nil {
return x.C2CType
}
return 0
}
func (x *GeneralGrayTipInfo) GetServiceType() uint32 {
if x != nil {
return x.ServiceType
}
return 0
}
func (x *GeneralGrayTipInfo) GetTemplId() uint64 {
if x != nil {
return x.TemplId
}
return 0
}
func (x *GeneralGrayTipInfo) GetMsgTemplParam() []*TemplParam {
if x != nil {
return x.MsgTemplParam
}
return nil
}
func (x *GeneralGrayTipInfo) GetContent() string {
if x != nil {
return x.Content
}
return ""
}
type TemplParam struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"`
Value string `protobuf:"bytes,2,opt,name=value,proto3" json:"value,omitempty"`
}
func (x *TemplParam) Reset() {
*x = TemplParam{}
if protoimpl.UnsafeEnabled {
mi := &file_group0x857_proto_msgTypes[3]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
}
func (x *TemplParam) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*TemplParam) ProtoMessage() {}
func (x *TemplParam) ProtoReflect() protoreflect.Message {
mi := &file_group0x857_proto_msgTypes[3]
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 TemplParam.ProtoReflect.Descriptor instead.
func (*TemplParam) Descriptor() ([]byte, []int) {
return file_group0x857_proto_rawDescGZIP(), []int{3}
}
func (x *TemplParam) GetName() string {
if x != nil {
return x.Name
}
return ""
}
func (x *TemplParam) GetValue() string {
if x != nil {
return x.Value
}
return ""
}
type MessageRecallReminder struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
Uin int64 `protobuf:"varint,1,opt,name=uin,proto3" json:"uin,omitempty"`
Nickname []byte `protobuf:"bytes,2,opt,name=nickname,proto3" json:"nickname,omitempty"`
RecalledMsgList []*RecalledMessageMeta `protobuf:"bytes,3,rep,name=recalledMsgList,proto3" json:"recalledMsgList,omitempty"`
ReminderContent []byte `protobuf:"bytes,4,opt,name=reminderContent,proto3" json:"reminderContent,omitempty"`
Userdef []byte `protobuf:"bytes,5,opt,name=userdef,proto3" json:"userdef,omitempty"`
GroupType int32 `protobuf:"varint,6,opt,name=groupType,proto3" json:"groupType,omitempty"`
OpType int32 `protobuf:"varint,7,opt,name=opType,proto3" json:"opType,omitempty"`
}
func (x *MessageRecallReminder) Reset() {
*x = MessageRecallReminder{}
if protoimpl.UnsafeEnabled {
mi := &file_group0x857_proto_msgTypes[4]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
}
func (x *MessageRecallReminder) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*MessageRecallReminder) ProtoMessage() {}
func (x *MessageRecallReminder) ProtoReflect() protoreflect.Message {
mi := &file_group0x857_proto_msgTypes[4]
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 MessageRecallReminder.ProtoReflect.Descriptor instead.
func (*MessageRecallReminder) Descriptor() ([]byte, []int) {
return file_group0x857_proto_rawDescGZIP(), []int{4}
}
func (x *MessageRecallReminder) GetUin() int64 {
if x != nil {
return x.Uin
}
return 0
}
func (x *MessageRecallReminder) GetNickname() []byte {
if x != nil {
return x.Nickname
}
return nil
}
func (x *MessageRecallReminder) GetRecalledMsgList() []*RecalledMessageMeta {
if x != nil {
return x.RecalledMsgList
}
return nil
}
func (x *MessageRecallReminder) GetReminderContent() []byte {
if x != nil {
return x.ReminderContent
}
return nil
}
func (x *MessageRecallReminder) GetUserdef() []byte {
if x != nil {
return x.Userdef
}
return nil
}
func (x *MessageRecallReminder) GetGroupType() int32 {
if x != nil {
return x.GroupType
}
return 0
}
func (x *MessageRecallReminder) GetOpType() int32 {
if x != nil {
return x.OpType
}
return 0
}
type RecalledMessageMeta struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
Seq int32 `protobuf:"varint,1,opt,name=seq,proto3" json:"seq,omitempty"`
Time int32 `protobuf:"varint,2,opt,name=time,proto3" json:"time,omitempty"`
MsgRandom int32 `protobuf:"varint,3,opt,name=msgRandom,proto3" json:"msgRandom,omitempty"`
MsgType int32 `protobuf:"varint,4,opt,name=msgType,proto3" json:"msgType,omitempty"`
MsgFlag int32 `protobuf:"varint,5,opt,name=msgFlag,proto3" json:"msgFlag,omitempty"`
AuthorUin int64 `protobuf:"varint,6,opt,name=authorUin,proto3" json:"authorUin,omitempty"`
}
func (x *RecalledMessageMeta) Reset() {
*x = RecalledMessageMeta{}
if protoimpl.UnsafeEnabled {
mi := &file_group0x857_proto_msgTypes[5]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
}
func (x *RecalledMessageMeta) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*RecalledMessageMeta) ProtoMessage() {}
func (x *RecalledMessageMeta) ProtoReflect() protoreflect.Message {
mi := &file_group0x857_proto_msgTypes[5]
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 RecalledMessageMeta.ProtoReflect.Descriptor instead.
func (*RecalledMessageMeta) Descriptor() ([]byte, []int) {
return file_group0x857_proto_rawDescGZIP(), []int{5}
}
func (x *RecalledMessageMeta) GetSeq() int32 {
if x != nil {
return x.Seq
}
return 0
}
func (x *RecalledMessageMeta) GetTime() int32 {
if x != nil {
return x.Time
}
return 0
}
func (x *RecalledMessageMeta) GetMsgRandom() int32 {
if x != nil {
return x.MsgRandom
}
return 0
}
func (x *RecalledMessageMeta) GetMsgType() int32 {
if x != nil {
return x.MsgType
}
return 0
}
func (x *RecalledMessageMeta) GetMsgFlag() int32 {
if x != nil {
return x.MsgFlag
}
return 0
}
func (x *RecalledMessageMeta) GetAuthorUin() int64 {
if x != nil {
return x.AuthorUin
}
return 0
}
type RedGrayTipsInfo struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
ShowLatest uint32 `protobuf:"varint,1,opt,name=showLatest,proto3" json:"showLatest,omitempty"`
SenderUin uint64 `protobuf:"varint,2,opt,name=senderUin,proto3" json:"senderUin,omitempty"`
ReceiverUin uint64 `protobuf:"varint,3,opt,name=receiverUin,proto3" json:"receiverUin,omitempty"`
SenderRichContent string `protobuf:"bytes,4,opt,name=senderRichContent,proto3" json:"senderRichContent,omitempty"`
ReceiverRichContent string `protobuf:"bytes,5,opt,name=receiverRichContent,proto3" json:"receiverRichContent,omitempty"`
AuthKey []byte `protobuf:"bytes,6,opt,name=authKey,proto3" json:"authKey,omitempty"`
MsgType int32 `protobuf:"zigzag32,7,opt,name=msgType,proto3" json:"msgType,omitempty"`
LuckyFlag uint32 `protobuf:"varint,8,opt,name=luckyFlag,proto3" json:"luckyFlag,omitempty"`
HideFlag uint32 `protobuf:"varint,9,opt,name=hideFlag,proto3" json:"hideFlag,omitempty"`
}
func (x *RedGrayTipsInfo) Reset() {
*x = RedGrayTipsInfo{}
if protoimpl.UnsafeEnabled {
mi := &file_group0x857_proto_msgTypes[6]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
}
func (x *RedGrayTipsInfo) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*RedGrayTipsInfo) ProtoMessage() {}
func (x *RedGrayTipsInfo) ProtoReflect() protoreflect.Message {
mi := &file_group0x857_proto_msgTypes[6]
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 RedGrayTipsInfo.ProtoReflect.Descriptor instead.
func (*RedGrayTipsInfo) Descriptor() ([]byte, []int) {
return file_group0x857_proto_rawDescGZIP(), []int{6}
}
func (x *RedGrayTipsInfo) GetShowLatest() uint32 {
if x != nil {
return x.ShowLatest
}
return 0
}
func (x *RedGrayTipsInfo) GetSenderUin() uint64 {
if x != nil {
return x.SenderUin
}
return 0
}
func (x *RedGrayTipsInfo) GetReceiverUin() uint64 {
if x != nil {
return x.ReceiverUin
}
return 0
}
func (x *RedGrayTipsInfo) GetSenderRichContent() string {
if x != nil {
return x.SenderRichContent
}
return ""
}
func (x *RedGrayTipsInfo) GetReceiverRichContent() string {
if x != nil {
return x.ReceiverRichContent
}
return ""
}
func (x *RedGrayTipsInfo) GetAuthKey() []byte {
if x != nil {
return x.AuthKey
}
return nil
}
func (x *RedGrayTipsInfo) GetMsgType() int32 {
if x != nil {
return x.MsgType
}
return 0
}
func (x *RedGrayTipsInfo) GetLuckyFlag() uint32 {
if x != nil {
return x.LuckyFlag
}
return 0
}
func (x *RedGrayTipsInfo) GetHideFlag() uint32 {
if x != nil {
return x.HideFlag
}
return 0
}
var File_group0x857_proto protoreflect.FileDescriptor
var file_group0x857_proto_rawDesc = []byte{
0x0a, 0x10, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x30, 0x78, 0x38, 0x35, 0x37, 0x2e, 0x70, 0x72, 0x6f,
0x74, 0x6f, 0x22, 0xa2, 0x02, 0x0a, 0x0d, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x4d, 0x73, 0x67,
0x42, 0x6f, 0x64, 0x79, 0x12, 0x38, 0x0a, 0x0e, 0x6f, 0x70, 0x74, 0x4d, 0x73, 0x67, 0x47, 0x72,
0x61, 0x79, 0x54, 0x69, 0x70, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x41,
0x49, 0x4f, 0x47, 0x72, 0x61, 0x79, 0x54, 0x69, 0x70, 0x73, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x0e,
0x6f, 0x70, 0x74, 0x4d, 0x73, 0x67, 0x47, 0x72, 0x61, 0x79, 0x54, 0x69, 0x70, 0x73, 0x12, 0x36,
0x0a, 0x0d, 0x6f, 0x70, 0x74, 0x4d, 0x73, 0x67, 0x52, 0x65, 0x64, 0x54, 0x69, 0x70, 0x73, 0x18,
0x09, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x52, 0x65, 0x64, 0x47, 0x72, 0x61, 0x79, 0x54,
0x69, 0x70, 0x73, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x0d, 0x6f, 0x70, 0x74, 0x4d, 0x73, 0x67, 0x52,
0x65, 0x64, 0x54, 0x69, 0x70, 0x73, 0x12, 0x3a, 0x0a, 0x0c, 0x6f, 0x70, 0x74, 0x4d, 0x73, 0x67,
0x52, 0x65, 0x63, 0x61, 0x6c, 0x6c, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x4d,
0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x52, 0x65, 0x63, 0x61, 0x6c, 0x6c, 0x52, 0x65, 0x6d, 0x69,
0x6e, 0x64, 0x65, 0x72, 0x52, 0x0c, 0x6f, 0x70, 0x74, 0x4d, 0x73, 0x67, 0x52, 0x65, 0x63, 0x61,
0x6c, 0x6c, 0x12, 0x41, 0x0a, 0x11, 0x6f, 0x70, 0x74, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x6c,
0x47, 0x72, 0x61, 0x79, 0x54, 0x69, 0x70, 0x18, 0x1a, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e,
0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x6c, 0x47, 0x72, 0x61, 0x79, 0x54, 0x69, 0x70, 0x49, 0x6e,
0x66, 0x6f, 0x52, 0x11, 0x6f, 0x70, 0x74, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x6c, 0x47, 0x72,
0x61, 0x79, 0x54, 0x69, 0x70, 0x12, 0x20, 0x0a, 0x0b, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65,
0x54, 0x79, 0x70, 0x65, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0b, 0x73, 0x65, 0x72, 0x76,
0x69, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x22, 0xc3, 0x01, 0x0a, 0x0f, 0x41, 0x49, 0x4f, 0x47,
0x72, 0x61, 0x79, 0x54, 0x69, 0x70, 0x73, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x1e, 0x0a, 0x0a, 0x73,
0x68, 0x6f, 0x77, 0x4c, 0x61, 0x74, 0x65, 0x73, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52,
0x0a, 0x73, 0x68, 0x6f, 0x77, 0x4c, 0x61, 0x74, 0x65, 0x73, 0x74, 0x12, 0x18, 0x0a, 0x07, 0x63,
0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x07, 0x63, 0x6f,
0x6e, 0x74, 0x65, 0x6e, 0x74, 0x12, 0x16, 0x0a, 0x06, 0x72, 0x65, 0x6d, 0x69, 0x6e, 0x64, 0x18,
0x03, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x06, 0x72, 0x65, 0x6d, 0x69, 0x6e, 0x64, 0x12, 0x14, 0x0a,
0x05, 0x62, 0x72, 0x69, 0x65, 0x66, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x05, 0x62, 0x72,
0x69, 0x65, 0x66, 0x12, 0x20, 0x0a, 0x0b, 0x72, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x72, 0x55,
0x69, 0x6e, 0x18, 0x05, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0b, 0x72, 0x65, 0x63, 0x65, 0x69, 0x76,
0x65, 0x72, 0x55, 0x69, 0x6e, 0x12, 0x26, 0x0a, 0x0e, 0x72, 0x65, 0x6c, 0x69, 0x61, 0x6f, 0x41,
0x64, 0x6d, 0x69, 0x6e, 0x4f, 0x70, 0x74, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0e, 0x72,
0x65, 0x6c, 0x69, 0x61, 0x6f, 0x41, 0x64, 0x6d, 0x69, 0x6e, 0x4f, 0x70, 0x74, 0x22, 0x87, 0x02,
0x0a, 0x12, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x6c, 0x47, 0x72, 0x61, 0x79, 0x54, 0x69, 0x70,
0x49, 0x6e, 0x66, 0x6f, 0x12, 0x1a, 0x0a, 0x08, 0x62, 0x75, 0x73, 0x69, 0x54, 0x79, 0x70, 0x65,
0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x08, 0x62, 0x75, 0x73, 0x69, 0x54, 0x79, 0x70, 0x65,
0x12, 0x16, 0x0a, 0x06, 0x62, 0x75, 0x73, 0x69, 0x49, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04,
0x52, 0x06, 0x62, 0x75, 0x73, 0x69, 0x49, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x63, 0x74, 0x72, 0x6c,
0x46, 0x6c, 0x61, 0x67, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x08, 0x63, 0x74, 0x72, 0x6c,
0x46, 0x6c, 0x61, 0x67, 0x12, 0x18, 0x0a, 0x07, 0x63, 0x32, 0x63, 0x54, 0x79, 0x70, 0x65, 0x18,
0x04, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x07, 0x63, 0x32, 0x63, 0x54, 0x79, 0x70, 0x65, 0x12, 0x20,
0x0a, 0x0b, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x18, 0x05, 0x20,
0x01, 0x28, 0x0d, 0x52, 0x0b, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65,
0x12, 0x18, 0x0a, 0x07, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x49, 0x64, 0x18, 0x06, 0x20, 0x01, 0x28,
0x04, 0x52, 0x07, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x49, 0x64, 0x12, 0x31, 0x0a, 0x0d, 0x6d, 0x73,
0x67, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x18, 0x07, 0x20, 0x03, 0x28,
0x0b, 0x32, 0x0b, 0x2e, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x52, 0x0d,
0x6d, 0x73, 0x67, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x12, 0x18, 0x0a,
0x07, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07,
0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x22, 0x36, 0x0a, 0x0a, 0x54, 0x65, 0x6d, 0x70, 0x6c,
0x50, 0x61, 0x72, 0x61, 0x6d, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20,
0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c,
0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22,
0xff, 0x01, 0x0a, 0x15, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x52, 0x65, 0x63, 0x61, 0x6c,
0x6c, 0x52, 0x65, 0x6d, 0x69, 0x6e, 0x64, 0x65, 0x72, 0x12, 0x10, 0x0a, 0x03, 0x75, 0x69, 0x6e,
0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x03, 0x75, 0x69, 0x6e, 0x12, 0x1a, 0x0a, 0x08, 0x6e,
0x69, 0x63, 0x6b, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x08, 0x6e,
0x69, 0x63, 0x6b, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x3e, 0x0a, 0x0f, 0x72, 0x65, 0x63, 0x61, 0x6c,
0x6c, 0x65, 0x64, 0x4d, 0x73, 0x67, 0x4c, 0x69, 0x73, 0x74, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b,
0x32, 0x14, 0x2e, 0x52, 0x65, 0x63, 0x61, 0x6c, 0x6c, 0x65, 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61,
0x67, 0x65, 0x4d, 0x65, 0x74, 0x61, 0x52, 0x0f, 0x72, 0x65, 0x63, 0x61, 0x6c, 0x6c, 0x65, 0x64,
0x4d, 0x73, 0x67, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x28, 0x0a, 0x0f, 0x72, 0x65, 0x6d, 0x69, 0x6e,
0x64, 0x65, 0x72, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0c,
0x52, 0x0f, 0x72, 0x65, 0x6d, 0x69, 0x6e, 0x64, 0x65, 0x72, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e,
0x74, 0x12, 0x18, 0x0a, 0x07, 0x75, 0x73, 0x65, 0x72, 0x64, 0x65, 0x66, 0x18, 0x05, 0x20, 0x01,
0x28, 0x0c, 0x52, 0x07, 0x75, 0x73, 0x65, 0x72, 0x64, 0x65, 0x66, 0x12, 0x1c, 0x0a, 0x09, 0x67,
0x72, 0x6f, 0x75, 0x70, 0x54, 0x79, 0x70, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x05, 0x52, 0x09,
0x67, 0x72, 0x6f, 0x75, 0x70, 0x54, 0x79, 0x70, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x6f, 0x70, 0x54,
0x79, 0x70, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x6f, 0x70, 0x54, 0x79, 0x70,
0x65, 0x22, 0xab, 0x01, 0x0a, 0x13, 0x52, 0x65, 0x63, 0x61, 0x6c, 0x6c, 0x65, 0x64, 0x4d, 0x65,
0x73, 0x73, 0x61, 0x67, 0x65, 0x4d, 0x65, 0x74, 0x61, 0x12, 0x10, 0x0a, 0x03, 0x73, 0x65, 0x71,
0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x03, 0x73, 0x65, 0x71, 0x12, 0x12, 0x0a, 0x04, 0x74,
0x69, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x74, 0x69, 0x6d, 0x65, 0x12,
0x1c, 0x0a, 0x09, 0x6d, 0x73, 0x67, 0x52, 0x61, 0x6e, 0x64, 0x6f, 0x6d, 0x18, 0x03, 0x20, 0x01,
0x28, 0x05, 0x52, 0x09, 0x6d, 0x73, 0x67, 0x52, 0x61, 0x6e, 0x64, 0x6f, 0x6d, 0x12, 0x18, 0x0a,
0x07, 0x6d, 0x73, 0x67, 0x54, 0x79, 0x70, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07,
0x6d, 0x73, 0x67, 0x54, 0x79, 0x70, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x6d, 0x73, 0x67, 0x46, 0x6c,
0x61, 0x67, 0x18, 0x05, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x6d, 0x73, 0x67, 0x46, 0x6c, 0x61,
0x67, 0x12, 0x1c, 0x0a, 0x09, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x55, 0x69, 0x6e, 0x18, 0x06,
0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x55, 0x69, 0x6e, 0x22,
0xbf, 0x02, 0x0a, 0x0f, 0x52, 0x65, 0x64, 0x47, 0x72, 0x61, 0x79, 0x54, 0x69, 0x70, 0x73, 0x49,
0x6e, 0x66, 0x6f, 0x12, 0x1e, 0x0a, 0x0a, 0x73, 0x68, 0x6f, 0x77, 0x4c, 0x61, 0x74, 0x65, 0x73,
0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0a, 0x73, 0x68, 0x6f, 0x77, 0x4c, 0x61, 0x74,
0x65, 0x73, 0x74, 0x12, 0x1c, 0x0a, 0x09, 0x73, 0x65, 0x6e, 0x64, 0x65, 0x72, 0x55, 0x69, 0x6e,
0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x09, 0x73, 0x65, 0x6e, 0x64, 0x65, 0x72, 0x55, 0x69,
0x6e, 0x12, 0x20, 0x0a, 0x0b, 0x72, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x72, 0x55, 0x69, 0x6e,
0x18, 0x03, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0b, 0x72, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x72,
0x55, 0x69, 0x6e, 0x12, 0x2c, 0x0a, 0x11, 0x73, 0x65, 0x6e, 0x64, 0x65, 0x72, 0x52, 0x69, 0x63,
0x68, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x11,
0x73, 0x65, 0x6e, 0x64, 0x65, 0x72, 0x52, 0x69, 0x63, 0x68, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e,
0x74, 0x12, 0x30, 0x0a, 0x13, 0x72, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x72, 0x52, 0x69, 0x63,
0x68, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x13,
0x72, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x72, 0x52, 0x69, 0x63, 0x68, 0x43, 0x6f, 0x6e, 0x74,
0x65, 0x6e, 0x74, 0x12, 0x18, 0x0a, 0x07, 0x61, 0x75, 0x74, 0x68, 0x4b, 0x65, 0x79, 0x18, 0x06,
0x20, 0x01, 0x28, 0x0c, 0x52, 0x07, 0x61, 0x75, 0x74, 0x68, 0x4b, 0x65, 0x79, 0x12, 0x18, 0x0a,
0x07, 0x6d, 0x73, 0x67, 0x54, 0x79, 0x70, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x11, 0x52, 0x07,
0x6d, 0x73, 0x67, 0x54, 0x79, 0x70, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x6c, 0x75, 0x63, 0x6b, 0x79,
0x46, 0x6c, 0x61, 0x67, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x09, 0x6c, 0x75, 0x63, 0x6b,
0x79, 0x46, 0x6c, 0x61, 0x67, 0x12, 0x1a, 0x0a, 0x08, 0x68, 0x69, 0x64, 0x65, 0x46, 0x6c, 0x61,
0x67, 0x18, 0x09, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x08, 0x68, 0x69, 0x64, 0x65, 0x46, 0x6c, 0x61,
0x67, 0x42, 0x0a, 0x5a, 0x08, 0x2e, 0x3b, 0x6e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x62, 0x06, 0x70,
0x72, 0x6f, 0x74, 0x6f, 0x33,
}
var (
file_group0x857_proto_rawDescOnce sync.Once
file_group0x857_proto_rawDescData = file_group0x857_proto_rawDesc
)
func file_group0x857_proto_rawDescGZIP() []byte {
file_group0x857_proto_rawDescOnce.Do(func() {
file_group0x857_proto_rawDescData = protoimpl.X.CompressGZIP(file_group0x857_proto_rawDescData)
})
return file_group0x857_proto_rawDescData
}
var file_group0x857_proto_msgTypes = make([]protoimpl.MessageInfo, 7)
var file_group0x857_proto_goTypes = []interface{}{
(*NotifyMsgBody)(nil), // 0: NotifyMsgBody
(*AIOGrayTipsInfo)(nil), // 1: AIOGrayTipsInfo
(*GeneralGrayTipInfo)(nil), // 2: GeneralGrayTipInfo
(*TemplParam)(nil), // 3: TemplParam
(*MessageRecallReminder)(nil), // 4: MessageRecallReminder
(*RecalledMessageMeta)(nil), // 5: RecalledMessageMeta
(*RedGrayTipsInfo)(nil), // 6: RedGrayTipsInfo
}
var file_group0x857_proto_depIdxs = []int32{
1, // 0: NotifyMsgBody.optMsgGrayTips:type_name -> AIOGrayTipsInfo
6, // 1: NotifyMsgBody.optMsgRedTips:type_name -> RedGrayTipsInfo
4, // 2: NotifyMsgBody.optMsgRecall:type_name -> MessageRecallReminder
2, // 3: NotifyMsgBody.optGeneralGrayTip:type_name -> GeneralGrayTipInfo
3, // 4: GeneralGrayTipInfo.msgTemplParam:type_name -> TemplParam
5, // 5: MessageRecallReminder.recalledMsgList:type_name -> RecalledMessageMeta
6, // [6:6] is the sub-list for method output_type
6, // [6:6] is the sub-list for method input_type
6, // [6:6] is the sub-list for extension type_name
6, // [6:6] is the sub-list for extension extendee
0, // [0:6] is the sub-list for field type_name
}
func init() { file_group0x857_proto_init() }
func file_group0x857_proto_init() {
if File_group0x857_proto != nil {
return
}
if !protoimpl.UnsafeEnabled {
file_group0x857_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*NotifyMsgBody); i {
case 0:
return &v.state
case 1:
return &v.sizeCache
case 2:
return &v.unknownFields
default:
return nil
}
}
file_group0x857_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*AIOGrayTipsInfo); i {
case 0:
return &v.state
case 1:
return &v.sizeCache
case 2:
return &v.unknownFields
default:
return nil
}
}
file_group0x857_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*GeneralGrayTipInfo); i {
case 0:
return &v.state
case 1:
return &v.sizeCache
case 2:
return &v.unknownFields
default:
return nil
}
}
file_group0x857_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*TemplParam); i {
case 0:
return &v.state
case 1:
return &v.sizeCache
case 2:
return &v.unknownFields
default:
return nil
}
}
file_group0x857_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*MessageRecallReminder); i {
case 0:
return &v.state
case 1:
return &v.sizeCache
case 2:
return &v.unknownFields
default:
return nil
}
}
file_group0x857_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*RecalledMessageMeta); i {
case 0:
return &v.state
case 1:
return &v.sizeCache
case 2:
return &v.unknownFields
default:
return nil
}
}
file_group0x857_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*RedGrayTipsInfo); i {
case 0:
return &v.state
case 1:
return &v.sizeCache
case 2:
return &v.unknownFields
default:
return nil
}
}
}
type x struct{}
out := protoimpl.TypeBuilder{
File: protoimpl.DescBuilder{
GoPackagePath: reflect.TypeOf(x{}).PkgPath(),
RawDescriptor: file_group0x857_proto_rawDesc,
NumEnums: 0,
NumMessages: 7,
NumExtensions: 0,
NumServices: 0,
},
GoTypes: file_group0x857_proto_goTypes,
DependencyIndexes: file_group0x857_proto_depIdxs,
MessageInfos: file_group0x857_proto_msgTypes,
}.Build()
File_group0x857_proto = out.File
file_group0x857_proto_rawDesc = nil
file_group0x857_proto_goTypes = nil
file_group0x857_proto_depIdxs = nil
}

View File

@ -0,0 +1,67 @@
syntax = "proto3";
option go_package = ".;notify";
message NotifyMsgBody {
AIOGrayTipsInfo optMsgGrayTips = 5;
RedGrayTipsInfo optMsgRedTips = 9;
MessageRecallReminder optMsgRecall = 11;
GeneralGrayTipInfo optGeneralGrayTip = 26;
int32 serviceType = 13;
}
message AIOGrayTipsInfo{
uint32 showLatest = 1;
bytes content = 2;
uint32 remind = 3;
bytes brief = 4;
uint64 receiverUin = 5;
uint32 reliaoAdminOpt = 6;
}
message GeneralGrayTipInfo {
uint64 busiType = 1;
uint64 busiId = 2;
uint32 ctrlFlag = 3;
uint32 c2cType = 4;
uint32 serviceType = 5;
uint64 templId = 6;
repeated TemplParam msgTemplParam = 7;
string content = 8;
}
message TemplParam {
string name = 1;
string value = 2;
}
message MessageRecallReminder {
int64 uin = 1;
bytes nickname = 2;
repeated RecalledMessageMeta recalledMsgList = 3;
bytes reminderContent = 4;
bytes userdef = 5;
int32 groupType = 6;
int32 opType = 7;
}
message RecalledMessageMeta {
int32 seq = 1;
int32 time = 2;
int32 msgRandom = 3;
int32 msgType = 4;
int32 msgFlag = 5;
int64 authorUin = 6;
}
message RedGrayTipsInfo {
uint32 showLatest = 1;
uint64 senderUin = 2;
uint64 receiverUin = 3;
string senderRichContent = 4;
string receiverRichContent = 5;
bytes authKey = 6;
sint32 msgType = 7;
uint32 luckyFlag = 8;
uint32 hideFlag = 9;
}

View File

@ -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.12.3 // protoc v3.11.4
// source: oidb.proto // source: oidb.proto
package oidb package oidb
@ -1445,6 +1445,85 @@ func (x *D8FCClientInfo) GetIngClientver() string {
return "" return ""
} }
type DED3ReqBody struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
ToUin int64 `protobuf:"varint,1,opt,name=toUin,proto3" json:"toUin,omitempty"`
GroupCode int64 `protobuf:"varint,2,opt,name=groupCode,proto3" json:"groupCode,omitempty"`
MsgSeq int32 `protobuf:"varint,3,opt,name=msgSeq,proto3" json:"msgSeq,omitempty"`
MsgRand int32 `protobuf:"varint,4,opt,name=msgRand,proto3" json:"msgRand,omitempty"`
AioUin int64 `protobuf:"varint,5,opt,name=aioUin,proto3" json:"aioUin,omitempty"`
}
func (x *DED3ReqBody) Reset() {
*x = DED3ReqBody{}
if protoimpl.UnsafeEnabled {
mi := &file_oidb_proto_msgTypes[15]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
}
func (x *DED3ReqBody) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*DED3ReqBody) ProtoMessage() {}
func (x *DED3ReqBody) ProtoReflect() protoreflect.Message {
mi := &file_oidb_proto_msgTypes[15]
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 DED3ReqBody.ProtoReflect.Descriptor instead.
func (*DED3ReqBody) Descriptor() ([]byte, []int) {
return file_oidb_proto_rawDescGZIP(), []int{15}
}
func (x *DED3ReqBody) GetToUin() int64 {
if x != nil {
return x.ToUin
}
return 0
}
func (x *DED3ReqBody) GetGroupCode() int64 {
if x != nil {
return x.GroupCode
}
return 0
}
func (x *DED3ReqBody) GetMsgSeq() int32 {
if x != nil {
return x.MsgSeq
}
return 0
}
func (x *DED3ReqBody) GetMsgRand() int32 {
if x != nil {
return x.MsgRand
}
return 0
}
func (x *DED3ReqBody) GetAioUin() int64 {
if x != nil {
return x.AioUin
}
return 0
}
var File_oidb_proto protoreflect.FileDescriptor var File_oidb_proto protoreflect.FileDescriptor
var file_oidb_proto_rawDesc = []byte{ var file_oidb_proto_rawDesc = []byte{
@ -1707,8 +1786,17 @@ var file_oidb_proto_rawDesc = []byte{
0x0a, 0x06, 0x69, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x0a, 0x06, 0x69, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06,
0x69, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x12, 0x22, 0x0a, 0x0c, 0x69, 0x6e, 0x67, 0x43, 0x6c, 0x69, 0x69, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x12, 0x22, 0x0a, 0x0c, 0x69, 0x6e, 0x67, 0x43, 0x6c, 0x69,
0x65, 0x6e, 0x74, 0x76, 0x65, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x69, 0x6e, 0x65, 0x6e, 0x74, 0x76, 0x65, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x69, 0x6e,
0x67, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x76, 0x65, 0x72, 0x42, 0x08, 0x5a, 0x06, 0x2e, 0x3b, 0x67, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x76, 0x65, 0x72, 0x22, 0x8b, 0x01, 0x0a, 0x0b, 0x44,
0x6f, 0x69, 0x64, 0x62, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, 0x45, 0x44, 0x33, 0x52, 0x65, 0x71, 0x42, 0x6f, 0x64, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x74, 0x6f,
0x55, 0x69, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x05, 0x74, 0x6f, 0x55, 0x69, 0x6e,
0x12, 0x1c, 0x0a, 0x09, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x43, 0x6f, 0x64, 0x65, 0x18, 0x02, 0x20,
0x01, 0x28, 0x03, 0x52, 0x09, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x16,
0x0a, 0x06, 0x6d, 0x73, 0x67, 0x53, 0x65, 0x71, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06,
0x6d, 0x73, 0x67, 0x53, 0x65, 0x71, 0x12, 0x18, 0x0a, 0x07, 0x6d, 0x73, 0x67, 0x52, 0x61, 0x6e,
0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x6d, 0x73, 0x67, 0x52, 0x61, 0x6e, 0x64,
0x12, 0x16, 0x0a, 0x06, 0x61, 0x69, 0x6f, 0x55, 0x69, 0x6e, 0x18, 0x05, 0x20, 0x01, 0x28, 0x03,
0x52, 0x06, 0x61, 0x69, 0x6f, 0x55, 0x69, 0x6e, 0x42, 0x08, 0x5a, 0x06, 0x2e, 0x3b, 0x6f, 0x69,
0x64, 0x62, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
} }
var ( var (
@ -1723,7 +1811,7 @@ func file_oidb_proto_rawDescGZIP() []byte {
return file_oidb_proto_rawDescData return file_oidb_proto_rawDescData
} }
var file_oidb_proto_msgTypes = make([]protoimpl.MessageInfo, 15) var file_oidb_proto_msgTypes = make([]protoimpl.MessageInfo, 16)
var file_oidb_proto_goTypes = []interface{}{ var file_oidb_proto_goTypes = []interface{}{
(*OIDBSSOPkg)(nil), // 0: OIDBSSOPkg (*OIDBSSOPkg)(nil), // 0: OIDBSSOPkg
(*D8A0RspBody)(nil), // 1: D8A0RspBody (*D8A0RspBody)(nil), // 1: D8A0RspBody
@ -1740,6 +1828,7 @@ var file_oidb_proto_goTypes = []interface{}{
(*D8FCCardNameElem)(nil), // 12: D8FCCardNameElem (*D8FCCardNameElem)(nil), // 12: D8FCCardNameElem
(*D8FCLevelName)(nil), // 13: D8FCLevelName (*D8FCLevelName)(nil), // 13: D8FCLevelName
(*D8FCClientInfo)(nil), // 14: D8FCClientInfo (*D8FCClientInfo)(nil), // 14: D8FCClientInfo
(*DED3ReqBody)(nil), // 15: DED3ReqBody
} }
var file_oidb_proto_depIdxs = []int32{ var file_oidb_proto_depIdxs = []int32{
2, // 0: D8A0RspBody.msgKickResult:type_name -> D8A0KickResult 2, // 0: D8A0RspBody.msgKickResult:type_name -> D8A0KickResult
@ -1945,6 +2034,18 @@ func file_oidb_proto_init() {
return nil return nil
} }
} }
file_oidb_proto_msgTypes[15].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*DED3ReqBody); i {
case 0:
return &v.state
case 1:
return &v.sizeCache
case 2:
return &v.unknownFields
default:
return nil
}
}
} }
file_oidb_proto_msgTypes[7].OneofWrappers = []interface{}{ file_oidb_proto_msgTypes[7].OneofWrappers = []interface{}{
(*D89AGroupinfo_Val)(nil), (*D89AGroupinfo_Val)(nil),
@ -1955,7 +2056,7 @@ func file_oidb_proto_init() {
GoPackagePath: reflect.TypeOf(x{}).PkgPath(), GoPackagePath: reflect.TypeOf(x{}).PkgPath(),
RawDescriptor: file_oidb_proto_rawDesc, RawDescriptor: file_oidb_proto_rawDesc,
NumEnums: 0, NumEnums: 0,
NumMessages: 15, NumMessages: 16,
NumExtensions: 0, NumExtensions: 0,
NumServices: 0, NumServices: 0,
}, },

View File

@ -145,4 +145,12 @@ message D8FCLevelName {
message D8FCClientInfo { message D8FCClientInfo {
int32 implat = 1; int32 implat = 1;
string ingClientver = 2; string ingClientver = 2;
}
message DED3ReqBody {
int64 toUin = 1;
int64 groupCode = 2;
int32 msgSeq = 3;
int32 msgRand = 4;
int64 aioUin = 5;
} }

1
go.mod
View File

@ -4,5 +4,6 @@ go 1.14
require ( require (
github.com/golang/protobuf v1.4.2 github.com/golang/protobuf v1.4.2
github.com/tidwall/gjson v1.6.1
google.golang.org/protobuf v1.25.0 google.golang.org/protobuf v1.25.0
) )

6
go.sum
View File

@ -24,6 +24,12 @@ github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/
github.com/google/go-cmp v0.5.0 h1:/QaMHBdZ26BB3SSst0Iwl10Epc+xhTquomWX0oZEB6w= github.com/google/go-cmp v0.5.0 h1:/QaMHBdZ26BB3SSst0Iwl10Epc+xhTquomWX0oZEB6w=
github.com/google/go-cmp v0.5.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.5.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA=
github.com/tidwall/gjson v1.6.1 h1:LRbvNuNuvAiISWg6gxLEFuCe72UKy5hDqhxW/8183ws=
github.com/tidwall/gjson v1.6.1/go.mod h1:BaHyNc5bjzYkPqgLq7mdVzeiRtULKULXLgZFKsxEHI0=
github.com/tidwall/match v1.0.1 h1:PnKP62LPNxHKTwvHHZZzdOAOCtsJTjo6dZLCwpKm5xc=
github.com/tidwall/match v1.0.1/go.mod h1:LujAq0jyVjBy028G1WhWfIzbpQfMO8bBZ6Tyb0+pL9E=
github.com/tidwall/pretty v1.0.2 h1:Z7S3cePv9Jwm1KwS0513MRaoUe3S01WPbLNV40pwWZU=
github.com/tidwall/pretty v1.0.2/go.mod h1:XNkn88O1ChpSDQmQeStsy+sBenx6DDtFZJxhVysOjyk=
golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE=

View File

@ -96,6 +96,19 @@ type LightAppElement struct {
Content string Content string
} }
type RedBagElement struct {
MsgType RedBagMessageType
Title string
}
type RedBagMessageType int
const (
Simple RedBagMessageType = 2
Lucky RedBagMessageType = 3
World RedBagMessageType = 6
)
func NewText(s string) *TextElement { func NewText(s string) *TextElement {
return &TextElement{Content: s} return &TextElement{Content: s}
} }
@ -244,6 +257,10 @@ func (e *LightAppElement) Type() ElementType {
return LightApp return LightApp
} }
func (e *RedBagElement) Type() ElementType {
return RedBag
}
var faceMap = map[int]string{ var faceMap = map[int]string{
14: "微笑", 14: "微笑",
1: "撇嘴", 1: "撇嘴",

View File

@ -6,6 +6,7 @@ import (
"github.com/Mrs4s/MiraiGo/client/pb/msg" "github.com/Mrs4s/MiraiGo/client/pb/msg"
"github.com/Mrs4s/MiraiGo/utils" "github.com/Mrs4s/MiraiGo/utils"
"github.com/golang/protobuf/proto" "github.com/golang/protobuf/proto"
"github.com/tidwall/gjson"
"math" "math"
"reflect" "reflect"
"regexp" "regexp"
@ -83,6 +84,7 @@ const (
Voice Voice
Video Video
LightApp LightApp
RedBag
) )
func (s *Sender) IsAnonymous() bool { func (s *Sender) IsAnonymous() bool {
@ -138,6 +140,8 @@ func (msg *GroupMessage) ToString() (res string) {
res += "[Image: " + e.ImageId + "]" res += "[Image: " + e.ImageId + "]"
case *AtElement: case *AtElement:
res += e.Display res += e.Display
case *RedBagElement:
res += "[RedBag:" + e.Title + "]"
case *ReplyElement: case *ReplyElement:
res += "[Reply:" + strconv.FormatInt(int64(e.ReplySeq), 10) + "]" res += "[Reply:" + strconv.FormatInt(int64(e.ReplySeq), 10) + "]"
} }
@ -502,6 +506,15 @@ func ParseMessageElems(elems []*msg.Elem) []IMessageElement {
if elem.RichMsg.ServiceId == 33 { if elem.RichMsg.ServiceId == 33 {
continue // 前面一个 elem 已经解析到链接 continue // 前面一个 elem 已经解析到链接
} }
if isOk := strings.Contains(content, "<?xml"); isOk {
res = append(res, NewRichXml(content, int64(elem.RichMsg.ServiceId)))
continue
} else {
if gjson.Valid(content) {
res = append(res, NewRichJson(content))
continue
}
}
res = append(res, NewText(content)) res = append(res, NewText(content))
} }
} }
@ -532,6 +545,17 @@ func ParseMessageElems(elems []*msg.Elem) []IMessageElement {
Md5: elem.NotOnlineImage.PicMd5, Md5: elem.NotOnlineImage.PicMd5,
}) })
} }
if elem.QQWalletMsg != nil && elem.QQWalletMsg.AioBody != nil {
msgType := elem.QQWalletMsg.AioBody.MsgType
if msgType == 2 || msgType == 3 || msgType == 6 {
return []IMessageElement{
&RedBagElement{
MsgType: RedBagMessageType(msgType),
Title: elem.QQWalletMsg.AioBody.Receiver.Title,
},
}
}
}
if elem.Face != nil { if elem.Face != nil {
res = append(res, NewFace(elem.Face.Index)) res = append(res, NewFace(elem.Face.Index))
} }

View File

@ -52,12 +52,12 @@ func BuildOicqRequestPacket(uin int64, commandId uint16, encrypt IEncryptMethod,
return p.Bytes() return p.Bytes()
} }
func BuildSsoPacket(seq uint16, commandName, imei string, extData, outPacketSessionId, body, ksid []byte) []byte { func BuildSsoPacket(seq uint16, protocol uint32, commandName, imei string, extData, outPacketSessionId, body, ksid []byte) []byte {
p := binary.NewWriter() p := binary.NewWriter()
p.WriteIntLvPacket(4, func(writer *binary.Writer) { p.WriteIntLvPacket(4, func(writer *binary.Writer) {
writer.WriteUInt32(uint32(seq)) writer.WriteUInt32(uint32(seq))
writer.WriteUInt32(537062409) // Android pad (sub app id) writer.WriteUInt32(protocol)
writer.WriteUInt32(537062409) writer.WriteUInt32(protocol)
writer.Write([]byte{0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00}) writer.Write([]byte{0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00})
if len(extData) == 0 || len(extData) == 4 { if len(extData) == 0 || len(extData) == 4 {
writer.WriteUInt32(0x04) writer.WriteUInt32(0x04)

View File

@ -1,16 +1,18 @@
package tlv package tlv
import "github.com/Mrs4s/MiraiGo/binary" import (
"github.com/Mrs4s/MiraiGo/binary"
)
func T100() []byte { func T100(protocol uint32) []byte {
return binary.NewWriterF(func(w *binary.Writer) { return binary.NewWriterF(func(w *binary.Writer) {
w.WriteUInt16(0x100) w.WriteUInt16(0x100)
w.WriteTlv(binary.NewWriterF(func(w *binary.Writer) { w.WriteTlv(binary.NewWriterF(func(w *binary.Writer) {
w.WriteUInt16(1) w.WriteUInt16(1)
w.WriteUInt32(5) w.WriteUInt32(5)
w.WriteUInt32(16) w.WriteUInt32(16)
w.WriteUInt32(537062409) // Sub app id w.WriteUInt32(protocol)
w.WriteUInt32(0) // App client version w.WriteUInt32(0) // App client version
w.WriteUInt32(34869472) w.WriteUInt32(34869472)
})) }))
}) })

View File

@ -8,7 +8,7 @@ import (
"time" "time"
) )
func T106(uin, salt uint32, passwordMd5 [16]byte, guidAvailable bool, guid, tgtgtKey []byte) []byte { func T106(uin, salt, protocol uint32, passwordMd5 [16]byte, guidAvailable bool, guid, tgtgtKey []byte) []byte {
return binary.NewWriterF(func(w *binary.Writer) { return binary.NewWriterF(func(w *binary.Writer) {
w.WriteUInt16(0x106) w.WriteUInt16(0x106)
body := binary.NewWriterF(func(w *binary.Writer) { body := binary.NewWriterF(func(w *binary.Writer) {
@ -36,8 +36,8 @@ func T106(uin, salt uint32, passwordMd5 [16]byte, guidAvailable bool, guid, tgtg
} else { } else {
w.Write(guid) w.Write(guid)
} }
w.WriteUInt32(537062409) // sub app id (android pad) w.WriteUInt32(protocol)
w.WriteUInt32(1) // password login w.WriteUInt32(1) // password login
b := make([]byte, 8) b := make([]byte, 8)
binary2.BigEndian.PutUint64(b, uint64(uin)) binary2.BigEndian.PutUint64(b, uint64(uin))
w.WriteTlv(b) w.WriteTlv(b)