From 2accd73f8b8e4a1a904c3b7a768532d388a060ab Mon Sep 17 00:00:00 2001 From: Mrs4s <1844812067@qq.com> Date: Wed, 22 Jul 2020 03:52:52 +0800 Subject: [PATCH] member mute supported. --- README.md | 3 ++- client/builders.go | 19 +++++++++++++++++++ client/client.go | 4 ++++ client/entities.go | 8 ++++++++ 4 files changed, 33 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 1e318370..a3be2a8d 100644 --- a/README.md +++ b/README.md @@ -57,4 +57,5 @@ qq-android协议的golang实现 移植于Mirai - [x] 修改群成员Card - [x] 修改群成员头衔 - [ ] 群成员邀请 -- [ ] T出群成员 +- [x] 群成员禁言/解除禁言 +- [x] T出群成员 diff --git a/client/builders.go b/client/builders.go index 1c36b68e..1cf47be2 100644 --- a/client/builders.go +++ b/client/builders.go @@ -794,3 +794,22 @@ func (c *QQClient) buildGroupKickPacket(groupCode, memberUin int64, kickMsg stri packet := packets.BuildUniPacket(c.Uin, seq, "OidbSvc.0x8a0_0", 1, c.OutGoingPacketSessionId, EmptyBytes, c.sigInfo.d2Key, payload) return seq, packet } + +// OidbSvc.0x570_8 +func (c *QQClient) buildGroupMutePacket(groupCode, memberUin int64, time uint32) (uint16, []byte) { + seq := c.nextSeq() + req := &oidb.OIDBSSOPkg{ + Command: 1392, + ServiceType: 8, + Bodybuffer: binary.NewWriterF(func(w *binary.Writer) { + w.WriteUInt32(uint32(groupCode)) + w.WriteByte(32) + w.WriteUInt16(1) + w.WriteUInt32(uint32(memberUin)) + w.WriteUInt32(time) + }), + } + payload, _ := proto.Marshal(req) + packet := packets.BuildUniPacket(c.Uin, seq, "OidbSvc.0x570_8", 1, c.OutGoingPacketSessionId, EmptyBytes, c.sigInfo.d2Key, payload) + return seq, packet +} diff --git a/client/client.go b/client/client.go index 7eed5eb7..9214cdac 100644 --- a/client/client.go +++ b/client/client.go @@ -465,6 +465,10 @@ func (c *QQClient) groupMuteAll(groupCode int64, mute bool) { _, _ = c.sendAndWait(c.buildGroupMuteAllPacket(groupCode, mute)) } +func (c *QQClient) groupMute(groupCode, memberUin int64, time uint32) { + _, _ = c.sendAndWait(c.buildGroupMutePacket(groupCode, memberUin, time)) +} + func (c *QQClient) kickGroupMember(groupCode, memberUin int64, msg string) { _, _ = c.sendAndWait(c.buildGroupKickPacket(groupCode, memberUin, msg)) } diff --git a/client/entities.go b/client/entities.go index 9287d6a6..5ffca9bc 100644 --- a/client/entities.go +++ b/client/entities.go @@ -215,6 +215,14 @@ func (m *GroupMemberInfo) Kick(msg string) { } } +func (m *GroupMemberInfo) Mute(time uint32) { + if m.Uin != m.Group.client.Uin && m.Manageable() { + if time < 2592000 { + m.Group.client.groupMute(m.Group.Code, m.Uin, time) + } + } +} + func (m *GroupMemberInfo) Manageable() bool { if m.Uin == m.Group.client.Uin { return true