From b49cd234844204b88bde4aa4e92438d56339112a Mon Sep 17 00:00:00 2001 From: Zheng Li <875543533@qq.com> Date: Tue, 1 Aug 2023 10:29:04 +0800 Subject: [PATCH] feat: batch kick (#279) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * kick batch * Update group_info.go * Update client.go * Update builders.go --------- Co-authored-by: 源文雨 <41315874+fumiama@users.noreply.github.com> --- client/builders.go | 20 +++++++++++--------- client/client.go | 4 ++-- client/group_info.go | 2 +- 3 files changed, 14 insertions(+), 12 deletions(-) diff --git a/client/builders.go b/client/builders.go index b8ac9201..58c93a0d 100644 --- a/client/builders.go +++ b/client/builders.go @@ -1093,21 +1093,23 @@ func (c *QQClient) buildGroupMuteAllPacket(groupCode int64, mute bool) (uint16, } // OidbSvc.0x8a0_0 -func (c *QQClient) buildGroupKickPacket(groupCode, memberUin int64, kickMsg string, block bool) (uint16, []byte) { +func (c *QQClient) buildGroupKickPacket(groupCode int64, kickMsg string, block bool, memberUins ...int64) (uint16, []byte) { flagBlock := 0 if block { flagBlock = 1 } + msgKickList := make([]*oidb.D8A0KickMemberInfo, 0, len(memberUins)) + for _, memberUin := range memberUins { + msgKickList = append(msgKickList, &oidb.D8A0KickMemberInfo{ + OptUint32Operate: 5, + OptUint64MemberUin: memberUin, + OptUint32Flag: int32(flagBlock), + }) + } body := &oidb.D8A0ReqBody{ OptUint64GroupCode: groupCode, - MsgKickList: []*oidb.D8A0KickMemberInfo{ - { - OptUint32Operate: 5, - OptUint64MemberUin: memberUin, - OptUint32Flag: int32(flagBlock), - }, - }, - KickMsg: []byte(kickMsg), + MsgKickList: msgKickList, + KickMsg: []byte(kickMsg), } b, _ := proto.Marshal(body) payload := c.packOIDBPackage(2208, 0, b) diff --git a/client/client.go b/client/client.go index 5ab30515..8aab4af1 100644 --- a/client/client.go +++ b/client/client.go @@ -726,8 +726,8 @@ func (c *QQClient) quitGroup(groupCode int64) { _, _ = c.sendAndWait(c.buildQuitGroupPacket(groupCode)) } -func (c *QQClient) kickGroupMember(groupCode, memberUin int64, msg string, block bool) { - _, _ = c.sendAndWait(c.buildGroupKickPacket(groupCode, memberUin, msg, block)) +func (c *QQClient) KickGroupMembers(groupCode int64, msg string, block bool, memberUins ...int64) { + _, _ = c.sendAndWait(c.buildGroupKickPacket(groupCode, msg, block, memberUins...)) } func (g *GroupInfo) removeMember(uin int64) { diff --git a/client/group_info.go b/client/group_info.go index f2e4610a..24431231 100644 --- a/client/group_info.go +++ b/client/group_info.go @@ -389,7 +389,7 @@ func (m *GroupMemberInfo) EditSpecialTitle(title string) { func (m *GroupMemberInfo) Kick(msg string, block bool) error { if m.Uin != m.Group.client.Uin && m.Manageable() { - m.Group.client.kickGroupMember(m.Group.Code, m.Uin, msg, block) + m.Group.client.KickGroupMembers(m.Group.Code, msg, block, m.Uin) return nil } else { return errors.New("not manageable")