获取QQ群成员QQ号 - qq.com

2021/3/20下午4:28:28

目前为 2021-05-13 提交的版本。查看 最新版本

  1. // ==UserScript==
  2. // @name 获取QQ群成员QQ号 - qq.com
  3. // @namespace Violentmonkey Scripts
  4. // @match https://qun.qq.com/member.html
  5. // @grant GM_setClipboard
  6. // @icon https://ue.qzone.qq.com/vipstyle/component/img/logo/logo-vip@2x.png
  7. // @version 1.0
  8. // @author 渣渣火,QQ:2596136372
  9. // @description 2021/3/20下午4:28:28
  10. // ==/UserScript==
  11.  
  12. (function () {
  13. // 群成员QQ号数组
  14. let qunMembersList = [];
  15. // 需要过滤的QQ群
  16. let filterQQList = [];
  17. setTimeout(() => {
  18. // 添加过滤QQ群号
  19. let groupTitle = document.querySelector('.group-tit');
  20. let inputQQNum = document.createElement('input');
  21. inputQQNum.placeholder = '请输入需要过滤的QQ群号码,多个以英文逗号分割';
  22. inputQQNum.style.width = '900px';
  23. groupTitle.appendChild(inputQQNum);
  24. // 添加获取按钮
  25. let membersDom = document.querySelector('.group-members');
  26. let copyBtn = document.createElement('button');
  27. copyBtn.innerText = '一键复制QQ群成员QQ号';
  28. copyBtn.style.width = 'auto';
  29. copyBtn.style.backgroundColor = '#2b77e5';
  30. membersDom.appendChild(copyBtn);
  31. // 添加事件
  32. copyBtn.addEventListener('click', () => {
  33. filterQQList = inputQQNum.value.split(',');
  34. console.log('filterQQList:', filterQQList);
  35. if (qunMembersList.length === 0) {
  36. getQunGroup();
  37. } else {
  38. GM_setClipboard(qunMembersList.join('\n'));
  39. console.log('群信息已获取完毕,请直接粘贴');
  40. alert('群信息已获取完毕,请直接粘贴');
  41. }
  42. });
  43. }, 3000);
  44. async function getQunGroup() {
  45. let groupListParams = new FormData();
  46. groupListParams.append('bkn', $.getCSRFToken());
  47. let response = await fetch('/cgi-bin/qun_mgr/get_group_list', {
  48. method: 'POST',
  49. body: groupListParams
  50. });
  51. let res = await response.json();
  52. filterQQArr(res);
  53. console.log('res:', res);
  54. // 获取创建的群
  55. await getListQun(res.create);
  56. // 获取管理群
  57. await getListQun(res.manage);
  58. // 获取加入群
  59. await getListQun(res.join);
  60. qunMembersList = [...new Set(qunMembersList)];
  61. qunMembersList = qunMembersList.map((d) => d + '@qq.com');
  62. console.log('总人数为:', qunMembersList.length);
  63. window.qunMembersList = qunMembersList;
  64. GM_setClipboard(qunMembersList.join('\n'));
  65. console.log('群成员QQ号信息已获取完毕,请直接粘贴');
  66. alert('群成员QQ号信息已获取完毕,请直接粘贴');
  67. }
  68. function filterQQArr(res) {
  69. res.create = res.create || [];
  70. res.manage = res.manage || [];
  71. res.join = res.join || [];
  72. res.create = res.create.filter(d => !filterQQList.includes(d.gc.toString()));
  73. res.manage = res.manage.filter(d => !filterQQList.includes(d.gc.toString()));
  74. res.join = res.join.filter(d => !filterQQList.includes(d.gc.toString()));
  75. }
  76. // 循环获取群信息
  77. async function getListQun(arr = []) {
  78. for (let index = 0; index < arr.length; index++) {
  79. const qun = arr[index];
  80. console.log(`正在获取第${index + 1}个群,${qun.gn},${qun.gc}`);
  81. await getQunInfo(qun);
  82. }
  83. }
  84. // 循环分页获取群QQ号
  85. async function getQunInfo(qun) {
  86. let pageSize = 40;
  87. let page = 1;
  88. let isGet = true;
  89. let membersList = [];
  90. while (isGet) {
  91. console.log('页数:', (page - 1) * pageSize, page * pageSize);
  92. let mems = await getQunMembers(qun.gc, (page - 1) * pageSize, page * pageSize);
  93. if (mems.length === 0 || mems.length < pageSize) {
  94. membersList.push(...mems);
  95. isGet = false;
  96. } else {
  97. page++;
  98. membersList.push(...mems);
  99. }
  100. }
  101. // 获取最后一页的时候,第一条数据和上一页最后一条数据会重复,去重一下
  102. membersList = [...new Set(membersList)];
  103. console.log(`${qun.gn},群人数为:${membersList.length}`);
  104. console.log('membersList:', membersList);
  105. qunMembersList.push(...membersList);
  106. }
  107. // 获取群QQ号
  108. async function getQunMembers(gc, st, end) {
  109. let params = new FormData();
  110. params.append('gc', gc);
  111. params.append('st', st);
  112. params.append('end', end);
  113. params.append('sort', 0);
  114. params.append('bkn', $.getCSRFToken());
  115. await delay(500);
  116. let response = await fetch('/cgi-bin/qun_mgr/search_group_members', {
  117. method: 'POST',
  118. body: params
  119. });
  120. let res = await response.json();
  121. return res.mems ? res.mems.map((d) => d.uin) : [];
  122. }
  123.  
  124. async function delay(time) {
  125. return new Promise((res) => {
  126. setTimeout(() => {
  127. console.log(`延迟${time}ms`);
  128. res();
  129. }, time);
  130. });
  131. }
  132. })();

QingJ © 2025

镜像随时可能失效,请加Q群300939539或关注我们的公众号极客氢云获取最新地址