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

temp message sending supported.

This commit is contained in:
Mrs4s 2020-08-10 05:37:51 +08:00
parent 901c915850
commit 626638e899
3 changed files with 70 additions and 3 deletions

View File

@ -44,11 +44,11 @@ qq-android协议的golang实现 移植于mirai
- [x] 客户端离线
#### 主动操作
> 为防止滥用,将不支持主动/被动发送任何临时会话消息
> 为防止滥用,将不支持主动邀请新成员进群
- [x] 发送群消息
- [x] 发送好友消息
- [ ] ~~发送临时会话消息~~
- [x] 发送临时会话消息
- [x] 获取/刷新群列表
- [x] 获取/刷新群成员列表
- [x] 获取/刷新好友列表
@ -61,6 +61,6 @@ qq-android协议的golang实现 移植于mirai
- [x] 群设置 (全体禁言/群名)
- [x] 修改群成员Card
- [x] 修改群成员头衔
- [ ] 群成员邀请
- [ ] ~~群成员邀请~~
- [x] 群成员禁言/解除禁言
- [x] T出群成员

View File

@ -454,6 +454,40 @@ func (c *QQClient) buildFriendSendingPacket(target int64, msgSeq, r int32, time
return seq, packet
}
// MessageSvc.PbSendMsg
func (c *QQClient) buildTempSendingPacket(groupUin, target int64, msgSeq, r int32, time int64, m *message.SendingMessage) (uint16, []byte) {
seq := c.nextSeq()
req := &msg.SendMessageRequest{
RoutingHead: &msg.RoutingHead{GrpTmp: &msg.GrpTmp{
GroupUin: groupUin,
ToUin: target,
}},
ContentHead: &msg.ContentHead{PkgNum: 1},
MsgBody: &msg.MessageBody{
RichText: &msg.RichText{
Elems: message.ToProtoElems(m.Elements, false),
},
},
MsgSeq: msgSeq,
MsgRand: r,
SyncCookie: func() []byte {
cookie := &msg.SyncCookie{
Time: time,
Ran1: rand.Int63(),
Ran2: rand.Int63(),
Const1: syncConst1,
Const2: syncConst2,
Const3: 0x1d,
}
b, _ := proto.Marshal(cookie)
return b
}(),
}
payload, _ := proto.Marshal(req)
packet := packets.BuildUniPacket(c.Uin, seq, "MessageSvc.PbSendMsg", 1, c.OutGoingPacketSessionId, EmptyBytes, c.sigInfo.d2Key, payload)
return seq, packet
}
// LongConn.OffPicUp
func (c *QQClient) buildOffPicUpPacket(target int64, md5 []byte, size int32) (uint16, []byte) {
seq := c.nextSeq()

View File

@ -291,6 +291,39 @@ func (c *QQClient) SendPrivateMessage(target int64, m *message.SendingMessage) *
}
}
func (c *QQClient) SendTempMessage(groupCode, target int64, m *message.SendingMessage) *message.TempMessage {
group := c.FindGroup(groupCode)
if group == nil {
return nil
}
if c.FindFriend(target) != nil {
pm := c.SendPrivateMessage(target, m)
return &message.TempMessage{
Id: pm.Id,
GroupCode: group.Code,
GroupName: group.Name,
Sender: pm.Sender,
Elements: m.Elements,
}
}
mr := int32(rand.Uint32())
seq := c.nextFriendSeq()
t := time.Now().Unix()
_, pkt := c.buildTempSendingPacket(group.Uin, target, seq, mr, t, m)
_ = c.send(pkt)
return &message.TempMessage{
Id: seq,
GroupCode: group.Code,
GroupName: group.Name,
Sender: &message.Sender{
Uin: c.Uin,
Nickname: c.Nickname,
IsFriend: true,
},
Elements: m.Elements,
}
}
func (c *QQClient) GetForwardMessage(resId string) *message.ForwardMessage {
i, err := c.sendAndWait(c.buildMultiApplyDownPacket(resId))
if err != nil {