Skip to content

Commit

Permalink
feat: batch kick (#279)
Browse files Browse the repository at this point in the history
* kick batch

* Update group_info.go

* Update client.go

* Update builders.go

---------

Co-authored-by: 源文雨 <[email protected]>
  • Loading branch information
lz1998 and fumiama authored Aug 1, 2023
1 parent 1d0fdf6 commit b49cd23
Show file tree
Hide file tree
Showing 3 changed files with 14 additions and 12 deletions.
20 changes: 11 additions & 9 deletions client/builders.go
Original file line number Diff line number Diff line change
Expand Up @@ -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)
Expand Down
4 changes: 2 additions & 2 deletions client/client.go
Original file line number Diff line number Diff line change
Expand Up @@ -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) {
Expand Down
2 changes: 1 addition & 1 deletion client/group_info.go
Original file line number Diff line number Diff line change
Expand Up @@ -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")
Expand Down

0 comments on commit b49cd23

Please sign in to comment.