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")