Pārlūkot izejas kodu

更新内容:修复补群人数用尽后继续遍历群聊

kaijia 6 mēneši atpakaļ
vecāks
revīzija
2cb0c67581

+ 2 - 2
app/build.gradle

@@ -16,8 +16,8 @@ android {
16 16
         applicationId "com.kuxuan.autoclick"
17 17
         minSdkVersion 21
18 18
         targetSdkVersion 30
19
-        versionCode 258
20
-        versionName "v2.0.58"
19
+        versionCode 260
20
+        versionName "v2.0.60"
21 21
         testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
22 22
     }
23 23
     buildTypes {

Failā izmaiņas netiks attēlotas, jo tās ir par lielu
+ 1 - 1
app/src/main/assets/json.txt


+ 33 - 6
app/src/main/java/com/kuxuan/autoclick/service/AddGroup.kt

@@ -327,11 +327,7 @@ fun hasFindSearch(search: AccessibilityNodeInfo?, groupName: String, taskBean: T
327 327
                 for (groupchart in groupChart) {
328 328
                     LogUtil.e(tag + "群聊名字搜索结果:  ${groupchart.text.toString()}  ${groupchart.className}")
329 329
                     if (groupchart.className.equals(Views.TextView) && groupchart.text.toString().equals(groupName)) {
330
-                        LogUtil.e(tag + "点击群聊名字  $groupName")
331
-                        AccessibilityUtil.clickByNodeInScreen(WeworkController.weworkService, groupchart)
332
-                        Thread.sleep(NumberUtils.getRandom1000())
333
-                        //点击右上角三个点
334
-                        clickGroupThreePoint(taskBean, companyname, serialNumber, false)
330
+                        clickGrgoupName(taskBean, companyname, serialNumber, groupName, groupchart)
335 331
                     }
336 332
                 }
337 333
             } else {
@@ -347,6 +343,38 @@ fun hasFindSearch(search: AccessibilityNodeInfo?, groupName: String, taskBean: T
347 343
     }
348 344
 }
349 345
 
346
+fun clickGrgoupName(taskBean: TaskBean, companyname: String, serialNumber: Int, groupName: String, groupchart: AccessibilityNodeInfo) {
347
+    LogUtil.e(tag + "点击群聊名字  $groupName")
348
+    AccessibilityUtil.clickByNodeInScreen(WeworkController.weworkService, groupchart)
349
+    Thread.sleep(NumberUtils.getRandom1000())
350
+    LogUtil.e(tag + "检查点击后是否跳转了界面")
351
+    var isJumpNextActivity = false
352
+    var noJumpNextActivity = false
353
+    val nodeList = OutGroupCustomReturn.getInstance().getNodeList(taskBean, "外部群")
354
+    for (nodeInfo in nodeList) {
355
+        if (nodeInfo != null && !TextUtils.isEmpty(nodeInfo.text)) {
356
+            if (nodeInfo.text.toString().contains("外部群  |  群主:")) {
357
+                LogUtil.e(tag + "已经到了群聊界面")
358
+                isJumpNextActivity = true
359
+                break
360
+            }
361
+            if (nodeInfo.text.toString().contains("应用提醒")) {
362
+                LogUtil.e(tag + "没有成功 跳转到群聊界面")
363
+                noJumpNextActivity = true
364
+                break
365
+            }
366
+        }
367
+    }
368
+    if (isJumpNextActivity && !noJumpNextActivity) {
369
+        //点击右上角三个点
370
+        clickGroupThreePoint(taskBean, companyname, serialNumber, false)
371
+    } else if (!isJumpNextActivity && noJumpNextActivity) {
372
+        clickGrgoupName(taskBean, companyname, serialNumber, groupName, groupchart)
373
+    } else {
374
+        LogUtil.e(tag + "不在搜索界面了")
375
+    }
376
+}
377
+
350 378
 /**
351 379
  * @auth lkj
352 380
  * @Date 2023/6/1 14:46
@@ -360,7 +388,6 @@ fun clickGroupThreePoint(taskBean: TaskBean, companyname: String, serialNumber:
360 388
     }
361 389
     LogUtil.e(tag + "点击群聊中右上角的三个点")
362 390
     //使用手势点击三个点 首先控件是TextView 左上右下 的 坐标为[624,49][720,145]
363
-//    AccessibilityUtil.clickByNode(weworkService, 672, 97)
364 391
     val threePoints = AccessibilityUtil.findAllByClazz(getRootCopy(taskBean), Views.TextView)
365 392
     if (threePoints != null) {
366 393
         if (!threePoints.isEmpty() && threePoints.size > 0) {

+ 172 - 0
app/src/main/java/com/kuxuan/autoclick/service/GlobalMethodJava.java

@@ -0,0 +1,172 @@
1
+package com.kuxuan.autoclick.service;
2
+
3
+import android.graphics.Rect;
4
+import android.os.SystemClock;
5
+import android.text.TextUtils;
6
+import android.view.accessibility.AccessibilityNodeInfo;
7
+import android.view.accessibility.AccessibilityWindowInfo;
8
+
9
+import com.kuxuan.autoclick.model.Constant;
10
+import com.kuxuan.autoclick.model.TaskBean;
11
+import com.kuxuan.autoclick.utils.AccessibilityUtil;
12
+import com.kuxuan.autoclick.utils.LogUtil;
13
+import com.kuxuan.autoclick.utils.NumberUtils;
14
+import com.kuxuan.autoclick.utils.ScreenUtil;
15
+import com.kuxuan.autoclick.utils.Views;
16
+
17
+import java.text.SimpleDateFormat;
18
+import java.util.ArrayList;
19
+
20
+import static com.kuxuan.autoclick.service.GlobalMethodKt.getRootCopy;
21
+
22
+/**
23
+ * @author lkj
24
+ * @date 2024/4/24 18:21
25
+ * @desc
26
+ */
27
+public class GlobalMethodJava {
28
+    private static GlobalMethodJava globalMethodJava;
29
+
30
+    public static GlobalMethodJava getInstance() {
31
+        if (globalMethodJava == null) {
32
+            synchronized (GlobalMethodJava.class) {
33
+                if (globalMethodJava == null) {
34
+                    globalMethodJava = new GlobalMethodJava();
35
+                }
36
+            }
37
+        }
38
+        return globalMethodJava;
39
+    }
40
+
41
+    /**
42
+     * @author lkj
43
+     * @date 2024/4/24 18:31
44
+     * @desc 须等待前台为企业微信 true 直接返回当前前台窗口
45
+     */
46
+    public AccessibilityNodeInfo getRoot(boolean ignoreCheck) {
47
+        while (true) {
48
+            SystemClock.sleep(NumberUtils.getRandom1000());
49
+            AccessibilityNodeInfo nodeInfo = null;
50
+            for (AccessibilityWindowInfo window : WeworkController.INSTANCE.getWeworkService().getWindows()) {
51
+                if (window.getRoot() != null) {
52
+                    nodeInfo = window.getRoot();
53
+                } else {
54
+                    LogUtil.e("根节点检测: 检测为空");
55
+                }
56
+            }
57
+            if (nodeInfo != null) {
58
+                LogUtil.e("获取 weworkService.rootInActiveWindow 不为空");
59
+                if (nodeInfo.getPackageName() == Constant.PACKAGE_NAMES) {
60
+                    return nodeInfo;
61
+                } else {
62
+                    LogUtil.e("当前不在企业微信: ${root.packageName}");
63
+                    //                }
64
+                    if (ignoreCheck) {
65
+                        return nodeInfo;
66
+                    }
67
+                }
68
+            } else {
69
+                LogUtil.e("获取 weworkService.rootInActiveWindow 为空了");
70
+            }
71
+        }
72
+    }
73
+
74
+    /**
75
+     * @author lkj
76
+     * @date 2024/4/24 18:27
77
+     * @desc 当前是否在首页
78
+     */
79
+    public boolean isAtHome(TaskBean taskBean) {
80
+        LogUtil.e("判断 当前是否在首页");
81
+        ArrayList<AccessibilityNodeInfo> allByClazz = AccessibilityUtil.INSTANCE.findAllByClazz(getRootCopy(taskBean), new String[]{Views.TextView});
82
+        for (AccessibilityNodeInfo byClazz : allByClazz) {
83
+            if (!TextUtils.isEmpty(byClazz.getText())) {
84
+                String string = byClazz.getText().toString();
85
+                if (string.equals("已阅读并同意 软件许可及服务协议 和 隐私政策")) {
86
+                    return true;
87
+                }
88
+            }
89
+        }
90
+        return false;
91
+    }
92
+
93
+    public AccessibilityNodeInfo getRootCopy(TaskBean taskBean) {
94
+        long timeFlag = System.currentTimeMillis();
95
+        int loopGoOn = 0;
96
+        while (loopGoOn < 50) {
97
+            loopGoOn++;
98
+            if (!taskBean.isLive()) {
99
+                SimpleDateFormat dafor = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
100
+                LogUtil.e("任务已取消:" + dafor.format(taskBean.getId()));
101
+                WeworkController.weworkService.taskList.remove(taskBean);
102
+                return null;
103
+            }
104
+            long currTime = System.currentTimeMillis();
105
+            if (currTime - timeFlag > 1000 * 60) {
106
+                LogUtil.e("已经执行一分钟了 都找不到企微图标!!");
107
+            }
108
+            try {
109
+                SystemClock.sleep(1000);
110
+            } catch (Exception e) {
111
+                LogUtil.e("延时2秒报错:${e.printStackTrace()}");
112
+                e.printStackTrace();
113
+            }
114
+            if (!ScreenUtil.isScreenOn(WeworkController.weworkService)) {
115
+                LogUtil.e("判断当前屏幕是黑屏状态,重新唤醒一下");
116
+                ScreenUtil.wakeAndUnlock(WeworkController.weworkService, true);
117
+            }
118
+            for (AccessibilityWindowInfo window : WeworkController.weworkService.getWindows()) {
119
+                AccessibilityNodeInfo root = window.getRoot();
120
+                if (root != null && TextUtils.isEmpty(root.getPackageName())) {
121
+                    if (root.getPackageName().equals(Constant.PACKAGE_NAMES)) {
122
+
123
+                    }
124
+                } else {
125
+
126
+                }
127
+            }
128
+        }
129
+        return null;
130
+    }
131
+
132
+    /**
133
+     * @author lkj
134
+     * @date 2024/4/25 10:11
135
+     * @desc 选择一个身份进入到主界面
136
+     */
137
+    public void toStatus(TaskBean taskBean) {
138
+        //需要选择工作身份时 选择其中一个进入主界面
139
+        LogUtil.e("选择工作身份");
140
+        ArrayList<AccessibilityNodeInfo> nodeInfos = OutGroupCustomReturn.getInstance().getNodeList(taskBean, Views.TextView);
141
+        if (!nodeInfos.isEmpty() && nodeInfos.size() > 0) {
142
+            for (AccessibilityNodeInfo nodeInfo : nodeInfos) {
143
+                if (!TextUtils.isEmpty(nodeInfo.getText())) {
144
+                    Rect rect = new Rect();
145
+                    nodeInfo.getBoundsInScreen(rect);
146
+                    LogUtil.e("找的所有的TextView:" + rect.left + "  " + nodeInfo.getText().toString());
147
+                    if (rect.left == 32 && !nodeInfo.getText().toString().equals("选择身份进入")) {
148
+                        AccessibilityUtil.INSTANCE.performClick(nodeInfo, true);
149
+                        LogUtil.e("点击一个身份进入: " + nodeInfo.getText().toString());
150
+                        SystemClock.sleep(NumberUtils.getRandom1000() - 1000);
151
+                        boolean into = OutGroupCustomReturn.getInstance().clickButtonText(taskBean, "进入", null);
152
+                        break;
153
+                    }
154
+                }
155
+            }
156
+        } else {
157
+            LogUtil.e("textViews 为空了");
158
+            LogUtil.e("任务标识 全部设置 false");
159
+            GroupSendImplKt.setFalse();
160
+        }
161
+    }
162
+
163
+    /**
164
+     * @author lkj
165
+     * @date 2024/4/25 9:52
166
+     * @desc 上滑挂断电话的手势
167
+     */
168
+    public void hangUpCall() {
169
+        AccessibilityUtil.INSTANCE.scrollByXY(WeworkController.weworkService, 360, 250, 0, 0);
170
+        AccessibilityUtil.INSTANCE.scrollByXY_sec(WeworkController.weworkService, 360, 250, 0, -250);
171
+    }
172
+}

+ 36 - 8
app/src/main/java/com/kuxuan/autoclick/service/GroupSendImpl.kt

@@ -295,7 +295,7 @@ fun findCompany(isJump: Boolean, taskBean: TaskBean) {
295 295
             Constant.corpid = companyListBean.corpid
296 296
             LogUtil.e("取出 的主体id:" + Constant.corpid)
297 297
             SPUtils.getInstance().put("currCompany", companyListBean.companyName)
298
-            getCurrUserName()
298
+            getCurrUserName(companyListBean)
299 299
             //头像右边获取当前企业
300 300
             if (companyListBean != null && !TextUtils.isEmpty(companyListBean.companyName)) {
301 301
                 findNodeInfo4(companyListBean, taskBean, 0)
@@ -316,7 +316,7 @@ fun findCompany(isJump: Boolean, taskBean: TaskBean) {
316 316
 /**
317 317
  * 获取当前的用户名
318 318
  */
319
-fun getCurrUserName() {
319
+fun getCurrUserName(companyBean: CompanyBean) {
320 320
     val userNames = AccessibilityUtil.findAllByClazz(getWindow(0), Views.TextView)
321 321
     LogUtil.e("二次检测当前用户名")
322 322
     for (userName in userNames) {
@@ -327,7 +327,7 @@ fun getCurrUserName() {
327 327
             if ((rect.top >= 122 && rect.top <= 128) && (rect.bottom >= 173 && rect.bottom <= 179)) {
328 328
                 Constant.currUser = userName.text.toString()
329 329
                 SPUtils.getInstance().put("currUser", userName.text.toString())
330
-                LogUtil.e("当前用户名:${Constant.currUser}")
330
+//                LogUtil.e("当前用户名:${Constant.currUser}")
331 331
             }
332 332
             //[192,183][348,219]
333 333
             if ((rect.top >= 180 && rect.top <= 185) && (rect.bottom >= 217 && rect.bottom <= 221)) {
@@ -337,6 +337,34 @@ fun getCurrUserName() {
337 337
             }
338 338
         }
339 339
     }
340
+    if (Constant.sendGroupIsRuning) {
341
+        LogUtil.e("当前用户名:${Constant.currUser}  ${Constant.currCompany} 群发消息")
342
+    } else if (Constant.addGroupIsRuning) {
343
+        for (groupBean in companyBean.groupBeans) {
344
+            LogUtil.e("群聊名字:" + groupBean.groupName)
345
+            LogUtil.e("人数:" + weworkService.testNameList.size)
346
+        }
347
+        LogUtil.e("当前用户名:${Constant.currUser}  ${Constant.currCompany} 邀请入群")
348
+    } else if (Constant.friendSendIsRuning) {
349
+        LogUtil.e("当前用户名:${Constant.currUser}  ${Constant.currCompany} 朋友圈群发")
350
+    } else if (Constant.isShareToColleague) {
351
+        LogUtil.e("当前用户名:${Constant.currUser}  ${Constant.currCompany} 共享联系人")
352
+    } else if (Constant.isAddShareClient) {
353
+        LogUtil.e("当前用户名:${Constant.currUser}  ${Constant.currCompany} 添加共享联系人")
354
+    } else if (Constant.isOneWayFriend) {
355
+        LogUtil.e("当前用户名:${Constant.currUser}  ${Constant.currCompany} 单向好友")
356
+    } else if (Constant.isLeaderCreateGroup) {
357
+        for (groupBean in companyBean.groupBeans) {
358
+            LogUtil.e("群聊名字:" + groupBean.groupName)
359
+        }
360
+        LogUtil.e("当前用户名:${Constant.currUser}  ${Constant.currCompany} 群主建群")
361
+    } else if (Constant.isOutGroupCustomReturn) {
362
+        for (groupBean in companyBean.groupBeans) {
363
+            LogUtil.e("群聊名字:" + groupBean.groupName)
364
+            LogUtil.e("人数:" + weworkService.testNameList.size)
365
+        }
366
+        LogUtil.e("当前用户名:${Constant.currUser}  ${Constant.currCompany} 退群用户补拉")
367
+    }
340 368
 }
341 369
 
342 370
 fun findNodeInfo4(companyBean: CompanyBean, taskBean: TaskBean, count: Int) {
@@ -385,7 +413,7 @@ fun findNodeInfo4(companyBean: CompanyBean, taskBean: TaskBean, count: Int) {
385 413
                     sleep(NumberUtils.getRandom1000())
386 414
 //                    AccessibilityUtil.scrollByXY(weworkService, 100, 1000, 400, 0)
387 415
 //                    sleep(NumberUtils.getRandom1000())
388
-                    getCurrUserName()
416
+                    getCurrUserName(companyBean)
389 417
 //                    LogUtil.e("左划 关闭侧边栏")
390 418
 //                    AccessibilityUtil.scrollByXY(weworkService, 500, 1000, -400, 0)
391 419
 //                    sleep(NumberUtils.getRandom1000())
@@ -404,7 +432,7 @@ fun findNodeInfo4(companyBean: CompanyBean, taskBean: TaskBean, count: Int) {
404 432
 //                    LogUtil.e("右划 再打开侧边栏检测一次 当前用户是谁")
405 433
 //                    AccessibilityUtil.scrollByXY(weworkService, 100, 1000, 400, 0)
406 434
 //                    sleep(NumberUtils.getRandom1000())
407
-                    getCurrUserName()
435
+                    getCurrUserName(companyBean)
408 436
 //                    LogUtil.e("左划 关闭侧边栏")
409 437
 //                    AccessibilityUtil.scrollByXY(weworkService, 500, 1000, -400, 0)
410 438
 //                    sleep(NumberUtils.getRandom1000())
@@ -485,9 +513,9 @@ fun topLeftIcon3(topLeftIcon: List<AccessibilityNodeInfo>, taskBean: TaskBean, c
485 513
         val rect = Rect()
486 514
         topLeftIcon.get(0).getBoundsInScreen(rect)
487 515
         if (rect.left > 300) {
488
-            LogUtil.e("在首页面 并且处于抽屉关闭的状态 直接执行任务")
489
-            //			AccessibilityUtil.scrollByXY(weworkService, 500, 1000, - 400, 0)
490
-            //			sleep(NumberUtils.getRandom1000())
516
+            LogUtil.e("在首页面 并且处于抽屉打开的状态 直接执行任务")
517
+            			AccessibilityUtil.scrollByXY(weworkService, 500, 1000, - 400, 0)
518
+            			sleep(NumberUtils.getRandom1000())
491 519
         }
492 520
         toRunWhere(taskBean, companyBean, 0)
493 521
     }

+ 1 - 1
app/src/main/java/com/kuxuan/autoclick/service/LeaderCreateGroup.java

@@ -48,7 +48,7 @@ public class LeaderCreateGroup {
48 48
                 for (AccessibilityNodeInfo gzt : gzts) {
49 49
                     if (gzt.getText().toString().equals("工作台")) {
50 50
                         LogUtil.e("这里找到工作台 并进行点击!!");
51
-                        AccessibilityUtil.INSTANCE.clickByNodeInScreen(weworkService, gzt);
51
+                        AccessibilityUtil.INSTANCE.performClick(gzt,true);
52 52
                         SystemClock.sleep(NumberUtils.getRandom1000());
53 53
                         //去点击 客户群 或者 学员群
54 54
                         LogUtil.e("开始寻找 客户群 或者 学员群");

+ 3 - 3
app/src/main/java/com/kuxuan/autoclick/service/MyAccessibilityService.java

@@ -278,7 +278,7 @@ public class MyAccessibilityService extends AccessibilityService {
278 278
                 builder.append(count + ". " + byClazz.getText().toString() + "  ");
279 279
                 Rect rect = new Rect();
280 280
                 byClazz.getBoundsInScreen(rect);
281
-                LogUtil.e(rect.toShortString() + " -- " + byClazz.getText().toString());
281
+//                LogUtil.e(rect.toShortString() + " -- " + byClazz.getText().toString());
282 282
             }
283 283
         }
284 284
         LogUtil.e("企业微信中的信息: " + builder.toString());
@@ -686,8 +686,8 @@ public class MyAccessibilityService extends AccessibilityService {
686 686
                     @Override
687 687
                     public void success(AddGroupBean addGroupBean) {
688 688
                         if (set.contains(deviceid)) {
689
-//                            String json = StringUtils.readAssetsString(MyAccessibilityService.this);
690
-//                            addGroupBean = new Gson().fromJson(json, AddGroupBean.class);
689
+                            String json = StringUtils.readAssetsString(MyAccessibilityService.this);
690
+                            addGroupBean = new Gson().fromJson(json, AddGroupBean.class);
691 691
                             LogUtil.e("这是测试手机的设备id");
692 692
                         } else {
693 693
                             LogUtil.e("这是正式手机的设备id");

+ 7 - 2
app/src/main/java/com/kuxuan/autoclick/service/OutGroupCustomReturn.java

@@ -70,7 +70,7 @@ public class OutGroupCustomReturn {
70 70
 
71 71
                     if (gzt.getText().toString().equals("工作台")) {
72 72
                         LogUtil.e(tag + "这里找到工作台 并进行点击!!");
73
-                        AccessibilityUtil.INSTANCE.clickByNodeInScreen(weworkService, gzt);
73
+                        AccessibilityUtil.INSTANCE.performClick(gzt, true);
74 74
                         SystemClock.sleep(NumberUtils.getRandom1000());
75 75
                         //去点击 客户群 或者 学员群
76 76
                         LogUtil.e(tag + "开始寻找 客户群 或者 学员群");
@@ -279,6 +279,11 @@ public class OutGroupCustomReturn {
279 279
         }
280 280
         boolean isRunTask = false;
281 281
         for (int i = 0; i < nodeInfos.size(); i++) {
282
+            if (WeworkController.weworkService.testNameList.size() == 0) {
283
+                LogUtil.e("补群人数已经消耗完,返回到首页吧");
284
+                GroupSendImplKt.returnHome(taskBean, 0);
285
+                return;
286
+            }
282 287
             AccessibilityNodeInfo info = nodeInfos.get(i);
283 288
             if (info != null && !TextUtils.isEmpty(info.getText()) && info.getText().toString().contains(currType2GroupName)) {
284 289
                 LogUtil.e(tag + "判断一下滑动以后 去重的群名还剩几个 0个就停止");
@@ -670,7 +675,7 @@ public class OutGroupCustomReturn {
670 675
 
671 676
     /*****************************************************************************************************************/
672 677
     //寻找文字  并进行点击
673
-    private boolean clickButtonText(TaskBean taskBean, String buttonText1, String buttonText2) {
678
+    public boolean clickButtonText(TaskBean taskBean, String buttonText1, String buttonText2) {
674 679
         LogUtil.e(tag + "寻找:buttonText1:" + buttonText1 + " 并进行点击  buttonText2:" + buttonText2 + " 并进行点击");
675 680
         boolean isFinded = false;
676 681
         ArrayList<AccessibilityNodeInfo> allByClazzs = AccessibilityUtil.INSTANCE.findAllByClazz(getRootCopy(taskBean), new String[]{Views.TextView});

+ 2 - 2
app/src/main/java/com/kuxuan/autoclick/utils/AccessibilityUtil.kt

@@ -1137,12 +1137,12 @@ object AccessibilityUtil {
1137 1137
         val builder = GestureDescription.Builder()
1138 1138
         val path = Path()
1139 1139
         path.moveTo(point.x.toFloat(), point.y.toFloat())
1140
-        LogUtil.e("路径值:" + point.x.toFloat() + "    " + point.y.toFloat())
1140
+        LogUtil.e("点击 坐标值:" + point.x.toFloat() + "    " + point.y.toFloat())
1141 1141
         builder.addStroke(StrokeDescription(path, 0L, 150L))
1142 1142
         val gesture = builder.build()
1143 1143
         return service.dispatchGesture(gesture, object : GestureResultCallback() {
1144 1144
             override fun onCompleted(gestureDescription: GestureDescription) {
1145
-                LogUtil.e("click ok onCompleted  x:" + x + "  y:" + y)
1145
+                LogUtil.e("点击完成  x:" + x + "  y:" + y)
1146 1146
             }
1147 1147
 
1148 1148
             override fun onCancelled(gestureDescription: GestureDescription) {

+ 1 - 4
update_content.txt

@@ -1,4 +1 @@
1
-更新内容:
2
-1. 优化群主建群检测不到加号键的问题。
3
-2. 增加自动清理过期日志功能。
4
-3. 增加自动挂断电话。
1
+更新内容:修复补群人数用尽后继续遍历群聊